1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-03 14:26:17 +03:00

add CursorMove::Jump(row, col) to jump cursor to arbitrary position

Этот коммит содержится в:
rhysd
2022-06-20 20:18:36 +09:00
родитель 51a75a86bf
Коммит b001959b77

Просмотреть файл

@@ -167,6 +167,23 @@ pub enum CursorMove {
/// assert_eq!(textarea.cursor(), (0, 0));
/// ```
ParagraphBack,
/// Move cursor to (row, col) position. When the position points outside the text, the cursor position is made fit
/// within the text. Note that row and col are 0-based. (0, 0) means the first character of the first line.
///
/// When there are 10 lines, jumping to row 15 moves the cursor to the last line (row is 9 in the case). When there
/// are 10 characters in the line, jumping to col 15 moves the cursor to end of the line (col is 10 in the case).
/// ```
/// use tui_textarea::{TextArea, CursorMove};
///
/// let mut textarea = TextArea::from(["aaaa", "bbbb", "cccc"]);
///
/// textarea.move_cursor(CursorMove::Jump(1, 2));
/// assert_eq!(textarea.cursor(), (1, 2));
///
/// textarea.move_cursor(CursorMove::Jump(10, 10));
/// assert_eq!(textarea.cursor(), (2, 4));
/// ```
Jump(u16, u16),
}
impl CursorMove {
@@ -246,6 +263,11 @@ impl CursorMove {
}
Some((0, fit_col(col, &lines[0])))
}
Jump(row, col) => {
let row = cmp::min(*row as usize, lines.len() - 1);
let col = fit_col(*col as usize, &lines[row]);
Some((row, col))
}
}
}
}