Browse Source

make ctrl-f select the search query

Eugene Pankov 3 years ago
parent
commit
aa439ccbb0

+ 14 - 7
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<string> { return this._hotkey }
+    get unfilteredHotkey$ (): Observable<string> { return this._hotkey }
+
+    /**
+     * Fired for each recognized hotkey
+     */
+    get hotkey$ (): Observable<string> {
+        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
     }
 

+ 14 - 8
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