diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2025-07-23 19:39:01 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2025-07-23 19:41:06 +0900 |
| commit | 4efcc344c35e8bb7e6ba7bb23e5885051420b361 (patch) | |
| tree | ffa9231de82f616dbeb0a892ea878911ee02f135 /src/terminal.go | |
| parent | 5818b58350e080e13ee4b26a2b4f76b7c3712704 (diff) | |
| download | fzf-4efcc344c35e8bb7e6ba7bb23e5885051420b361.tar.gz | |
Add 'trigger(KEY_OR_EVENT[,...])' action
Diffstat (limited to 'src/terminal.go')
| -rw-r--r-- | src/terminal.go | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/terminal.go b/src/terminal.go index 37c947be..c0e79066 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -604,6 +604,8 @@ const ( actTransformQuery actTransformSearch + actTrigger + actBgTransform actBgTransformBorderLabel actBgTransformGhost @@ -5443,6 +5445,7 @@ func (t *Terminal) Loop() error { return nil } } + triggering := map[tui.Event]struct{}{} previousInput := t.input previousCx := t.cx previousVersion := t.version @@ -6234,6 +6237,20 @@ func (t *Terminal) Loop() error { case actDisableSearch: t.paused = true req(reqPrompt) + case actTrigger: + if _, chords, err := parseKeyChords(a.a, ""); err == nil { + for _, chord := range chords { + if _, prs := triggering[chord]; prs { + // Avoid recursive triggering + continue + } + if acts, prs := t.keymap[chord]; prs { + triggering[chord] = struct{}{} + doActions(acts) + delete(triggering, chord) + } + } + } case actSigStop: p, err := os.FindProcess(os.Getpid()) if err == nil { @@ -6555,13 +6572,13 @@ func (t *Terminal) Loop() error { t.reading = true } case actUnbind: - if keys, err := parseKeyChords(a.a, "PANIC"); err == nil { + if keys, _, err := parseKeyChords(a.a, "PANIC"); err == nil { for key := range keys { delete(t.keymap, key) } } case actRebind: - if keys, err := parseKeyChords(a.a, "PANIC"); err == nil { + if keys, _, err := parseKeyChords(a.a, "PANIC"); err == nil { for key := range keys { if originalAction, found := t.keymapOrg[key]; found { t.keymap[key] = originalAction @@ -6569,7 +6586,7 @@ func (t *Terminal) Loop() error { } } case actToggleBind: - if keys, err := parseKeyChords(a.a, "PANIC"); err == nil { + if keys, _, err := parseKeyChords(a.a, "PANIC"); err == nil { for key := range keys { if _, bound := t.keymap[key]; bound { delete(t.keymap, key) |
