Find the correct column index in adjust_vertical

This commit is contained in:
Matt Brubeck 2016-04-01 12:36:25 -07:00
parent e17ed2e6b0
commit 29fb3f1150
2 changed files with 17 additions and 1 deletions

View file

@ -301,8 +301,11 @@ impl<T: ClipboardProvider> TextInput<T> {
return; return;
} }
let col = self.lines[self.edit_point.line][..self.edit_point.index].chars().count();
self.edit_point.line = target_line as usize; self.edit_point.line = target_line as usize;
self.edit_point.index = min(self.current_line_length(), self.edit_point.index); self.edit_point.index = len_of_first_n_chars(&self.lines[self.edit_point.line], col);
} }
/// Adjust the editing point position by a given number of bytes. If the adjustment /// Adjust the editing point position by a given number of bytes. If the adjustment

View file

@ -244,6 +244,19 @@ fn test_textinput_adjust_vertical() {
assert_eq!(textinput.edit_point.index, 1); assert_eq!(textinput.edit_point.index, 1);
} }
#[test]
fn test_textinput_adjust_vertical_multibyte() {
let mut textinput = text_input(Lines::Multiple, "áé\nae");
textinput.adjust_horizontal_by_one(Direction::Forward, Selection::NotSelected);
assert_eq!(textinput.edit_point.line, 0);
assert_eq!(textinput.edit_point.index, 2);
textinput.adjust_vertical(1, Selection::NotSelected);
assert_eq!(textinput.edit_point.line, 1);
assert_eq!(textinput.edit_point.index, 1);
}
#[test] #[test]
fn test_textinput_adjust_horizontal() { fn test_textinput_adjust_horizontal() {
let mut textinput = text_input(Lines::Multiple, "abc\nde\nf"); let mut textinput = text_input(Lines::Multiple, "abc\nde\nf");