summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2025-02-18 10:08:47 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-02-18 10:08:47 +0900
commitf975b402365d92c816a060aba580811bc5c55cc5 (patch)
treef1353f787184c3c23ecfe295ea11713fe277a940
parent01d9d9c8c895de728e7abcad1723db019280452d (diff)
downloadfzf-f975b402365d92c816a060aba580811bc5c55cc5.tar.gz
Fix {q} in preview window affected by 'search' action
-rw-r--r--src/terminal.go10
-rw-r--r--test/test_preview.rb14
2 files changed, 20 insertions, 4 deletions
diff --git a/src/terminal.go b/src/terminal.go
index a81e2c79..6fa64895 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -638,6 +638,7 @@ type previewRequest struct {
scrollOffset int
list []*Item
env []string
+ query string
}
type previewResult struct {
@@ -4385,6 +4386,7 @@ func (t *Terminal) Loop() error {
var items []*Item
var commandTemplate string
var env []string
+ var query string
initialOffset := 0
t.previewBox.Wait(func(events *util.Events) {
for req, value := range *events {
@@ -4398,6 +4400,7 @@ func (t *Terminal) Loop() error {
initialOffset = request.scrollOffset
items = request.list
env = request.env
+ query = request.query
}
}
events.Clear()
@@ -4411,8 +4414,7 @@ func (t *Terminal) Loop() error {
version++
// We don't display preview window if no match
if items[0] != nil {
- _, query := t.Input()
- command, tempFiles := t.replacePlaceholder(commandTemplate, false, string(query), items)
+ command, tempFiles := t.replacePlaceholder(commandTemplate, false, query, items)
cmd := t.executor.ExecCommand(command, true)
cmd.Env = env
@@ -4540,7 +4542,7 @@ func (t *Terminal) Loop() error {
if len(command) > 0 && t.canPreview() {
_, list := t.buildPlusList(command, false)
t.cancelPreview()
- t.previewBox.Set(reqPreviewEnqueue, previewRequest{command, t.evaluateScrollOffset(), list, t.environForPreview()})
+ t.previewBox.Set(reqPreviewEnqueue, previewRequest{command, t.evaluateScrollOffset(), list, t.environForPreview(), string(t.input)})
}
}
@@ -4972,7 +4974,7 @@ func (t *Terminal) Loop() error {
if valid {
t.cancelPreview()
t.previewBox.Set(reqPreviewEnqueue,
- previewRequest{t.previewOpts.command, t.evaluateScrollOffset(), list, t.environForPreview()})
+ previewRequest{t.previewOpts.command, t.evaluateScrollOffset(), list, t.environForPreview(), string(t.input)})
}
} else {
// Discard the preview content so that it won't accidentally appear
diff --git a/test/test_preview.rb b/test/test_preview.rb
index 11b3225d..576e36ec 100644
--- a/test/test_preview.rb
+++ b/test/test_preview.rb
@@ -544,4 +544,18 @@ class TestPreview < TestInteractive
tmux.send_keys :Up
tmux.until { |lines| assert_includes lines, '> 2' }
end
+
+ def test_preview_query_should_not_be_affected_by_search
+ tmux.send_keys "seq 1 | #{FZF} --bind 'change:transform-search(echo {q:1})' --preview 'echo [{q}/{}]'", :Enter
+ tmux.until { |lines| assert_equal 1, lines.match_count }
+ tmux.send_keys '1'
+ tmux.until { |lines| assert lines.any_include?('[1/1]') }
+ tmux.send_keys :Space
+ tmux.until { |lines| assert lines.any_include?('[1 /1]') }
+ tmux.send_keys '2'
+ tmux.until do |lines|
+ assert lines.any_include?('[1 2/1]')
+ assert_equal 1, lines.match_count
+ end
+ end
end