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 loop {
26 terminal.draw(|f| {
27 let area = f.area();
28 editor_area = area;
29 f.render_widget(&editor, editor_area);
30
31 let cursor = editor.get_visible_cursor(&area);
32 if let Some((x,y)) = cursor {
33 f.set_cursor_position(Position::new(x, y));
34 }
35 })?;
36
37 if let Event::Key(key) = event::read()? {
38 if key.code == KeyCode::Esc {
39 break;
40 }
41 editor.input(key, &editor_area)?;
42 }
43 }
44
45 disable_raw_mode()?;
46 execute!(stdout(), LeaveAlternateScreen)?;
47 Ok(())
48}