From cbb0d118dae1fa86fe468f3c9009c80bc206f5b3 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 3 Apr 2024 16:16:09 +0800 Subject: [PATCH] Circular next match --- src/browser.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/browser.rs b/src/browser.rs index 9afb2b8..3ed9c80 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -84,7 +84,7 @@ impl Browser { } fn next_match(&mut self) { - let mut flag; + let mut flag = false; if self.cursor >= self.current_dir.len() { return @@ -92,10 +92,10 @@ impl Browser { for i in self.cursor + 1..self.current_dir.len() { let cd = &self.current_dir[i]; - flag = true; if self.search_txt.len() > cd.chars().collect::().len() { continue; } + flag = true; for (j, c) in self.search_txt.iter().enumerate() { if j < cd.len() { if *c != cd.chars().nth(j).expect("current_dir string out of bound") { @@ -115,6 +115,35 @@ impl Browser { break; } } + + /* start from 0 */ + if flag == false { + for i in 0..self.cursor { + let cd = &self.current_dir[i]; + flag = true; + if self.search_txt.len() > cd.chars().collect::().len() { + continue; + } + for (j, c) in self.search_txt.iter().enumerate() { + if j < cd.len() { + if *c != cd.chars().nth(j).expect("current_dir string out of bound") { + flag = false; + break; + } + } + } + if flag == true { + self.cursor = i; + let (h, _) = canvas::term_size(); + self.window_start = if self.cursor as isize - h as isize / 2 > 0 { + self.cursor - h / 2 + } else { + 0 + }; + break; + } + } + } } fn search(&mut self) {