Skip to content

Commit

Permalink
Add support for Ctrl/Cmd+C to exit
Browse files Browse the repository at this point in the history
  • Loading branch information
emilevr committed Feb 14, 2024
1 parent 52515fb commit 498d182
Show file tree
Hide file tree
Showing 10 changed files with 229 additions and 27 deletions.
124 changes: 106 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ anyhow = "^1.0.72"
clap = { version = "=4.4.6", optional = true }
criterion = { version = "^0.5.1", default-features = false, features = [], optional = true }
crossterm = { version = "^0.27.0", optional = true }
ctrlc = "3.4.2"
dirs = { version = "^5.0.1", optional = true }
log = { version = "^0.4.20", optional = true }
log4rs = { version = "^1.2.0", optional = true }
Expand Down
18 changes: 17 additions & 1 deletion src/cli/tui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ use ratatui::{
use std::{
cmp::{max, min},
io::Write,
sync::{
atomic::{AtomicBool, Ordering},
Arc,
},
};

#[cfg(test)]
Expand Down Expand Up @@ -70,14 +74,21 @@ pub(crate) fn render<W: Write, I: InputEventSource>(
writer: &mut W,
input_event_source: &mut I,
skin: &Skin,
should_exit: Arc<AtomicBool>,
) -> anyhow::Result<()> {
enable_raw_mode()?;

execute!(writer, enter_terminal_command(), EnableMouseCapture)?;
let backend = CrosstermBackend::new(writer);
let mut terminal = Terminal::new(backend)?;

let result = render_loop(&mut terminal, view_state, input_event_source, skin);
let result = render_loop(
&mut terminal,
view_state,
input_event_source,
skin,
should_exit,
);

disable_raw_mode()?;
execute!(
Expand Down Expand Up @@ -115,6 +126,7 @@ fn render_loop<B: Backend, I: InputEventSource>(
view_state: &mut ViewState,
input_event_source: &mut I,
skin: &Skin,
should_exit: Arc<AtomicBool>,
) -> anyhow::Result<()> {
loop {
terminal.draw(|f| create_frame(f, view_state, skin))?;
Expand All @@ -125,6 +137,10 @@ fn render_loop<B: Backend, I: InputEventSource>(
..
}) = input_event_source.read_event()?
{
if should_exit.load(Ordering::SeqCst) {
return Ok(());
}

if view_state.show_help {
view_state.show_help = false;
} else if view_state.show_delete_dialog {
Expand Down
Loading

0 comments on commit 498d182

Please sign in to comment.