diff options
Diffstat (limited to 'src/client/input.rs')
| -rw-r--r-- | src/client/input.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/client/input.rs b/src/client/input.rs index ba1e353f..7cf69533 100644 --- a/src/client/input.rs +++ b/src/client/input.rs @@ -23,6 +23,9 @@ use tokio::sync::mpsc; use super::ClientLoopEvent; +#[cfg(any(windows, test))] +mod windows_vti; + // --------------------------------------------------------------------------- // Stdin reader thread // --------------------------------------------------------------------------- @@ -114,6 +117,23 @@ fn windows_stdin_reader_loop( event_tx: mpsc::Sender<ClientLoopEvent>, should_quit: &Arc<AtomicBool>, ) { + if !super::windows_vti_input_backend_enabled() { + windows_crossterm_reader_loop(event_tx, should_quit); + } else { + match windows_vti::console_input_handle() { + Ok(handle) if windows_vti::virtual_terminal_input_enabled(handle) => { + windows_vti::raw_console_reader_loop(handle, event_tx, should_quit); + } + _ => windows_crossterm_reader_loop(event_tx, should_quit), + } + } +} + +#[cfg(windows)] +fn windows_crossterm_reader_loop( + event_tx: mpsc::Sender<ClientLoopEvent>, + should_quit: &Arc<AtomicBool>, +) { let mut framer = crate::raw_input::RawInputFramer::default(); let mut raw_sequence_pending = false; @@ -254,7 +274,7 @@ fn send_windows_raw_events( .is_ok() } -#[cfg(windows)] +#[cfg(any(windows, test))] fn windows_client_input_event_from_raw( event: crate::raw_input::RawInputEvent, ) -> Option<crate::protocol::ClientInputEvent> { |
