Enum ratatui_textarea::CursorMove
source · #[non_exhaustive]pub enum CursorMove {
}
Expand description
Specify how to move the cursor.
This type is marked as #[non_exhaustive]
since more variations may be supported in the future.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Forward
Move cursor forward by one character. When the cursor is at the end of line, it moves to the head of next line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["abc"]);
textarea.move_cursor(CursorMove::Forward);
assert_eq!(textarea.cursor(), (0, 1));
textarea.move_cursor(CursorMove::Forward);
assert_eq!(textarea.cursor(), (0, 2));
Back
Move cursor backward by one character. When the cursor is at the head of line, it moves to the end of previous line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["abc"]);
textarea.move_cursor(CursorMove::Forward);
textarea.move_cursor(CursorMove::Forward);
textarea.move_cursor(CursorMove::Back);
assert_eq!(textarea.cursor(), (0, 1));
Up
Move cursor up by one line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["a", "b", "c"]);
textarea.move_cursor(CursorMove::Down);
textarea.move_cursor(CursorMove::Down);
textarea.move_cursor(CursorMove::Up);
assert_eq!(textarea.cursor(), (1, 0));
Down
Move cursor down by one line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["a", "b", "c"]);
textarea.move_cursor(CursorMove::Down);
assert_eq!(textarea.cursor(), (1, 0));
textarea.move_cursor(CursorMove::Down);
assert_eq!(textarea.cursor(), (2, 0));
Head
Move cursor to the head of line. When the cursor is at the head of line, it moves to the end of previous line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["abc"]);
textarea.move_cursor(CursorMove::Forward);
textarea.move_cursor(CursorMove::Forward);
textarea.move_cursor(CursorMove::Head);
assert_eq!(textarea.cursor(), (0, 0));
End
Move cursor to the end of line. When the cursor is at the end of line, it moves to the head of next line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["abc"]);
textarea.move_cursor(CursorMove::End);
assert_eq!(textarea.cursor(), (0, 3));
Top
Move cursor to the top of lines.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["a", "b", "c"]);
textarea.move_cursor(CursorMove::Down);
textarea.move_cursor(CursorMove::Down);
textarea.move_cursor(CursorMove::Top);
assert_eq!(textarea.cursor(), (0, 0));
Bottom
Move cursor to the bottom of lines.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["a", "b", "c"]);
textarea.move_cursor(CursorMove::Bottom);
assert_eq!(textarea.cursor(), (2, 0));
WordForward
Move cursor forward by one word. Word boundary appears at spaces, punctuations, and others. For example
fn foo(a)
consists of words fn
, foo
, (
, a
, )
. When the cursor is at the end of line, it moves to the
head of next line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["aaa bbb ccc"]);
textarea.move_cursor(CursorMove::WordForward);
assert_eq!(textarea.cursor(), (0, 4));
textarea.move_cursor(CursorMove::WordForward);
assert_eq!(textarea.cursor(), (0, 8));
WordBack
Move cursor backward by one word. Word boundary appears at spaces, punctuations, and others. For example
fn foo(a)
consists of words fn
, foo
, (
, a
, )
.When the cursor is at the head of line, it moves to
the end of previous line.
use ratatui_textarea::{TextArea, CursorMove};
let mut textarea = TextArea::from(["aaa bbb ccc"]);
textarea.move_cursor(CursorMove::End);
textarea.move_cursor(CursorMove::WordBack);
assert_eq!(textarea.cursor(), (0, 8));
textarea.move_cursor(CursorMove::WordBack);
assert_eq!(textarea.cursor(), (0, 4));
textarea.move_cursor(CursorMove::WordBack);
assert_eq!(textarea.cursor(), (0, 0));
ParagraphForward
Move cursor down by one paragraph. Paragraph is a chunk of non-empty lines. Cursor moves to the first line of paragraph.
use ratatui_textarea::{TextArea, CursorMove};
// aaa
//
// bbb
//
// ccc
// ddd
let mut textarea = TextArea::from(["aaa", "", "bbb", "", "ccc", "ddd"]);
textarea.move_cursor(CursorMove::ParagraphForward);
assert_eq!(textarea.cursor(), (2, 0));
textarea.move_cursor(CursorMove::ParagraphForward);
assert_eq!(textarea.cursor(), (4, 0));
ParagraphBack
Move cursor up by one paragraph. Paragraph is a chunk of non-empty lines. Cursor moves to the first line of paragraph.
use ratatui_textarea::{TextArea, CursorMove};
// aaa
//
// bbb
//
// ccc
// ddd
let mut textarea = TextArea::from(["aaa", "", "bbb", "", "ccc", "ddd"]);
textarea.move_cursor(CursorMove::Bottom);
textarea.move_cursor(CursorMove::ParagraphBack);
assert_eq!(textarea.cursor(), (4, 0));
textarea.move_cursor(CursorMove::ParagraphBack);
assert_eq!(textarea.cursor(), (2, 0));
textarea.move_cursor(CursorMove::ParagraphBack);
assert_eq!(textarea.cursor(), (0, 0));
Jump(u16, u16)
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 ratatui_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));
InViewport
Move cursor to keep it within the viewport. For example, when a viewport displays line 8 to line 16:
- cursor at line 4 is moved to line 8
- cursor at line 20 is moved to line 16
- cursor at line 12 is not moved
This is useful when you moved a cursor but you don’t want to move the viewport.
use ratatui_textarea::{TextArea, CursorMove};
// Let's say terminal height is 8.
// Create textarea with 20 lines "0", "1", "2", "3", ...
// The viewport is displaying from line 1 to line 8.
let mut textarea: TextArea = (0..20).into_iter().map(|i| i.to_string()).collect();
// Move cursor to the end of lines (line 20). It is outside the viewport (line 1 to line 8)
textarea.move_cursor(CursorMove::Bottom);
assert_eq!(textarea.cursor(), (19, 0));
// Cursor is moved to line 8 to enter the viewport
textarea.move_cursor(CursorMove::InViewport);
assert_eq!(textarea.cursor(), (7, 0));
Trait Implementations§
source§impl<'arbitrary> Arbitrary<'arbitrary> for CursorMove
impl<'arbitrary> Arbitrary<'arbitrary> for CursorMove
source§fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
Self
from the given unstructured data. Read moresource§fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
Self
from the entirety of the given
unstructured data. Read moresource§impl Clone for CursorMove
impl Clone for CursorMove
source§fn clone(&self) -> CursorMove
fn clone(&self) -> CursorMove
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more