diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2022-12-28 00:05:31 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2022-12-28 00:05:31 +0900 |
| commit | 36d2bb332b87900e8178f2ec54d2cfda07f075db (patch) | |
| tree | 1a5573e489b3b962920ae91ea5df374b0d1e204b /src/terminal.go | |
| parent | 4dbe45640a46a67e2c46fcd0f6257e078b6817c1 (diff) | |
| download | fzf-36d2bb332b87900e8178f2ec54d2cfda07f075db.tar.gz | |
Add transform-query(...) action
Test case authored by @SpicyLemon
Close #1930
Close #2465
Close #2559
Close #2509 (e.g. fzf --bind 'space:transform-query:printf %s%s {q} {}')
Diffstat (limited to 'src/terminal.go')
| -rw-r--r-- | src/terminal.go | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/terminal.go b/src/terminal.go index 68a099cf..2d18f791 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -308,6 +308,7 @@ const ( actToggleSort actTogglePreview actTogglePreviewWrap + actTransformQuery actPreview actChangePreview actChangePreviewWindow @@ -2014,10 +2015,11 @@ func (t *Terminal) redraw(clear bool) { t.printAll() } -func (t *Terminal) executeCommand(template string, forcePlus bool, background bool) { +func (t *Terminal) executeCommand(template string, forcePlus bool, background bool, captureFirstLine bool) string { + line := "" valid, list := t.buildPlusList(template, forcePlus) if !valid { - return + return line } command := t.replacePlaceholder(template, forcePlus, string(t.input), list) cmd := util.ExecCommand(command, false) @@ -2033,11 +2035,21 @@ func (t *Terminal) executeCommand(template string, forcePlus bool, background bo t.refresh() } else { t.tui.Pause(false) - cmd.Run() + if captureFirstLine { + out, _ := cmd.StdoutPipe() + reader := bufio.NewReader(out) + cmd.Start() + line, _ = reader.ReadString('\n') + line = strings.TrimRight(line, "\r\n") + cmd.Wait() + } else { + cmd.Run() + } t.tui.Resume(false, false) } t.executing.Set(false) cleanTemporaryFiles() + return line } func (t *Terminal) hasPreviewer() bool { @@ -2610,9 +2622,9 @@ func (t *Terminal) Loop() { switch a.t { case actIgnore: case actExecute, actExecuteSilent: - t.executeCommand(a.a, false, a.t == actExecuteSilent) + t.executeCommand(a.a, false, a.t == actExecuteSilent, false) case actExecuteMulti: - t.executeCommand(a.a, true, false) + t.executeCommand(a.a, true, false, false) case actInvalid: t.mutex.Unlock() return false @@ -2635,6 +2647,10 @@ func (t *Terminal) Loop() { t.previewed.version = 0 req(reqPreviewRefresh) } + case actTransformQuery: + query := t.executeCommand(a.a, false, true, true) + t.input = []rune(query) + t.cx = len(t.input) case actToggleSort: t.sort = !t.sort changed = true |
