highlight bar
This commit is contained in:
parent
2cd6446d13
commit
7bb8aaec32
1 changed files with 36 additions and 4 deletions
40
src/lib.rs
40
src/lib.rs
|
|
@ -7,7 +7,7 @@ use ratatui::backend::CrosstermBackend;
|
|||
use ratatui::layout::{Constraint, Direction, Layout};
|
||||
use ratatui::prelude::{Color, Modifier, Style};
|
||||
use ratatui::Terminal;
|
||||
use ratatui::widgets::{Block, Borders, List, ListItem, Paragraph};
|
||||
use ratatui::widgets::{Block, Borders, List, ListItem, ListState, Paragraph};
|
||||
use crate::config::Config;
|
||||
|
||||
pub mod config;
|
||||
|
|
@ -89,6 +89,12 @@ pub fn main(config: &Config, terminal: &mut Terminal<CrosstermBackend<Stdout>>)
|
|||
let mut session = connect(config).ok();
|
||||
let mut inbox = refresh_inbox(&mut session, config);
|
||||
let mut last_fetch = Instant::now();
|
||||
let mut list_state = ListState::default();
|
||||
if let Ok(emails) = &inbox {
|
||||
if !emails.is_empty() {
|
||||
list_state.select(Some(0));
|
||||
}
|
||||
}
|
||||
|
||||
// --- Main loop ---
|
||||
loop {
|
||||
|
|
@ -120,9 +126,14 @@ pub fn main(config: &Config, terminal: &mut Terminal<CrosstermBackend<Stdout>>)
|
|||
.borders(Borders::ALL),
|
||||
)
|
||||
.style(Style::default().fg(Color::White))
|
||||
.highlight_style(Style::default().add_modifier(Modifier::BOLD));
|
||||
.highlight_style(
|
||||
Style::default()
|
||||
.bg(Color::DarkGray)
|
||||
.add_modifier(Modifier::BOLD),
|
||||
)
|
||||
.highlight_symbol(">> ");
|
||||
|
||||
frame.render_widget(list, layout[0]);
|
||||
frame.render_stateful_widget(list, layout[0], &mut list_state);
|
||||
}
|
||||
Ok(_) => {
|
||||
let p = Paragraph::new("No messages in inbox.")
|
||||
|
|
@ -138,7 +149,7 @@ pub fn main(config: &Config, terminal: &mut Terminal<CrosstermBackend<Stdout>>)
|
|||
}
|
||||
}
|
||||
|
||||
let status = Paragraph::new(" 'q' quit | 'r' refresh")
|
||||
let status = Paragraph::new(" 'q' quit | 'r' refresh | ↑/↓ navigate")
|
||||
.style(Style::default().fg(Color::DarkGray));
|
||||
frame.render_widget(status, layout[1]);
|
||||
})?;
|
||||
|
|
@ -151,6 +162,27 @@ pub fn main(config: &Config, terminal: &mut Terminal<CrosstermBackend<Stdout>>)
|
|||
KeyCode::Char('r') => {
|
||||
inbox = refresh_inbox(&mut session, config);
|
||||
last_fetch = Instant::now();
|
||||
if let Ok(emails) = &inbox {
|
||||
if !emails.is_empty() {
|
||||
list_state.select(Some(0));
|
||||
} else {
|
||||
list_state.select(None);
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyCode::Down | KeyCode::Char('j') => {
|
||||
if let Ok(emails) = &inbox {
|
||||
let i = list_state.selected().map_or(0, |i| {
|
||||
if i + 1 < emails.len() { i + 1 } else { i }
|
||||
});
|
||||
list_state.select(Some(i));
|
||||
}
|
||||
}
|
||||
KeyCode::Up | KeyCode::Char('k') => {
|
||||
if let Ok(_) = &inbox {
|
||||
let i = list_state.selected().map_or(0, |i| i.saturating_sub(1));
|
||||
list_state.select(Some(i));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue