diff options
| author | JJ Liebig <jonathan.liebig@gmail.com> | 2026-09-28 17:16:27 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-28 17:16:27 +0200 |
| commit | d5680d84fd1df3b592424eae5c50d54642f0727d (patch) | |
| tree | f8849a87322470c3e79ff6a4b53d6cd0baa59a11 /src/client/input.rs | |
| parent | 267d47fb571c0a5e771f2e31bdf6459d625d7459 (diff) | |
fix: capture Windows host default colors at startup (#4710)
refs #1530
refs #4369
Diffstat (limited to 'src/client/input.rs')
| -rw-r--r-- | src/client/input.rs | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/client/input.rs b/src/client/input.rs index 1e308d54..ab46e788 100644 --- a/src/client/input.rs +++ b/src/client/input.rs @@ -51,14 +51,13 @@ pub fn stdin_reader_loop( #[cfg(windows)] { let _ = ( - host_color_query_sent, host_theme_query_pending, host_cell_size_query_sent, host_mouse_capture_active, host_sgr_pixels_active, ); let _ = (host_escape_disambiguation_active, initial_host_input); - windows_stdin_reader_loop(event_tx, should_quit); + windows_stdin_reader_loop(event_tx, should_quit, host_color_query_sent); } #[cfg(unix)] @@ -397,6 +396,7 @@ fn idle_flush_timeout_ms( fn windows_stdin_reader_loop( event_tx: mpsc::Sender<ClientLoopEvent>, should_quit: &Arc<AtomicBool>, + host_color_query_sent: bool, ) { if !super::windows_vti_input_backend_enabled() { windows_vti::trace_input_transport("reader=crossterm"); @@ -405,7 +405,12 @@ fn windows_stdin_reader_loop( match windows_vti::console_input_handle() { Ok(handle) => { windows_vti::trace_input_transport("reader=windows-console"); - windows_vti::raw_console_reader_loop(handle, event_tx, should_quit); + windows_vti::raw_console_reader_loop( + handle, + event_tx, + should_quit, + host_color_query_sent, + ); } _ => { windows_vti::trace_input_transport("reader=crossterm-fallback"); @@ -650,8 +655,20 @@ fn windows_client_input_event_from_raw( crate::raw_input::RawInputEvent::OuterFocusLost => { Some(crate::protocol::ClientInputEvent::FocusLost) } - crate::raw_input::RawInputEvent::HostDefaultColor { .. } - | crate::raw_input::RawInputEvent::HostPaletteColors { .. } + crate::raw_input::RawInputEvent::HostDefaultColor { kind, color } => { + Some(crate::protocol::ClientInputEvent::HostDefaultColor { + kind: match kind { + crate::terminal_theme::DefaultColorKind::Foreground => { + crate::protocol::ClientHostDefaultColorKind::Foreground + } + crate::terminal_theme::DefaultColorKind::Background => { + crate::protocol::ClientHostDefaultColorKind::Background + } + }, + color: color.into(), + }) + } + crate::raw_input::RawInputEvent::HostPaletteColors { .. } | crate::raw_input::RawInputEvent::HostColorSchemeChanged(_) | crate::raw_input::RawInputEvent::HostCellSizeReport { .. } | crate::raw_input::RawInputEvent::Unsupported => None, |
