Start searches at the right side of the block cursor.

This commit is contained in:
Nathan Vegdahl 2021-07-26 08:50:26 -07:00
parent 0883b4fae0
commit 01247acf0c

View File

@ -1024,25 +1024,15 @@ fn split_selection_on_newline(cx: &mut Context) {
} }
fn search_impl(doc: &mut Document, view: &mut View, contents: &str, regex: &Regex, extend: bool) { fn search_impl(doc: &mut Document, view: &mut View, contents: &str, regex: &Regex, extend: bool) {
let text = doc.text(); let text = doc.text().slice(..);
let selection = doc.selection(view.id); let selection = doc.selection(view.id);
let start = { let start = {
// Get the right side of the block cursor.
let range = selection.primary(); let range = selection.primary();
if range.anchor < range.head {
// This is a little bit weird. Due to 1-width cursor semantics, we range.head
// would typically want the search to always begin at the visual left-side
// of the head. However, when there's already a selection from e.g. a
// previous search result, we don't want to include any of that selection
// in the subsequent search. The code below makes a compromise between the
// two behaviors that hopefully behaves the way most people expect most of
// the time.
if range.anchor <= range.head {
text.char_to_byte(range.head)
} else { } else {
text.char_to_byte(graphemes::next_grapheme_boundary( graphemes::next_grapheme_boundary(text, range.head)
text.slice(..),
range.head,
))
} }
}; };