fix: clear search highlighting on Normal escape
This commit is contained in:
+19
-3
@@ -1575,6 +1575,7 @@ struct ViewState {
|
||||
linewise: bool,
|
||||
search_query: String,
|
||||
search_whole_word: bool,
|
||||
search_highlight: bool,
|
||||
search_match: Option<SearchMatch>,
|
||||
command_line: String,
|
||||
caret_reveal_revision: u64,
|
||||
@@ -1594,6 +1595,7 @@ impl ViewState {
|
||||
linewise: false,
|
||||
search_query: String::new(),
|
||||
search_whole_word: false,
|
||||
search_highlight: false,
|
||||
search_match: None,
|
||||
command_line: String::new(),
|
||||
caret_reveal_revision: 0,
|
||||
@@ -1613,6 +1615,7 @@ impl ViewState {
|
||||
linewise: self.linewise,
|
||||
search_query: self.search_query.clone(),
|
||||
search_whole_word: self.search_whole_word,
|
||||
search_highlight: self.search_highlight,
|
||||
search_match: self.search_match,
|
||||
command_line: self.command_line.clone(),
|
||||
caret_reveal_revision: self.caret_reveal_revision,
|
||||
@@ -6491,7 +6494,11 @@ impl Editor {
|
||||
self.active.view.search_match
|
||||
}
|
||||
pub fn search_matches_on_row(&self, row: usize) -> impl Iterator<Item = SearchMatch> + '_ {
|
||||
let query = self.active.view.search_query.as_str();
|
||||
let query = if self.active.view.search_highlight {
|
||||
self.active.view.search_query.as_str()
|
||||
} else {
|
||||
""
|
||||
};
|
||||
let line = &self.active.lines[row];
|
||||
let columns = grapheme_count(query);
|
||||
search_match_bytes(line, query, self.active.view.search_whole_word).map(move |byte| {
|
||||
@@ -7934,6 +7941,8 @@ impl Editor {
|
||||
&& (!self.message.is_empty() || self.diagnostic_at_cursor().is_some())
|
||||
{
|
||||
self.notification_visible = false;
|
||||
self.active.view.search_highlight = false;
|
||||
self.active.view.search_match = None;
|
||||
return None;
|
||||
}
|
||||
if matches!(self.active.view.mode, Mode::Normal | Mode::Visual)
|
||||
@@ -8379,6 +8388,8 @@ impl Editor {
|
||||
}
|
||||
Action::Normal => {
|
||||
if self.active.view.mode == Mode::Normal {
|
||||
self.active.view.search_highlight = false;
|
||||
self.active.view.search_match = None;
|
||||
self.collapse_primary();
|
||||
} else if self.active.view.mode == Mode::Insert {
|
||||
self.finish_insert();
|
||||
@@ -8452,11 +8463,15 @@ impl Editor {
|
||||
.map_or(line.len(), |(position, _)| position);
|
||||
let query = &line[start..end];
|
||||
let whole_word = kind == WordKind::Keyword;
|
||||
let newly_active = self.active.view.search_query != query
|
||||
let newly_active = !self.active.view.search_highlight
|
||||
|| self.active.view.search_query != query
|
||||
|| self.active.view.search_whole_word != whole_word;
|
||||
if newly_active {
|
||||
self.active.view.search_query = query.into();
|
||||
if self.active.view.search_query != query {
|
||||
self.active.view.search_query = query.into();
|
||||
}
|
||||
self.active.view.search_whole_word = whole_word;
|
||||
self.active.view.search_highlight = true;
|
||||
}
|
||||
Some((
|
||||
Cursor {
|
||||
@@ -8491,6 +8506,7 @@ impl Editor {
|
||||
self.set_message("No previous search");
|
||||
return;
|
||||
}
|
||||
self.active.view.search_highlight = true;
|
||||
let query = self.active.view.search_query.as_str();
|
||||
let whole_word = self.active.view.search_whole_word;
|
||||
// ponytail: O(buffer graphemes × query bytes) scan; index matches if large buffers need it.
|
||||
|
||||
Reference in New Issue
Block a user