From e55569744544907ccf4171a4f13063d394aea7dc Mon Sep 17 00:00:00 2001 From: The Bearodactyl Date: Mon, 22 Sep 2025 17:46:51 -0500 Subject: [PATCH 1/2] add toggle all keybind to multiselect --- src/multiselect.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/multiselect.rs b/src/multiselect.rs index ea1a10d..5a29a98 100644 --- a/src/multiselect.rs +++ b/src/multiselect.rs @@ -157,6 +157,15 @@ impl PromptInteraction> for MultiSelect { self.page.start = self.cursor - self.page.height + 1; } } + Key::Tab => { + let any_selected = self.items.iter().any(|item| item.borrow().selected); + + let target_state = !any_selected; + + for item in &self.items { + item.borrow_mut().selected = target_state; + } + } Key::Char(' ') => { let mut item = self.filter.items()[self.cursor].borrow_mut(); item.selected = !item.selected; @@ -236,7 +245,7 @@ impl PromptInteraction> for MultiSelect { theme.format_footer_with_message( &state.into(), &format!( - "{not_rendered_items} selected item{s} not displayed", + "{not_rendered_items} selected item{s} not displayed - Tab: toggle all", s = if not_rendered_items > 1 { "s" } else { "" } ), ) From a6abbaba392d7dcbb78f9b8f7ad10ce6c6f9f296 Mon Sep 17 00:00:00 2001 From: The Bearodactyl Date: Mon, 22 Sep 2025 19:06:35 -0500 Subject: [PATCH 2/2] add toggle all keybind to multiselect (part 2) --- src/filter.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/filter.rs b/src/filter.rs index 68dea80..24b3e69 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -66,6 +66,7 @@ impl FilteredView { Key::Enter if !self.items.is_empty() => None, // Otherwise, no items found. Key::Enter => Some(State::Error("No items".into())), + Key::Tab => Some(State::Active), // Ignore spaces passing through. Key::Char(' ') => { self.input.delete_left();