@@ -64,7 +64,7 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
6464 let mut end = begin;
6565
6666 for _ in 0..count {
67− if begin + 2 > slice.len_chars() {
67+ if begin + 1 == slice.len_chars() {
6868 return None;
6969 }
7070
@@ -76,8 +76,9 @@ pub fn move_next_word_start(slice: RopeSlice, mut begin: usize, count: usize) ->
7676 begin += 1;
7777 }
7878
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') {
80+ return None;
81+ };
8182 ch = slice.char(begin);
8283
8384 end = begin + 1;
@@ -134,7 +135,7 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
134135 let mut end = begin;
135136
136137 for _ in 0..count {
137− if begin + 2 > slice.len_chars() {
138+ if begin + 2 >= slice.len_chars() {
138139 return None;
139140 }
140141
@@ -145,8 +146,9 @@ pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> O
145146 begin += 1;
146147 }
147148
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') {
150+ return None;
151+ };
150152
151153 end = begin;
152154
@@ -199,18 +201,20 @@ fn categorize(ch: char) -> Category {
199201}
200202
201203#[inline]
202−pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F)
204+/// Returns true if there are more characters left after the new position.
205+pub fn skip_over_next<F>(slice: RopeSlice, pos: &mut usize, fun: F) -> bool
203206where
204207 F: Fn(char) -> bool,
205208{
206209 let mut chars = slice.chars_at(*pos);
207210
208− for ch in chars {
211+ while let Some(ch) = chars.next() {
209212 if !fun(ch) {
210213 break;
211214 }
212215 *pos += 1;
213216 }
217+ chars.next().is_some()
214218}
215219
216220#[inline]