diff options
author | sushi-shi <47691267+sushi-shi@users.noreply.github.com> | 2022-02-23 20:39:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-23 12:39:46 -0500 |
commit | fe3308c75da696b37c970c12ef9cefe942fa8377 (patch) | |
tree | b4baefda219918cd9603b7dc3e1d2ab222eb28c1 /src/commands | |
parent | 1a78bb897a191ce5e816bf690be52ec03222369f (diff) |
Add incremental search (#140)
Diffstat (limited to 'src/commands')
-rw-r--r-- | src/commands/search_string.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/commands/search_string.rs b/src/commands/search_string.rs index 62d9a7f..70b0795 100644 --- a/src/commands/search_string.rs +++ b/src/commands/search_string.rs @@ -1,5 +1,4 @@ use crate::context::AppContext; -use crate::error::JoshutoResult; use crate::tab::JoshutoTab; use crate::util::search::SearchPattern; @@ -20,6 +19,20 @@ pub fn search_string_fwd(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> } None } + +pub fn search_string_start(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> { + let curr_list = curr_tab.curr_list_ref()?; + + let contents_len = curr_list.contents.len(); + for i in 0..contents_len { + let file_name_lower = curr_list.contents[i].file_name().to_lowercase(); + if file_name_lower.contains(pattern) { + return Some(i); + } + } + None +} + pub fn search_string_rev(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> { let curr_list = curr_tab.curr_list_ref()?; @@ -36,12 +49,17 @@ pub fn search_string_rev(curr_tab: &JoshutoTab, pattern: &str) -> Option<usize> None } -pub fn search_string(context: &mut AppContext, pattern: &str) -> JoshutoResult<()> { +pub fn search_string(context: &mut AppContext, pattern: &str, incremental: bool) { let pattern = pattern.to_lowercase(); - let index = search_string_fwd(context.tab_context_ref().curr_tab_ref(), pattern.as_str()); + let curr_tab = context.tab_context_ref().curr_tab_ref(); + + let index = if incremental { + search_string_start(curr_tab, pattern.as_str()) + } else { + search_string_fwd(curr_tab, pattern.as_str()) + }; if let Some(index) = index { let _ = cursor_move::cursor_move(context, index); } context.set_search_context(SearchPattern::String(pattern)); - Ok(()) } |