Skip to main content

marks/
marks.rs

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}