fix: make find_prev_char and till_prev_char work

Bevore this PR `commands::find_prev_char` and `commands::till_prev_char` were triggerable through keys 
but `seach::find_nth_next()` was hardcoded in `_find_char`. 
The passed `fn` was nerver used. With this PR the passed `fn` is used.
The change in search.rs resolves an off by one error in the behivor of `find_nth_prev`
pull/132/head
ahkrr 4 years ago committed by Blaž Hrastnik
parent f6a900fee1
commit 444cd0b068

@ -41,7 +41,8 @@ pub fn find_nth_prev(
inclusive: bool, inclusive: bool,
) -> Option<usize> { ) -> Option<usize> {
// start searching right before pos // start searching right before pos
let mut chars = text.chars_at(pos.saturating_sub(1)); pos = pos.saturating_sub(1);
let mut chars = text.chars_at(pos);
for _ in 0..n { for _ in 0..n {
loop { loop {
@ -56,7 +57,7 @@ pub fn find_nth_prev(
} }
if !inclusive { if !inclusive {
pos -= 1; pos += 1;
} }
Some(pos) Some(pos)

@ -315,7 +315,7 @@ fn _find_char<F>(cx: &mut Context, search_fn: F, inclusive: bool, extend: bool)
where where
// TODO: make an options struct for and abstract this Fn into a searcher type // TODO: make an options struct for and abstract this Fn into a searcher type
// use the definition for w/b/e too // use the definition for w/b/e too
F: Fn(RopeSlice, char, usize, usize, bool) -> Option<usize>, F: Fn(RopeSlice, char, usize, usize, bool) -> Option<usize> + 'static,
{ {
// TODO: count is reset to 1 before next key so we move it into the closure here. // TODO: count is reset to 1 before next key so we move it into the closure here.
// Would be nice to carry over. // Would be nice to carry over.
@ -332,7 +332,7 @@ where
let text = doc.text().slice(..); let text = doc.text().slice(..);
let selection = doc.selection(view.id).transform(|mut range| { let selection = doc.selection(view.id).transform(|mut range| {
search::find_nth_next(text, ch, range.head, count, inclusive).map_or(range, |pos| { search_fn(text, ch, range.head, count, inclusive).map_or(range, |pos| {
if extend { if extend {
Range::new(range.anchor, pos) Range::new(range.anchor, pos)
} else { } else {

Loading…
Cancel
Save