diff --git a/src/log.rs b/src/log.rs index f226448..9292063 100644 --- a/src/log.rs +++ b/src/log.rs @@ -27,6 +27,7 @@ impl Log where W: io::Write, { + #[allow(dead_code)] pub fn from_writer(w: W) -> Self { Self { out: Arc::new(Mutex::new(w)), diff --git a/src/main.rs b/src/main.rs index 5772efe..3f1af89 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,10 @@ mod prompt; use line::Line; use prompt::Prompt; -use windows::Win32::{Foundation::HANDLE, System::Console}; +use windows::Win32::{ + Foundation::{CloseHandle, HANDLE}, + System::Console, +}; use anyhow::{Context, Result}; @@ -199,6 +202,8 @@ pub fn stdout_handle() -> Result { fn setup_stdin() -> Result<()> { let mut mode = Console::CONSOLE_MODE(0); unsafe { + Console::SetConsoleCP(65001); + let handle = stdin_handle()?; Error::check(Console::GetConsoleMode(handle, &mut mode))?; @@ -329,6 +334,13 @@ fn main() -> Result<()> { prompt.print()?; line.clear(); } + } else if key_code == 67 + && (modifiers & Console::LEFT_CTRL_PRESSED + == Console::LEFT_CTRL_PRESSED) + { + // this is CTRL+C + CloseHandle(stdout); + return Ok(()); } else if key_code == 74 && (modifiers & Console::LEFT_CTRL_PRESSED == Console::LEFT_CTRL_PRESSED)