1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2025-06-25 14:22:54 +02:00

Reset the terminal when Ctrl-C is pressed

If a user hits Ctrl-C to exit out of a search in the middle of printing
a line, we don't want to leave the terminal colors screwed up for them.
Catch Ctrl-C using the ctrlc crate, obtain a stdout lock to ensure that
other threads don't continue writing after we do so, reset the terminal,
and exit the program.

Closes #119
This commit is contained in:
Brian Campbell
2016-10-18 23:37:49 -04:00
committed by Andrew Gallant
parent fbf8265cde
commit 79a8d0ab3f
3 changed files with 27 additions and 0 deletions

View File

@ -1,3 +1,4 @@
extern crate ctrlc;
extern crate deque;
extern crate docopt;
extern crate env_logger;
@ -22,6 +23,7 @@ extern crate winapi;
use std::error::Error;
use std::fs::File;
use std::io;
use std::io::Write;
use std::path::Path;
use std::process;
use std::result;
@ -82,6 +84,18 @@ fn main() {
fn run(args: Args) -> Result<u64> {
let args = Arc::new(args);
let handler_args = args.clone();
ctrlc::set_handler(move || {
let stdout = io::stdout();
let mut stdout = stdout.lock();
let _ = handler_args.stdout().reset();
let _ = stdout.flush();
process::exit(1);
});
let paths = args.paths();
let threads = cmp::max(1, args.threads() - 1);
let isone =