Skip to content

Commit

Permalink
Exit gracefully on termination signals
Browse files Browse the repository at this point in the history
On SIGINT or SIGTERM, restore the terminal and exit gracefully. This
mirrors the behavior of Vi and Kakoune on these signals and should be a
nicer behavior when `kill`ing a Helix process.
  • Loading branch information
the-mikedavis committed Jun 5, 2023
1 parent 2022e61 commit b6b2a2d
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions helix-term/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,14 @@ impl Application {
#[cfg(windows)]
let signals = futures_util::stream::empty();
#[cfg(not(windows))]
let signals = Signals::new([signal::SIGTSTP, signal::SIGCONT, signal::SIGUSR1])
.context("build signal handler")?;
let signals = Signals::new([
signal::SIGTSTP,
signal::SIGCONT,
signal::SIGUSR1,
signal::SIGTERM,
signal::SIGINT,
])
.context("build signal handler")?;

let app = Self {
compositor,
Expand Down Expand Up @@ -318,7 +324,9 @@ impl Application {
biased;

Some(signal) = self.signals.next() => {
self.handle_signals(signal).await;
if !self.handle_signals(signal).await {
return false;
};
}
Some(event) = input_stream.next() => {
self.handle_terminal_events(event).await;
Expand Down Expand Up @@ -442,10 +450,12 @@ impl Application {

#[cfg(windows)]
// no signal handling available on windows
pub async fn handle_signals(&mut self, _signal: ()) {}
pub async fn handle_signals(&mut self, _signal: ()) -> bool {
true
}

#[cfg(not(windows))]
pub async fn handle_signals(&mut self, signal: i32) {
pub async fn handle_signals(&mut self, signal: i32) -> bool {
match signal {
signal::SIGTSTP => {
self.restore_term().unwrap();
Expand Down Expand Up @@ -499,8 +509,14 @@ impl Application {
self.refresh_config();
self.render().await;
}
signal::SIGTERM | signal::SIGINT => {
self.restore_term().unwrap();
return false;
}
_ => unreachable!(),
}

true
}

pub async fn handle_idle_timeout(&mut self) {
Expand Down

0 comments on commit b6b2a2d

Please sign in to comment.