From 932ed9b8f2b6168c3725df84c80386fb284d7df3 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Sun, 23 Jul 2017 20:55:41 +0200 Subject: [PATCH] proper visual bell (fixes #131) --- terminus-terminal/src/bell.ogg | Bin 0 -> 7154 bytes .../src/components/terminalTab.component.ts | 13 +++++++++---- terminus-terminal/src/persistenceProviders.ts | 2 +- terminus-terminal/webpack.config.js | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 terminus-terminal/src/bell.ogg diff --git a/terminus-terminal/src/bell.ogg b/terminus-terminal/src/bell.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d076186e45ec929aa299b1315179ff2c11be9fdb GIT binary patch literal 7154 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 literal 0 HcmV?d00001 diff --git a/terminus-terminal/src/components/terminalTab.component.ts b/terminus-terminal/src/components/terminalTab.component.ts index 39dc54cf..4dbeb652 100644 --- a/terminus-terminal/src/components/terminalTab.component.ts +++ b/terminus-terminal/src/components/terminalTab.component.ts @@ -32,6 +32,7 @@ export class TerminalTabComponent extends BaseTabComponent { alternateScreenActive$ = new BehaviorSubject(false) mouseEvent$ = new Subject() htermVisible = false + private bellPlayer: HTMLAudioElement private io: any constructor ( @@ -84,6 +85,8 @@ export class TerminalTabComponent extends BaseTabComponent { this.resetZoom() } }) + this.bellPlayer = document.createElement('audio') + this.bellPlayer.src = require('../bell.ogg') } getRecoveryToken (): any { @@ -126,13 +129,15 @@ export class TerminalTabComponent extends BaseTabComponent { }, 1000) this.bell$.subscribe(() => { - if (this.config.store.terminal.bell !== 'off') { - let bg = preferenceManager.get('background-color') + if (this.config.store.terminal.bell === 'visual') { preferenceManager.set('background-color', 'rgba(128,128,128,.25)') setTimeout(() => { - preferenceManager.set('background-color', bg) + this.configure() }, 125) } + if (this.config.store.terminal.bell === 'audible') { + this.bellPlayer.play() + } // TODO audible }) } @@ -246,7 +251,7 @@ export class TerminalTabComponent extends BaseTabComponent { preferenceManager.set('font-family', `"${config.terminal.font}", "monospace-fallback", monospace`) this.setFontSize() preferenceManager.set('enable-bold', true) - preferenceManager.set('audible-bell-sound', '') + // preferenceManager.set('audible-bell-sound', '') preferenceManager.set('desktop-notification-bell', config.terminal.bell === 'notification') preferenceManager.set('enable-clipboard-notice', false) preferenceManager.set('receive-encoding', 'raw') diff --git a/terminus-terminal/src/persistenceProviders.ts b/terminus-terminal/src/persistenceProviders.ts index 42da2070..e00e3379 100644 --- a/terminus-terminal/src/persistenceProviders.ts +++ b/terminus-terminal/src/persistenceProviders.ts @@ -87,7 +87,7 @@ export class ScreenPersistenceProvider extends SessionPersistenceProvider { let configPath = '/tmp/.termScreenConfig' await fs.writeFile(configPath, ` escape ^^^ - vbell on + vbell off deflogin on defflow off term xterm-color diff --git a/terminus-terminal/webpack.config.js b/terminus-terminal/webpack.config.js index 3b79b3b0..02c5ad5e 100644 --- a/terminus-terminal/webpack.config.js +++ b/terminus-terminal/webpack.config.js @@ -35,7 +35,7 @@ module.exports = { { test: /\.scss$/, use: ['to-string-loader', 'css-loader', 'sass-loader'] }, { test: /\.css$/, use: ['to-string-loader', 'css-loader'] }, { - test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/, + test: /\.(ttf|eot|otf|woff|woff2|ogg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader", options: { limit: 999999999999,