Compare commits

...

2 Commits

Author SHA1 Message Date
Lukas Wölfer
40167f0f23 feat: deselect items 2026-01-23 23:15:49 +01:00
Lukas Wölfer
1ce513b688 feat: use current versions of ratatui and crossterm 2026-01-23 23:15:40 +01:00
3 changed files with 1296 additions and 92 deletions

1367
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,5 +4,5 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
crossterm = "0.26" crossterm = "0.29"
ratatui = { version = "0.20", features = ["crossterm"] } ratatui = { version = "0.30", features = ["crossterm"] }

View File

@@ -6,10 +6,10 @@ use crossterm::execute;
use crossterm::terminal::{ use crossterm::terminal::{
EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode,
}; };
use ratatui::Terminal;
use ratatui::backend::CrosstermBackend; use ratatui::backend::CrosstermBackend;
use ratatui::layout::{Constraint, Direction, Layout}; use ratatui::layout::{Constraint, Direction, Layout};
use ratatui::style::{Color, Modifier, Style}; use ratatui::style::{Color, Modifier, Style};
use ratatui::terminal::Terminal;
use ratatui::widgets::{Block, Borders, List, ListItem, ListState}; use ratatui::widgets::{Block, Borders, List, ListItem, ListState};
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
@@ -37,7 +37,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
loop { loop {
terminal.draw(|f| { terminal.draw(|f| {
let size = f.size(); let size = f.area();
let chunks = Layout::default() let chunks = Layout::default()
.direction(Direction::Vertical) .direction(Direction::Vertical)
.constraints([Constraint::Min(0)].as_ref()) .constraints([Constraint::Min(0)].as_ref())
@@ -92,12 +92,17 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
if let Some(i) = state.selected() if let Some(i) = state.selected()
&& i < marked.len() && i < marked.len()
{ {
assert!(i < marked.len());
if marked[i] {
marked[i] = false;
} else {
marked[i] = true; marked[i] = true;
// move cursor down // move cursor down
let next = if i + 1 < lines.len() { i + 1 } else { i }; let next = lines.len().min(i + 1);
state.select(Some(next)); state.select(Some(next));
} }
} }
}
_ => {} _ => {}
} }
} }