From 0e1223eb91d8ca6ed0dd118d2c6b002dcd1d8687 Mon Sep 17 00:00:00 2001 From: gwenn <gtreguier@gmail.com> Date: Mon, 27 Feb 2017 18:50:03 +0100 Subject: [PATCH] Fix repeated char search --- src/line_buffer.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/line_buffer.rs b/src/line_buffer.rs index bfd78b65..5016e9c1 100644 --- a/src/line_buffer.rs +++ b/src/line_buffer.rs @@ -419,7 +419,8 @@ impl LineBuffer { .char_indices() .rev() .filter(|&(_, ch)| ch == c) - .nth(n - 1) + .take(n) + .last() .map(|(i, _)| i) } CharSearch::Forward(c) | @@ -430,7 +431,8 @@ impl LineBuffer { self.buf[shift..] .char_indices() .filter(|&(_, ch)| ch == c) - .nth(n - 1) + .take(n) + .last() .map(|(i, _)| i) } else { None @@ -500,8 +502,12 @@ impl LineBuffer { if self.pos == self.buf.len() { return None; } - self.buf[self.pos..].grapheme_indices(true).filter(|&(_, ch)| ch.is_alphanumeric()) - .map(|(i, _)| i).next().map(|i| i + self.pos) + self.buf[self.pos..] + .grapheme_indices(true) + .filter(|&(_, ch)| ch.is_alphanumeric()) + .map(|(i, _)| i) + .next() + .map(|i| i + self.pos) } /// Alter the next word. pub fn edit_word(&mut self, a: WordAction) -> bool { @@ -916,6 +922,11 @@ mod test { let ok = s.move_to(CharSearch::Forward('ε'), 1); assert_eq!(true, ok); assert_eq!(8, s.pos); + + let mut s = LineBuffer::init("αßγδε", 2); + let ok = s.move_to(CharSearch::Forward('ε'), 10); + assert_eq!(true, ok); + assert_eq!(8, s.pos); } #[test] -- GitLab