@@ -64,7 +64,7 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
64 let mut end = begin;
64 let mut end = begin;
66 for _ in 0..count {
66 for _ in 0..count {
67− if begin + 2 > slice.len_chars() {
67+ if begin + 1 == slice.len_chars() {
68 return None;
68 return None;
@@ -76,8 +76,9 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
76 begin += 1;
76 begin += 1;
79− // return if not skip while?
80− skip_over_next(slice, &mut begin, |ch| ch == '\n');
79+ if !skip_over_next(slice, &mut begin, |ch| ch == '\n') {
81 ch = slice.char(begin);
82 ch = slice.char(begin);
83 end = begin + 1;
84 end = begin + 1;
@@ -134,7 +135,7 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
134 let mut end = begin;
135 let mut end = begin;
136 for _ in 0..count {
137 for _ in 0..count {
137− if begin + 2 > slice.len_chars() {
138+ if begin + 2 >= slice.len_chars() {
138 return None;
139 return None;
@@ -145,8 +146,9 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
145 begin += 1;
146 begin += 1;
148− // return if not skip while?
149− skip_over_next(slice, &mut begin, |ch| ch == '\n');
149+ if !skip_over_next(slice, &mut begin, |ch| ch == '\n') {
151 end = begin;
153 end = begin;
@@ -199,18 +201,20 @@ fn categorize(ch: char) -> Category {
204+/// Returns true if there are more characters left after the new position.
202−pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F)
205+pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F) -> bool
204 F: Fn(char) -> bool,
207 F: Fn(char) -> bool,
206 let mut chars = slice.chars_at(*pos);
209 let mut chars = slice.chars_at(*pos);
208− for ch in chars {
211+ while let Some(ch) = chars.next() {
209 if !fun(ch) {
212 if !fun(ch) {
212 *pos += 1;
215 *pos += 1;
217+ chars.next().is_some()