diff --git a/ext/js/app/frontend.js b/ext/js/app/frontend.js index e1b531d4..7913d7d8 100644 --- a/ext/js/app/frontend.js +++ b/ext/js/app/frontend.js @@ -79,7 +79,8 @@ class Frontend { ]); this._hotkeyHandler.registerActions([ - ['scanSelectedText', this._onActionScanSelectedText.bind(this)] + ['scanSelectedText', this._onActionScanSelectedText.bind(this)], + ['scanTextAtCaret', this._onActionScanTextAtCaret.bind(this)] ]); } @@ -172,7 +173,11 @@ class Frontend { // Action handlers _onActionScanSelectedText() { - this._scanSelectedText(); + this._scanSelectedText(false); + } + + _onActionScanTextAtCaret() { + this._scanSelectedText(true); } // API message handlers @@ -679,19 +684,19 @@ class Frontend { }; } - async _scanSelectedText() { - const range = this._getFirstNonEmptySelectionRange(); + async _scanSelectedText(allowEmptyRange) { + const range = this._getFirstSelectionRange(allowEmptyRange); if (range === null) { return false; } const source = new TextSourceRange(range, range.toString(), null, null); await this._textScanner.search(source, {focus: true, restoreSelection: true}); return true; } - _getFirstNonEmptySelectionRange() { + _getFirstSelectionRange(allowEmptyRange) { const selection = window.getSelection(); for (let i = 0, ii = selection.rangeCount; i < ii; ++i) { const range = selection.getRangeAt(i); - if (range.toString().length > 0) { + if (range.toString().length > 0 || allowEmptyRange) { return range; } } diff --git a/ext/js/pages/settings/keyboard-shortcuts-controller.js b/ext/js/pages/settings/keyboard-shortcuts-controller.js index aeff15b6..5e7b7783 100644 --- a/ext/js/pages/settings/keyboard-shortcuts-controller.js +++ b/ext/js/pages/settings/keyboard-shortcuts-controller.js @@ -52,6 +52,7 @@ class KeyboardShortcutController { ['playAudioFromSource', {scopes: new Set(['popup', 'search']), argument: {template: 'hotkey-argument-audio-source', default: 'jpod101'}}], ['copyHostSelection', {scopes: new Set(['popup'])}], ['scanSelectedText', {scopes: new Set(['web'])}], + ['scanTextAtCaret', {scopes: new Set(['web'])}], ['toggleOption', {scopes: new Set(['popup', 'search']), argument: {template: 'hotkey-argument-setting-path', default: ''}}] ]); } diff --git a/ext/settings.html b/ext/settings.html index 732a96e2..7f9cc8ec 100644 --- a/ext/settings.html +++ b/ext/settings.html @@ -3227,6 +3227,7 @@ +