From aa439ccbb08b04cd6c5294d29dd8a2d1c7f5838f Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Fri, 21 Oct 2022 20:50:23 +0200 Subject: [PATCH] make ctrl-f select the search query --- tabby-core/src/services/hotkeys.service.ts | 21 ++++++++++++------ .../src/api/baseTerminalTab.component.ts | 22 ++++++++++++------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/tabby-core/src/services/hotkeys.service.ts b/tabby-core/src/services/hotkeys.service.ts index 3e6b1559..b3887578 100644 --- a/tabby-core/src/services/hotkeys.service.ts +++ b/tabby-core/src/services/hotkeys.service.ts @@ -1,5 +1,5 @@ import { Injectable, Inject, NgZone, EventEmitter } from '@angular/core' -import { Observable, Subject } from 'rxjs' +import { Observable, Subject, filter } from 'rxjs' import { HotkeyDescription, HotkeyProvider } from '../api/hotkeyProvider' import { KeyEventData, getKeyName, Keystroke, KeyName, getKeystrokeName, metaKeyName, altKeyName } from './hotkeys.util' import { ConfigService } from './config.service' @@ -28,7 +28,16 @@ export class HotkeysService { /** * Fired for each recognized hotkey */ - get hotkey$ (): Observable { return this._hotkey } + get unfilteredHotkey$ (): Observable { return this._hotkey } + + /** + * Fired for each recognized hotkey + */ + get hotkey$ (): Observable { + return this._hotkey.pipe(filter(() => { + return document.querySelectorAll('input:focus').length === 0 + })) + } /** * Fired for once hotkey is released @@ -292,11 +301,9 @@ export class HotkeysService { this.emitHotkeyOff(this.pressedHotkey) } } - if (document.querySelectorAll('input:focus').length === 0) { - console.debug('Matched hotkey', hotkey) - this._hotkey.next(hotkey) - this.pressedHotkey = hotkey - } + console.debug('Matched hotkey', hotkey) + this._hotkey.next(hotkey) + this.pressedHotkey = hotkey this.recognitionPhase = false } diff --git a/tabby-terminal/src/api/baseTerminalTab.component.ts b/tabby-terminal/src/api/baseTerminalTab.component.ts index 304435c9..1a07955b 100644 --- a/tabby-terminal/src/api/baseTerminalTab.component.ts +++ b/tabby-terminal/src/api/baseTerminalTab.component.ts @@ -191,6 +191,20 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit this.logger = this.log.create('baseTerminalTab') this.setTitle(this.translate.instant('Terminal')) + this.subscribeUntilDestroyed(this.hotkeys.unfilteredHotkey$, async hotkey => { + if (!this.hasFocus) { + return + } + if (hotkey === 'search') { + this.showSearchPanel = true + setImmediate(() => { + const input = this.element.nativeElement.querySelector('.search-input') + input?.focus() + input?.select() + }) + } + }) + this.subscribeUntilDestroyed(this.hotkeys.hotkey$, async hotkey => { if (!this.hasFocus) { return @@ -265,14 +279,6 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit }[this.hostApp.platform]) }) break - case 'search': - this.showSearchPanel = true - setImmediate(() => { - const input = this.element.nativeElement.querySelector('.search-input') - input?.focus() - input?.select() - }) - break case 'pane-focus-all': this.focusAllPanes() break