diff options
| author | Aram Drevekenin <aram@poor.dev> | 2022-04-28 17:26:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-28 17:26:44 +0200 |
| commit | 0dc136ec5f99f01fc12eaed1e18060d16f62b560 (patch) | |
| tree | 399c32e7829d02464c75bc5f535a6d668555e0e2 /zellij-client/src/input_handler.rs | |
| parent | fix(stability): avoid link handler panic on bad index (#1356) (diff) | |
| download | sl0ppij-0dc136ec5f99f01fc12eaed1e18060d16f62b560.tar.gz sl0ppij-0dc136ec5f99f01fc12eaed1e18060d16f62b560.tar.xz sl0ppij-0dc136ec5f99f01fc12eaed1e18060d16f62b560.zip | |
fix(compatibility): respond to bg and fg color ansi queries (#1358)
* fix(compatibility): respond to background/foreground queries
* style(fmt): rustfmt
* style(clippy): make clippy happy
* style(fmt): rustfmt
* style(fmt): remove unused code
Diffstat (limited to '')
| -rw-r--r-- | zellij-client/src/input_handler.rs | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/zellij-client/src/input_handler.rs b/zellij-client/src/input_handler.rs index b2ef1e58..6b89a3f9 100644 --- a/zellij-client/src/input_handler.rs +++ b/zellij-client/src/input_handler.rs @@ -10,7 +10,7 @@ use zellij_utils::{ use crate::{ os_input_output::ClientOsApi, - pixel_csi_parser::{PixelCsiParser, PixelDimensionsOrKeys}, + stdin_ansi_parser::{AnsiStdinInstructionOrKeys, StdinAnsiParser}, ClientInstruction, CommandIsExecuting, InputInstruction, }; use zellij_utils::{ @@ -71,15 +71,19 @@ impl InputHandler { if self.options.mouse_mode.unwrap_or(true) { self.os_input.enable_mouse(); } - // <ESC>[14t => get text area size in pixels, <ESC>[16t => get character cell size in pixels - let get_cell_pixel_info = "\u{1b}[14t\u{1b}[16t"; + // <ESC>[14t => get text area size in pixels, + // <ESC>[16t => get character cell size in pixels + // <ESC>]11;?<ESC>\ => get background color + // <ESC>]10;?<ESC>\ => get foreground color + let get_cell_pixel_info = + "\u{1b}[14t\u{1b}[16t\u{1b}]11;?\u{1b}\u{5c}\u{1b}]10;?\u{1b}\u{5c}"; let _ = self .os_input .get_stdout_writer() .write(get_cell_pixel_info.as_bytes()) .unwrap(); - let mut pixel_csi_parser = PixelCsiParser::new(); - pixel_csi_parser.increment_expected_csi_instructions(2); + let mut ansi_stdin_parser = StdinAnsiParser::new(); + ansi_stdin_parser.increment_expected_ansi_instructions(4); loop { if self.should_exit { break; @@ -89,9 +93,9 @@ impl InputHandler { match input_event { InputEvent::Key(key_event) => { let key = cast_termwiz_key(key_event, &raw_bytes); - if pixel_csi_parser.expected_instructions() > 0 { + if ansi_stdin_parser.expected_instructions() > 0 { self.handle_possible_pixel_instruction( - pixel_csi_parser.parse(key, raw_bytes), + ansi_stdin_parser.parse(key, raw_bytes), ); } else { self.handle_key(&key, raw_bytes); @@ -123,7 +127,7 @@ impl InputHandler { .get_stdout_writer() .write(get_cell_pixel_info.as_bytes()) .unwrap(); - pixel_csi_parser.increment_expected_csi_instructions(2); + ansi_stdin_parser.increment_expected_ansi_instructions(4); } Err(err) => panic!("Encountered read error: {:?}", err), } @@ -140,14 +144,26 @@ impl InputHandler { } fn handle_possible_pixel_instruction( &mut self, - pixel_instruction_or_keys: Option<PixelDimensionsOrKeys>, + pixel_instruction_or_keys: Option<AnsiStdinInstructionOrKeys>, ) { match pixel_instruction_or_keys { - Some(PixelDimensionsOrKeys::PixelDimensions(pixel_dimensions)) => { + Some(AnsiStdinInstructionOrKeys::PixelDimensions(pixel_dimensions)) => { self.os_input .send_to_server(ClientToServerMsg::TerminalPixelDimensions(pixel_dimensions)); } - Some(PixelDimensionsOrKeys::Keys(keys)) => { + Some(AnsiStdinInstructionOrKeys::BackgroundColor(background_color_instruction)) => { + self.os_input + .send_to_server(ClientToServerMsg::BackgroundColor( + background_color_instruction, + )); + } + Some(AnsiStdinInstructionOrKeys::ForegroundColor(foreground_color_instruction)) => { + self.os_input + .send_to_server(ClientToServerMsg::ForegroundColor( + foreground_color_instruction, + )); + } + Some(AnsiStdinInstructionOrKeys::Keys(keys)) => { for (key, raw_bytes) in keys { self.handle_key(&key, raw_bytes); } @@ -281,4 +297,4 @@ pub(crate) fn input_loop( #[cfg(test)] #[path = "./unit/input_handler_tests.rs"] -mod grid_tests; +mod input_handler_tests; |
