summaryrefslogtreecommitdiff
path: root/src/terminal.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2025-07-23 19:39:01 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-07-23 19:41:06 +0900
commit4efcc344c35e8bb7e6ba7bb23e5885051420b361 (patch)
treeffa9231de82f616dbeb0a892ea878911ee02f135 /src/terminal.go
parent5818b58350e080e13ee4b26a2b4f76b7c3712704 (diff)
downloadfzf-4efcc344c35e8bb7e6ba7bb23e5885051420b361.tar.gz
Add 'trigger(KEY_OR_EVENT[,...])' action
Diffstat (limited to 'src/terminal.go')
-rw-r--r--src/terminal.go23
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)