From 998c57442b951bcc1cc2159f60b6267569b03148 Mon Sep 17 00:00:00 2001
From: Junegunn Choi <junegunn.c@gmail.com>
Date: Wed, 26 Mar 2025 15:47:43 +0900
Subject: [PATCH] Fix query precedence in an action chain (#4326)

When 'search' and any action that modifies the query are in an action
chain, anything that comes later takes precedence.
---
 src/terminal.go   | 5 ++---
 test/test_core.rb | 9 +++++++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/terminal.go b/src/terminal.go
index 999bfdc0..ae56c1fe 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -6039,6 +6039,8 @@ func (t *Terminal) Loop() error {
 				t.input = currentInput
 				t.cx = len(t.input)
 				beof = false
+			} else if string(t.input) != string(currentInput) {
+				t.inputOverride = nil
 			}
 			return true
 		}
@@ -6064,9 +6066,6 @@ func (t *Terminal) Loop() error {
 				t.truncateQuery()
 			}
 			queryChanged = queryChanged || t.pasting == nil && string(previousInput) != string(t.input)
-			if queryChanged {
-				t.inputOverride = nil
-			}
 			changed = changed || queryChanged
 			if onChanges, prs := t.keymap[tui.Change.AsEvent()]; queryChanged && prs && !doActions(onChanges) {
 				continue
diff --git a/test/test_core.rb b/test/test_core.rb
index d37a4b47..2d3cc307 100644
--- a/test/test_core.rb
+++ b/test/test_core.rb
@@ -1881,4 +1881,13 @@ class TestCore < TestInteractive
       assert_includes lines, '> 555'
     end
   end
+
+  def test_search_override_query_in_no_input_mode
+    tmux.send_keys %(seq 1000 | #{FZF} --sync --no-input --bind 'enter:show-input+change-query(555)+hide-input+search(999),space:search(111)+show-input+change-query(777)'), :Enter
+    tmux.until { |lines| assert_includes lines, '> 1' }
+    tmux.send_keys :Enter
+    tmux.until { |lines| assert_includes lines, '> 999' }
+    tmux.send_keys :Space
+    tmux.until { |lines| assert_includes lines, '> 777' }
+  end
 end