From 209fe7e0faf02bb1cedfbd839f940249de129b4d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 3 Jan 2024 16:39:58 +0100 Subject: [PATCH] Focus active item when pressing tab in buffer search bar --- crates/search2/src/buffer_search.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/search2/src/buffer_search.rs b/crates/search2/src/buffer_search.rs index 96b40aa2bfc229af7f0e143a2d355ce377a55161..be01266eef3830fe183d97d5d4a5afe444e856c0 100644 --- a/crates/search2/src/buffer_search.rs +++ b/crates/search2/src/buffer_search.rs @@ -7,7 +7,7 @@ use crate::{ ToggleCaseSensitive, ToggleReplace, ToggleWholeWord, }; use collections::HashMap; -use editor::{Editor, EditorElement, EditorStyle}; +use editor::{Editor, EditorElement, EditorStyle, Tab}; use futures::channel::oneshot; use gpui::{ actions, div, impl_actions, Action, AppContext, ClickEvent, EventEmitter, FocusableView, @@ -190,6 +190,7 @@ impl Render for BufferSearchBar { .w_full() .gap_2() .key_context(key_context) + .capture_action(cx.listener(Self::tab)) .on_action(cx.listener(Self::previous_history_query)) .on_action(cx.listener(Self::next_history_query)) .on_action(cx.listener(Self::dismiss)) @@ -932,6 +933,14 @@ impl BufferSearchBar { } } + fn tab(&mut self, _: &Tab, cx: &mut ViewContext) { + if let Some(item) = self.active_searchable_item.as_ref() { + let focus_handle = item.focus_handle(cx); + cx.focus(&focus_handle); + cx.stop_propagation(); + } + } + fn next_history_query(&mut self, _: &NextHistoryQuery, cx: &mut ViewContext) { if let Some(new_query) = self.search_history.next().map(str::to_string) { let _ = self.search(&new_query, Some(self.search_options), cx);