From a88f46c6c9ad19867304fc812f81b99ee8e0094f Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Wed, 28 Aug 2024 07:54:01 -0500 Subject: [PATCH] update virtual terminal processing (#13710) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description With Windows Terminal Canary 1.23.240826001-llm, this enables nushell to query the terminal and receive a response. ![image](https://github.com/user-attachments/assets/c4c43328-c431-47e4-b377-8b3a2bc12b74) The red component here is ```nushell ❯ ("0c0c" | into int -r 16) / 256 | math round | fmt | get lowerhex 0xc ``` This example queries the background and the response is a r/g/b color. The response really should be ``` ␛]11;1;rgb:0c0c/0c0c/0c0c ``` I'm not sure why nushell's input is eating the first part. # User-Facing Changes # Tests + Formatting # After Submitting --- crates/nu-utils/src/utils.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/nu-utils/src/utils.rs b/crates/nu-utils/src/utils.rs index 8baf674075..ee575b5640 100644 --- a/crates/nu-utils/src/utils.rs +++ b/crates/nu-utils/src/utils.rs @@ -7,6 +7,7 @@ pub fn enable_vt_processing() -> Result<()> { use crossterm_winapi::{ConsoleMode, Handle}; pub const ENABLE_PROCESSED_OUTPUT: u32 = 0x0001; + pub const ENABLE_VIRTUAL_TERMINAL_INPUT: u32 = 0x0200; pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING: u32 = 0x0004; let mask = ENABLE_VIRTUAL_TERMINAL_PROCESSING; @@ -17,8 +18,12 @@ pub fn enable_vt_processing() -> Result<()> { // enable_processed_output and enable_virtual_terminal_processing should be used if old_mode & mask == 0 { - console_mode - .set_mode(old_mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING)? + console_mode.set_mode( + old_mode + | ENABLE_PROCESSED_OUTPUT + | ENABLE_VIRTUAL_TERMINAL_PROCESSING + | ENABLE_VIRTUAL_TERMINAL_INPUT, + )? } } Ok(())