diff --git a/src/lib.rs b/src/lib.rs index 505660cc06dc91e0ff6cafd77f4873219c8b93cd..6d4c04f276d6c8d3ebe0a140cf29b36b985a8a02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -331,9 +331,15 @@ fn enable_raw_mode() -> Result<Mode> { fn enable_raw_mode() -> Result<Mode> { let handle = try!(get_std_handle(STDIN_FILENO)); let original_mode = try!(get_console_mode(handle)); + // Disable these modes let raw = original_mode & !(winapi::wincon::ENABLE_LINE_INPUT | winapi::wincon::ENABLE_ECHO_INPUT | winapi::wincon::ENABLE_PROCESSED_INPUT); + // Enable these modes + let raw = raw | winapi::wincon::ENABLE_EXTENDED_FLAGS; + let raw = raw | winapi::wincon::ENABLE_INSERT_MODE; + let raw = raw | winapi::wincon::ENABLE_QUICK_EDIT_MODE; + let raw = raw | winapi::wincon::ENABLE_WINDOW_INPUT; check!(kernel32::SetConsoleMode(handle, raw)); Ok(original_mode) } @@ -990,12 +996,10 @@ impl<R: Read> RawReader<R> { continue; } - /*let ctrl = key_event.dwControlKeyState & - (winapi::LEFT_CTRL_PRESSED | winapi::RIGHT_CTRL_PRESSED) != - 0;*/ - let meta = (key_event.dwControlKeyState & - (winapi::LEFT_ALT_PRESSED | winapi::RIGHT_ALT_PRESSED) != - 0) || esc_seen; + let alt_gr = key_event.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_ALT_PRESSED) == (LEFT_CTRL_PRESSED | RIGHT_ALT_PRESSED); + let alt = key_event.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED) == (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED); + let ctrl = key_event.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) == (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED); + let meta = alt || esc_seen; let utf16 = key_event.UnicodeChar; if utf16 == 0 {