diff options
| author | Aram Drevekenin <aram@poor.dev> | 2023-05-16 12:47:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-16 12:47:18 +0200 |
| commit | 5fe4d60c220c872c1e77a7ddf24fec6686c28e95 (patch) | |
| tree | b6abec3006de7cd2eaecee149005d55ee4671a6b /default-plugins/strider/src/state.rs | |
| parent | docs(changelog): update config file output (diff) | |
| download | sl0ppij-5fe4d60c220c872c1e77a7ddf24fec6686c28e95.tar.gz sl0ppij-5fe4d60c220c872c1e77a7ddf24fec6686c28e95.tar.xz sl0ppij-5fe4d60c220c872c1e77a7ddf24fec6686c28e95.zip | |
feat(plugins): Plugin workers and strider (#2449)
* mvp of strider fuzzy find
* improve search ui
* various refactoringz
* moar refactoring
* even more refactoring
* tests and more refactoring
* refactor: remove unused stuff
* style(fmt): rustfmt
* debug ci
* debug ci
* correct path for plugin system tests
* fix plugin system ci tests
* remove debugging statements from test
* fix plugin worker persistence
* add test for plugin worker persistence
* style(fmt): rustfmt
* final cleanups
* remove outdated comments
Diffstat (limited to 'default-plugins/strider/src/state.rs')
| -rw-r--r-- | default-plugins/strider/src/state.rs | 88 |
1 files changed, 87 insertions, 1 deletions
diff --git a/default-plugins/strider/src/state.rs b/default-plugins/strider/src/state.rs index 05ede0df..7ced4932 100644 --- a/default-plugins/strider/src/state.rs +++ b/default-plugins/strider/src/state.rs @@ -1,3 +1,4 @@ +use crate::search::SearchResult; use pretty_bytes::converter as pb; use std::{ collections::{HashMap, VecDeque}, @@ -7,7 +8,9 @@ use std::{ }; use zellij_tile::prelude::*; -const ROOT: &str = "/host"; +pub const ROOT: &str = "/host"; +pub const CURRENT_SEARCH_TERM: &str = "/data/current_search_term"; + #[derive(Default)] pub struct State { pub path: PathBuf, @@ -15,9 +18,66 @@ pub struct State { pub cursor_hist: HashMap<PathBuf, (usize, usize)>, pub hide_hidden_files: bool, pub ev_history: VecDeque<(Event, Instant)>, // stores last event, can be expanded in future + pub search_paths: Vec<String>, + pub search_term: Option<String>, + pub search_results: Vec<SearchResult>, + pub loading: bool, + pub loading_animation_offset: u8, + pub typing_search_term: bool, + pub exploring_search_results: bool, + pub selected_search_result: usize, } impl State { + pub fn append_to_search_term(&mut self, key: Key) { + match key { + Key::Char(character) => { + if let Some(search_term) = self.search_term.as_mut() { + search_term.push(character); + } + }, + Key::Backspace => { + if let Some(search_term) = self.search_term.as_mut() { + search_term.pop(); + if search_term.len() == 0 { + self.search_term = None; + self.typing_search_term = false; + } + } + }, + _ => {}, + } + } + pub fn accept_search_term(&mut self) { + self.typing_search_term = false; + self.exploring_search_results = true; + } + pub fn typing_search_term(&self) -> bool { + self.typing_search_term + } + pub fn exploring_search_results(&self) -> bool { + self.exploring_search_results + } + pub fn stop_exploring_search_results(&mut self) { + self.exploring_search_results = false; + } + pub fn start_typing_search_term(&mut self) { + if self.search_term.is_none() { + self.search_term = Some(String::new()); + } + self.typing_search_term = true; + } + pub fn stop_typing_search_term(&mut self) { + self.typing_search_term = true; + } + pub fn move_search_selection_up(&mut self) { + self.selected_search_result = self.selected_search_result.saturating_sub(1); + } + pub fn move_search_selection_down(&mut self) { + if self.selected_search_result < self.search_results.len() { + self.selected_search_result = self.selected_search_result.saturating_add(1); + } + } pub fn selected_mut(&mut self) -> &mut usize { &mut self.cursor_hist.entry(self.path.clone()).or_default().0 } @@ -44,6 +104,32 @@ impl State { } } } + pub fn open_search_result(&mut self) { + match self.search_results.get(self.selected_search_result) { + Some(SearchResult::File { + path, + score, + indices, + }) => { + let file_path = PathBuf::from(path); + open_file(file_path.strip_prefix(ROOT).unwrap()); + }, + Some(SearchResult::LineInFile { + path, + score, + indices, + line, + line_number, + }) => { + let file_path = PathBuf::from(path); + open_file_with_line(file_path.strip_prefix(ROOT).unwrap(), *line_number); + // open_file_with_line(&file_path, *line_number); // TODO: no!! + }, + None => { + eprintln!("Search result not found"); + }, + } + } } #[derive(PartialEq, Eq, PartialOrd, Ord, Clone)] |
