summaryrefslogtreecommitdiffstats
path: root/src/commands
diff options
context:
space:
mode:
authorsushi-shi <47691267+sushi-shi@users.noreply.github.com>2022-02-23 20:39:46 +0300
committerGitHub <noreply@github.com>2022-02-23 12:39:46 -0500
commitfe3308c75da696b37c970c12ef9cefe942fa8377 (patch)
treeb4baefda219918cd9603b7dc3e1d2ab222eb28c1 /src/commands
parent1a78bb897a191ce5e816bf690be52ec03222369f (diff)
Add incremental search (#140)
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/search_string.rs26
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(())
}