From 0f3f48b65ea9e737381cb74610bc35217c424980 Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 10 Jul 2026 11:59:56 +0200 Subject: [PATCH 1/2] agent: Fix cmd-f not working when buffer is open --- assets/keymaps/default-linux.json | 10 ++----- assets/keymaps/default-macos.json | 9 ++---- assets/keymaps/default-windows.json | 9 ++---- crates/agent_ui/src/agent_panel.rs | 45 +++++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index 8799e032bfa6bc..92535d8ed1be59 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -298,13 +298,6 @@ "alt-r": "search::ToggleRegex", }, }, - { - "context": "AgentTerminalThread", - "use_key_equivalents": true, - "bindings": { - "ctrl-f": "agent::ToggleSearch", - }, - }, { "context": "AcpThreadSearchBar", "use_key_equivalents": true, @@ -326,6 +319,7 @@ "context": "AcpThread > Editor", "use_key_equivalents": true, "bindings": { + "ctrl-f": "agent::ToggleSearch", "ctrl-alt-pageup": "agent::ScrollOutputPageUp", "ctrl-alt-pagedown": "agent::ScrollOutputPageDown", "ctrl-alt-home": "agent::ScrollOutputToTop", @@ -1270,7 +1264,9 @@ }, { "context": "AgentPanel > Terminal", + "use_key_equivalents": true, "bindings": { + "ctrl-f": "agent::ToggleSearch", "ctrl-n": "agent::NewThread", }, }, diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index de0f8bd2b46b6c..0bf5b95fe58419 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -336,13 +336,6 @@ "alt-cmd-x": "search::ToggleRegex", }, }, - { - "context": "AgentTerminalThread", - "use_key_equivalents": true, - "bindings": { - "cmd-f": "agent::ToggleSearch", - }, - }, { "context": "AcpThreadSearchBar", "use_key_equivalents": true, @@ -364,6 +357,7 @@ "context": "AcpThread > Editor", "use_key_equivalents": true, "bindings": { + "cmd-f": "agent::ToggleSearch", "ctrl-pageup": "agent::ScrollOutputPageUp", "ctrl-pagedown": "agent::ScrollOutputPageDown", "ctrl-home": "agent::ScrollOutputToTop", @@ -1341,6 +1335,7 @@ "context": "AgentPanel > Terminal", "use_key_equivalents": true, "bindings": { + "cmd-f": "agent::ToggleSearch", "cmd-n": "agent::NewThread", }, }, diff --git a/assets/keymaps/default-windows.json b/assets/keymaps/default-windows.json index acc2a82e18ecb8..d373b94f6492aa 100644 --- a/assets/keymaps/default-windows.json +++ b/assets/keymaps/default-windows.json @@ -299,13 +299,6 @@ "alt-r": "search::ToggleRegex", }, }, - { - "context": "AgentTerminalThread", - "use_key_equivalents": true, - "bindings": { - "ctrl-f": "agent::ToggleSearch", - }, - }, { "context": "AcpThreadSearchBar", "use_key_equivalents": true, @@ -327,6 +320,7 @@ "context": "AcpThread > Editor", "use_key_equivalents": true, "bindings": { + "ctrl-f": "agent::ToggleSearch", "ctrl-alt-pageup": "agent::ScrollOutputPageUp", "ctrl-alt-pagedown": "agent::ScrollOutputPageDown", "ctrl-alt-home": "agent::ScrollOutputToTop", @@ -1285,6 +1279,7 @@ "context": "AgentPanel > Terminal", "use_key_equivalents": true, "bindings": { + "ctrl-f": "agent::ToggleSearch", "ctrl-n": "agent::NewThread", }, }, diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index 835bb0e572212a..7ddea34f926ac2 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -6484,7 +6484,6 @@ impl Render for AgentPanel { .and_then(|terminal_id| self.terminals.get(&terminal_id)) .and_then(|terminal| terminal.search_bar.clone()); let terminal_content = v_flex() - .key_context("AgentTerminalThread") .size_full() .when_some(search_bar, |this, search_bar| { this.when(!search_bar.read(cx).is_dismissed(), |this| { @@ -12488,7 +12487,7 @@ mod tests { }); } #[gpui::test] - async fn test_vim_search_does_not_steal_focus_from_agent_panel(cx: &mut TestAppContext) { + async fn test_search_does_not_target_center_pane_from_agent_panel(cx: &mut TestAppContext) { init_test(cx); cx.update(|cx| { agent::ThreadStore::init_global(cx); @@ -12496,6 +12495,13 @@ mod tests { vim::init(cx); search::init(cx); + let default_key_bindings = settings::KeymapFile::load_asset_allow_partial_failure( + "keymaps/default-macos.json", + cx, + ) + .expect("default macOS keymap should load"); + cx.bind_keys(default_key_bindings); + // Enable vim mode settings::SettingsStore::update_global(cx, |store, cx| { store.update_user_settings(cx, |s| s.vim_mode = Some(true)); @@ -12573,6 +12579,22 @@ mod tests { ); }); + cx.simulate_keystrokes("cmd-f"); + cx.run_until_parked(); + + let thread_view = panel + .read_with(&cx, |panel, cx| { + panel + .active_conversation_view()? + .read(cx) + .root_thread_view() + }) + .expect("active conversation should have a root thread view"); + assert!(thread_view.read_with(&cx, |view, _cx| view.thread_search_visible)); + + cx.simulate_keystrokes("escape"); + cx.run_until_parked(); + // Press '/' — the vim search keybinding. cx.simulate_keystrokes("/"); @@ -12583,6 +12605,25 @@ mod tests { "Focus should remain on the agent panel after pressing '/'" ); }); + + panel + .update_in(&mut cx, |panel, window, cx| { + panel.insert_test_terminal("Dev Server", true, window, cx) + }) + .expect("test terminal should be inserted"); + cx.run_until_parked(); + + cx.simulate_keystrokes("cmd-f"); + cx.run_until_parked(); + + panel.read_with(&cx, |panel, cx| { + let search_bar = panel + .active_terminal_id() + .and_then(|terminal_id| panel.terminals.get(&terminal_id)) + .and_then(|terminal| terminal.search_bar.as_ref()) + .expect("terminal search bar should be deployed"); + assert!(!search_bar.read(cx).is_dismissed()); + }); } /// Connection that tracks closed sessions and detects prompts against From d0203a5978bbbbd6efd3da16d219be474481f3e0 Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Fri, 10 Jul 2026 12:29:48 +0200 Subject: [PATCH 2/2] Update agent_panel.rs --- crates/agent_ui/src/agent_panel.rs | 44 +----------------------------- 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/crates/agent_ui/src/agent_panel.rs b/crates/agent_ui/src/agent_panel.rs index 7ddea34f926ac2..8edf4f2947a64c 100644 --- a/crates/agent_ui/src/agent_panel.rs +++ b/crates/agent_ui/src/agent_panel.rs @@ -12487,7 +12487,7 @@ mod tests { }); } #[gpui::test] - async fn test_search_does_not_target_center_pane_from_agent_panel(cx: &mut TestAppContext) { + async fn test_vim_search_does_not_steal_focus_from_agent_panel(cx: &mut TestAppContext) { init_test(cx); cx.update(|cx| { agent::ThreadStore::init_global(cx); @@ -12495,13 +12495,6 @@ mod tests { vim::init(cx); search::init(cx); - let default_key_bindings = settings::KeymapFile::load_asset_allow_partial_failure( - "keymaps/default-macos.json", - cx, - ) - .expect("default macOS keymap should load"); - cx.bind_keys(default_key_bindings); - // Enable vim mode settings::SettingsStore::update_global(cx, |store, cx| { store.update_user_settings(cx, |s| s.vim_mode = Some(true)); @@ -12579,22 +12572,6 @@ mod tests { ); }); - cx.simulate_keystrokes("cmd-f"); - cx.run_until_parked(); - - let thread_view = panel - .read_with(&cx, |panel, cx| { - panel - .active_conversation_view()? - .read(cx) - .root_thread_view() - }) - .expect("active conversation should have a root thread view"); - assert!(thread_view.read_with(&cx, |view, _cx| view.thread_search_visible)); - - cx.simulate_keystrokes("escape"); - cx.run_until_parked(); - // Press '/' — the vim search keybinding. cx.simulate_keystrokes("/"); @@ -12605,25 +12582,6 @@ mod tests { "Focus should remain on the agent panel after pressing '/'" ); }); - - panel - .update_in(&mut cx, |panel, window, cx| { - panel.insert_test_terminal("Dev Server", true, window, cx) - }) - .expect("test terminal should be inserted"); - cx.run_until_parked(); - - cx.simulate_keystrokes("cmd-f"); - cx.run_until_parked(); - - panel.read_with(&cx, |panel, cx| { - let search_bar = panel - .active_terminal_id() - .and_then(|terminal_id| panel.terminals.get(&terminal_id)) - .and_then(|terminal| terminal.search_bar.as_ref()) - .expect("terminal search bar should be deployed"); - assert!(!search_bar.read(cx).is_dismissed()); - }); } /// Connection that tracks closed sessions and detects prompts against