diff options
| author | pablu <me@pablu.de> | 2026-06-23 10:22:45 +0200 |
|---|---|---|
| committer | pablu <me@pablu.de> | 2026-06-23 10:22:45 +0200 |
| commit | c008c3fb9612670c9ec0500167a0c83b5215892c (patch) | |
| tree | 7d39bf9fb20fffa8be7bfc9eb5424593fef083ec /src/screens/available_packages.rs | |
| parent | cf5f4ddbe3deed5d422fd1fd203bf0e71efb38f9 (diff) | |
Add search next / prev back againmaster
Diffstat (limited to 'src/screens/available_packages.rs')
| -rw-r--r-- | src/screens/available_packages.rs | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/screens/available_packages.rs b/src/screens/available_packages.rs index a96437b..b16eac1 100644 --- a/src/screens/available_packages.rs +++ b/src/screens/available_packages.rs @@ -7,8 +7,8 @@ use ratatui::{ Frame, crossterm::event::KeyCode, layout::{Alignment, Constraint, Layout, Rect}, - style::{Color, Style}, - text::{Line, Span, Text}, + style::Color, + text::{Line, Span}, widgets::{Block, Borders, List, ListState, Paragraph}, }; @@ -136,16 +136,16 @@ impl AvailablePackagesScreen { List::new(pkg_versions.iter().map(|v| version_to_variant(v))) .style(Color::White) .highlight_style(Theme::selected()) - .highlight_symbol("> "), // , // .block( - // Block::default() - // .borders(Borders::ALL) - // .border_style(Theme::block()) - // .title("Variants"), - // ), + .highlight_symbol("> "), ); self.selected_version = Some(pkg_versions[0].clone()); } + + fn select_package_index(&mut self, index: usize, repo: &Portage) { + self.pkg_list_state.select(Some(index)); + self.build_pkg_version_list(repo); + } } impl Default for AvailablePackagesScreen { @@ -258,6 +258,10 @@ impl Screen for AvailablePackagesScreen { let text = if self.search_popup.visible { "(esc) to quit search | (enter) to search".to_string() + } else if let Some((current, total)) = self.search_popup.match_status() { + format!( + "(q) to quit | (j) down | (k) up | (space) switch panel | (/) to search | Search {current}/{total} | (n) next | (N) previous" + ) } else { "(q) to quit | (j) down | (k) up | (space) switch panel | (/) to search".to_string() }; @@ -312,6 +316,18 @@ impl Screen for AvailablePackagesScreen { KeyCode::Char(' ') => self.cycle_list(), KeyCode::Char('/') => self.search_popup.toggle(), + KeyCode::Char('n') => { + if let Some(index) = self.search_popup.next_match() { + self.select_package_index(index, repo) + } + } + + KeyCode::Char('N') => { + if let Some(index) = self.search_popup.previous_match() { + self.select_package_index(index, repo) + } + } + _ => match self.chosen_list { CurrentList::PackageList => match key.code { KeyCode::Char('j') => { @@ -369,12 +385,6 @@ impl Screen for AvailablePackagesScreen { .style(Color::White) .highlight_style(Theme::selected()) .highlight_symbol("> "); - // .block( - // Block::default() - // .borders(Borders::ALL) - // .border_style(Theme::block()) - // .title("Available packages"), - // ); self.pkg_list = Some(list); self.loading_state = LoadingState::Complete; |
