1use crossterm::{
2 event::{self, Event, KeyCode},
3 execute,
4 terminal::{
5 enable_raw_mode, disable_raw_mode,
6 EnterAlternateScreen, LeaveAlternateScreen
7 },
8};
9use ratatui::{Terminal, backend::CrosstermBackend, layout::Position};
10use ratatui_code_editor::editor::Editor;
11use ratatui_code_editor::theme::vesper;
12use std::io::stdout;
13
14fn main() -> anyhow::Result<()> {
15 enable_raw_mode()?;
16 execute!(stdout(), EnterAlternateScreen)?;
17
18 let backend = CrosstermBackend::new(stdout());
19 let mut terminal = Terminal::new(backend)?;
20
21 let content = "fn main() {\n println!(\"Hello, world!\");\n}";
22 let mut editor = Editor::new("rust", content, vesper())?;
23 let mut editor_area = ratatui::layout::Rect::default();
24
25 let marks = vec![
26 (3, 7, "#b1fce5"),
27 (16, 24, "#f6c99f"),
28 ];
29
30 editor.set_marks(marks);
31
32 loop {
33 terminal.draw(|f| {
34 let area = f.area();
35 editor_area = area;
36 f.render_widget(&editor, editor_area);
37
38 let cursor = editor.get_visible_cursor(&editor_area);
39 if let Some((x,y)) = cursor {
40 f.set_cursor_position(Position::new(x, y));
41 }
42 })?;
43
44 if let Event::Key(key) = event::read()? {
45 if key.code == KeyCode::Esc {
46 break;
47 }
48 editor.input(key, &editor_area)?;
49 }
50 }
51
52 disable_raw_mode()?;
53 execute!(stdout(), LeaveAlternateScreen)?;
54 Ok(())
55}