From c5a75bf5b150ed84b51eb3155b02a1774e314f10 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Sun, 12 Jan 2025 19:28:48 +0100 Subject: [PATCH 1/9] - Implemented xterm's ModifyOtherKeys. Now Ctrl+Enter and Ctrl+1 work in xterm - Fixed Ctrl+\ processing in tty mode --- .../Backend/TTY/TTYInputSequenceParser.cpp | 12 ++- .../src/Backend/TTY/TTYInputSequenceParser.h | 1 + .../TTY/TTYInputSequenceParserExts.cpp | 87 +++++++++++++++++-- WinPort/src/Backend/TTY/TTYOutput.cpp | 5 ++ 4 files changed, 97 insertions(+), 8 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParser.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParser.cpp index 525f59d1a5..d04b556a9c 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParser.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParser.cpp @@ -383,6 +383,13 @@ size_t TTYInputSequenceParser::ParseEscapeSequence(const char *s, size_t l) } } + // None of above? May be ModifyOtherKeys + if (l > 3 && s[0] == '[' && s[1] == '2' && s[2] == '7') { + r = TryParseModifyOtherKeys(s, l); + if (r != TTY_PARSED_BADSEQUENCE) { + return r; + } + } // be well-responsive on panic-escaping for (size_t i = 0; (i + 1) < l; ++i) { @@ -447,7 +454,7 @@ size_t TTYInputSequenceParser::ParseIntoPending(const char *s, size_t l) // return 1; case 0x1c: - AddPendingKeyEvent(TTYInputKey{VK_OEM_5, 0}); + AddPendingKeyEvent(TTYInputKey{VK_OEM_5, LEFT_CTRL_PRESSED}); return 1; case 0x1d: @@ -526,6 +533,9 @@ void TTYInputSequenceParser::AddPendingKeyEvent(const TTYInputKey &k) if (k.vk == VK_SPACE) { ir.Event.KeyEvent.uChar.UnicodeChar = L' '; } + if (k.vk == VK_OEM_5) { + ir.Event.KeyEvent.uChar.UnicodeChar = L'\\'; + } ir.Event.KeyEvent.wVirtualKeyCode = k.vk; ir.Event.KeyEvent.dwControlKeyState = k.control_keys | _extra_control_keys; ir.Event.KeyEvent.wVirtualScanCode = WINPORT(MapVirtualKey)(k.vk,MAPVK_VK_TO_VSC); diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParser.h b/WinPort/src/Backend/TTY/TTYInputSequenceParser.h index 10bca76aa8..2bc5d21828 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParser.h +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParser.h @@ -162,6 +162,7 @@ class TTYInputSequenceParser size_t ReadUTF8InHex(const char *s, wchar_t *uni_char); size_t TryParseAsITerm2EscapeSequence(const char *s, size_t l); size_t TryParseAsKittyEscapeSequence(const char *s, size_t l); + size_t TryParseModifyOtherKeys(const char *s, size_t l); size_t ParseEscapeSequence(const char *s, size_t l); void OnBracketedPaste(bool start); diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp index b0ccf68f7c..09022293e8 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp @@ -5,6 +5,12 @@ #include "TTYInputSequenceParser.h" #include "Backend.h" +#define KITTY_MOD_SHIFT 1 +#define KITTY_MOD_ALT 2 +#define KITTY_MOD_CONTROL 4 +#define KITTY_MOD_CAPSLOCK 64 +#define KITTY_MOD_NUMLOCK 128 +#define KITTY_EVT_KEYUP 3 size_t TTYInputSequenceParser::ParseX10Mouse(const char *s, size_t l)//(char action, char col, char raw) { @@ -122,13 +128,6 @@ size_t TTYInputSequenceParser::TryParseAsKittyEscapeSequence(const char *s, size // todo: add more keys. all needed by far2l seem to be here, but kitty supports much more - #define KITTY_MOD_SHIFT 1 - #define KITTY_MOD_ALT 2 - #define KITTY_MOD_CONTROL 4 - #define KITTY_MOD_CAPSLOCK 64 - #define KITTY_MOD_NUMLOCK 128 - #define KITTY_EVT_KEYUP 3 - /** 32 is enough without "text-as-code points" mode, but should be increased if this mode is enabled */ const int max_kitty_esc_size = 32; @@ -409,6 +408,80 @@ size_t TTYInputSequenceParser::TryParseAsKittyEscapeSequence(const char *s, size return i+1; } +size_t TTYInputSequenceParser::TryParseModifyOtherKeys(const char *s, size_t l) { + + int modif_state = 0, code = 0; + int state = 0; // 0 - начальное состояние, 1 - чтение modif_state, 2 - чтение code + + for (size_t i = 1; i < l; ++i) { // Начинаем с 1, чтобы пропустить '[' + if (s[i] == ';') { + state++; + continue; + } else if (s[i] == '~') { + break; // Конец последовательности + } + + if (state == 1) { + modif_state = modif_state * 10 + (s[i] - '0'); + } else if (state == 2) { + code = code * 10 + (s[i] - '0'); + } + } + + if (!code) return TTY_PARSED_BADSEQUENCE; + + INPUT_RECORD ir = {0}; + ir.EventType = KEY_EVENT; + ir.Event.KeyEvent.bKeyDown = 1; + ir.Event.KeyEvent.wRepeatCount = 0; + + if (modif_state) { + modif_state -= 1; + + // same as in kitty portocol implementation, but without right ctrl tracking + if (modif_state & KITTY_MOD_SHIFT) { ir.Event.KeyEvent.dwControlKeyState |= SHIFT_PRESSED; } + if (modif_state & KITTY_MOD_ALT) { ir.Event.KeyEvent.dwControlKeyState |= LEFT_ALT_PRESSED; } + if (modif_state & KITTY_MOD_CONTROL) { ir.Event.KeyEvent.dwControlKeyState |= LEFT_CTRL_PRESSED; } + if (modif_state & KITTY_MOD_CAPSLOCK) { ir.Event.KeyEvent.dwControlKeyState |= CAPSLOCK_ON; } + if (modif_state & KITTY_MOD_NUMLOCK) { ir.Event.KeyEvent.dwControlKeyState |= NUMLOCK_ON; } + } + + ir.Event.KeyEvent.wVirtualKeyCode = VK_UNASSIGNED; + + if (isdigit(code)) { + ir.Event.KeyEvent.wVirtualKeyCode = (code - '0') + 0x30; + } + + switch (code) { + case '-' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_MINUS; break; + case '_' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_MINUS; break; + + case ',' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_COMMA; break; + case '<' : ir.Event.KeyEvent.wVirtualKeyCode = + (modif_state & KITTY_MOD_SHIFT) ? VK_OEM_COMMA : VK_OEM_102; break; + + case '>' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_COMMA; break; // or Shift + VK_OEM_102 + case '.' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PERIOD; break; + + case '=' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PLUS; break; + case '+' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PLUS; break; + + case ';' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_1; break; + case ':' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_1; break; + + case 13 : ir.Event.KeyEvent.wVirtualKeyCode = VK_RETURN; break; + } + + ir.Event.KeyEvent.uChar.UnicodeChar = code; + + _ir_pending.emplace_back(ir); + + ir.Event.KeyEvent.bKeyDown = FALSE; + _ir_pending.emplace_back(ir); + + return l; +} + size_t TTYInputSequenceParser::TryParseAsWinTermEscapeSequence(const char *s, size_t l) { // check for nasty win32-input-mode sequence: as described in diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index 361e7052b2..5fe1d76bc4 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -187,6 +187,8 @@ TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect) Format(ESC "[=15;1u"); // kovidgoyal's kitty mode on } + Format(ESC "[?1036h"); // ModifyOtherKeys mode on + ChangeKeypad(true); ChangeMouse(true); @@ -224,6 +226,9 @@ TTYOutput::~TTYOutput() if ((_nodetect & NODETECT_A) == 0) { Format(ESC "[?1337l"); // iTerm2 input mode off } + + Format(ESC "[?1036l"); // ModifyOtherKeys mode off + TTYBasePalette def_palette; ChangePalette(def_palette); Flush(); From 27677b8f3e1ddcf8008378210ea8ea1d8134eca9 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Tue, 14 Jan 2025 22:17:55 +0100 Subject: [PATCH 2/9] - switched to ModifyOtherKeys mode 2, more keys now working out of the box --- .../TTY/TTYInputSequenceParserExts.cpp | 59 +++---------------- WinPort/src/Backend/TTY/TTYOutput.cpp | 11 +++- 2 files changed, 17 insertions(+), 53 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp index 09022293e8..6c8996bdc5 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp @@ -430,56 +430,15 @@ size_t TTYInputSequenceParser::TryParseModifyOtherKeys(const char *s, size_t l) if (!code) return TTY_PARSED_BADSEQUENCE; - INPUT_RECORD ir = {0}; - ir.EventType = KEY_EVENT; - ir.Event.KeyEvent.bKeyDown = 1; - ir.Event.KeyEvent.wRepeatCount = 0; - - if (modif_state) { - modif_state -= 1; - - // same as in kitty portocol implementation, but without right ctrl tracking - if (modif_state & KITTY_MOD_SHIFT) { ir.Event.KeyEvent.dwControlKeyState |= SHIFT_PRESSED; } - if (modif_state & KITTY_MOD_ALT) { ir.Event.KeyEvent.dwControlKeyState |= LEFT_ALT_PRESSED; } - if (modif_state & KITTY_MOD_CONTROL) { ir.Event.KeyEvent.dwControlKeyState |= LEFT_CTRL_PRESSED; } - if (modif_state & KITTY_MOD_CAPSLOCK) { ir.Event.KeyEvent.dwControlKeyState |= CAPSLOCK_ON; } - if (modif_state & KITTY_MOD_NUMLOCK) { ir.Event.KeyEvent.dwControlKeyState |= NUMLOCK_ON; } - } - - ir.Event.KeyEvent.wVirtualKeyCode = VK_UNASSIGNED; - - if (isdigit(code)) { - ir.Event.KeyEvent.wVirtualKeyCode = (code - '0') + 0x30; - } - - switch (code) { - case '-' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_MINUS; break; - case '_' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_MINUS; break; - - case ',' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_COMMA; break; - case '<' : ir.Event.KeyEvent.wVirtualKeyCode = - (modif_state & KITTY_MOD_SHIFT) ? VK_OEM_COMMA : VK_OEM_102; break; - - case '>' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_COMMA; break; // or Shift + VK_OEM_102 - case '.' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PERIOD; break; - - case '=' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PLUS; break; - case '+' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_PLUS; break; - - case ';' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_1; break; - case ':' : ir.Event.KeyEvent.wVirtualKeyCode = VK_OEM_1; break; - - case 13 : ir.Event.KeyEvent.wVirtualKeyCode = VK_RETURN; break; - } - - ir.Event.KeyEvent.uChar.UnicodeChar = code; - - _ir_pending.emplace_back(ir); - - ir.Event.KeyEvent.bKeyDown = FALSE; - _ir_pending.emplace_back(ir); - - return l; + // convert to kitty esc seq format + // and let kitty parser do the rest + + char buffer[32]; + snprintf(buffer, sizeof(buffer), "[%d;%du", code, modif_state); + size_t length = strlen(buffer); + size_t result = TryParseAsKittyEscapeSequence(buffer, length); + + if (result == length) { return l; } else { return TTY_PARSED_BADSEQUENCE; } } size_t TTYInputSequenceParser::TryParseAsWinTermEscapeSequence(const char *s, size_t l) diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index 5fe1d76bc4..b5a21220dc 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -187,7 +187,9 @@ TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect) Format(ESC "[=15;1u"); // kovidgoyal's kitty mode on } - Format(ESC "[?1036h"); // ModifyOtherKeys mode on + // ModifyOtherKeys on, set to mode 2 if possible + Format(ESC "[?1036h"); + Format(ESC "[>4;2m"); ChangeKeypad(true); ChangeMouse(true); @@ -219,6 +221,7 @@ TTYOutput::~TTYOutput() if ((_nodetect & NODETECT_K) == 0) { Format(ESC "[=0;1u" "\r"); // kovidgoyal's kitty mode off } + Format(ESC "[0m" ESC "[?1049l" ESC "[?47l" ESC "8" ESC "[?2004l" ESC "[?1004l" "\r\n"); if ((_nodetect & NODETECT_W) == 0) { Format(ESC "[?9001l"); // win32-input-mode off @@ -227,7 +230,9 @@ TTYOutput::~TTYOutput() Format(ESC "[?1337l"); // iTerm2 input mode off } - Format(ESC "[?1036l"); // ModifyOtherKeys mode off + // ModifyOtherKeys off + Format(ESC "[?1036l"); + Format(ESC "[>4;0m"); TTYBasePalette def_palette; ChangePalette(def_palette); @@ -538,7 +543,7 @@ void TTYOutput::WriteLine(const CHAR_INFO *ci, unsigned int cnt) void TTYOutput::ChangeKeypad(bool app) { - Format(ESC "[?1%c", app ? 'h' : 'l'); + //Format(ESC "[?1%c", app ? 'h' : 'l'); } void TTYOutput::ChangeMouse(bool enable) From da95d324632c45af40d326688f9908b1beff54bc Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Tue, 14 Jan 2025 22:27:33 +0100 Subject: [PATCH 3/9] - fixed quick search in Russian --- WinPort/src/Backend/TTY/TTYOutput.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index b5a21220dc..37b9e7788c 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -187,9 +187,13 @@ TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect) Format(ESC "[=15;1u"); // kovidgoyal's kitty mode on } - // ModifyOtherKeys on, set to mode 2 if possible + // ModifyOtherKeys on, set to mode 2 if possible (more keys supported) Format(ESC "[?1036h"); - Format(ESC "[>4;2m"); + // oops, this brakes Alt+letter quick search in non-latin kb layouts + // Format(ESC "[>4;2m"); + // todo: user should have an option to decide if he wants Ctrl+numbers etc (mode 2) + // todo: or Alt+non_latin_letters working + Format(ESC "[>4;1m"); ChangeKeypad(true); ChangeMouse(true); From a49f29eb8a84946dd33f6e24ed15e4aa41cb6f62 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:25:51 +0100 Subject: [PATCH 4/9] minor --- .../src/Backend/TTY/TTYInputSequenceParserExts.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp index 6c8996bdc5..393e136c27 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp @@ -5,13 +5,6 @@ #include "TTYInputSequenceParser.h" #include "Backend.h" -#define KITTY_MOD_SHIFT 1 -#define KITTY_MOD_ALT 2 -#define KITTY_MOD_CONTROL 4 -#define KITTY_MOD_CAPSLOCK 64 -#define KITTY_MOD_NUMLOCK 128 -#define KITTY_EVT_KEYUP 3 - size_t TTYInputSequenceParser::ParseX10Mouse(const char *s, size_t l)//(char action, char col, char raw) { /* @@ -128,6 +121,13 @@ size_t TTYInputSequenceParser::TryParseAsKittyEscapeSequence(const char *s, size // todo: add more keys. all needed by far2l seem to be here, but kitty supports much more + #define KITTY_MOD_SHIFT 1 + #define KITTY_MOD_ALT 2 + #define KITTY_MOD_CONTROL 4 + #define KITTY_MOD_CAPSLOCK 64 + #define KITTY_MOD_NUMLOCK 128 + #define KITTY_EVT_KEYUP 3 + /** 32 is enough without "text-as-code points" mode, but should be increased if this mode is enabled */ const int max_kitty_esc_size = 32; From 3ca992d69271fcd91e87ca4ca804dfeebcc89a68 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:26:28 +0100 Subject: [PATCH 5/9] minor --- WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp index 393e136c27..ba24cf5cd3 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp @@ -5,6 +5,7 @@ #include "TTYInputSequenceParser.h" #include "Backend.h" + size_t TTYInputSequenceParser::ParseX10Mouse(const char *s, size_t l)//(char action, char col, char raw) { /* From 82b8c3819ad681e4e3149e7d2595c43b17755451 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:28:10 +0100 Subject: [PATCH 6/9] unify comments --- WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp index ba24cf5cd3..1d54c6faf2 100644 --- a/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp +++ b/WinPort/src/Backend/TTY/TTYInputSequenceParserExts.cpp @@ -412,14 +412,14 @@ size_t TTYInputSequenceParser::TryParseAsKittyEscapeSequence(const char *s, size size_t TTYInputSequenceParser::TryParseModifyOtherKeys(const char *s, size_t l) { int modif_state = 0, code = 0; - int state = 0; // 0 - начальное состояние, 1 - чтение modif_state, 2 - чтение code + int state = 0; // 0 - initial state, 1 - reading modif_state, 2 - reading code - for (size_t i = 1; i < l; ++i) { // Начинаем с 1, чтобы пропустить '[' + for (size_t i = 1; i < l; ++i) { // Starting with 1 to skip '[' if (s[i] == ';') { state++; continue; } else if (s[i] == '~') { - break; // Конец последовательности + break; // End of sequence } if (state == 1) { @@ -431,7 +431,7 @@ size_t TTYInputSequenceParser::TryParseModifyOtherKeys(const char *s, size_t l) if (!code) return TTY_PARSED_BADSEQUENCE; - // convert to kitty esc seq format + // Convert to kitty escape sequence format // and let kitty parser do the rest char buffer[32]; From 5584cab38b5630ae8196328fde4730bbdcdc695c Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:29:42 +0100 Subject: [PATCH 7/9] we do not need this here --- WinPort/src/Backend/TTY/TTYOutput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index 37b9e7788c..a68cddd531 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -547,7 +547,7 @@ void TTYOutput::WriteLine(const CHAR_INFO *ci, unsigned int cnt) void TTYOutput::ChangeKeypad(bool app) { - //Format(ESC "[?1%c", app ? 'h' : 'l'); + Format(ESC "[?1%c", app ? 'h' : 'l'); } void TTYOutput::ChangeMouse(bool enable) From ee2e9111f728962b2544079b5bdff0b27cac0191 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:31:39 +0100 Subject: [PATCH 8/9] minor --- WinPort/src/Backend/TTY/TTYOutput.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index a68cddd531..8a887ef51a 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -189,10 +189,11 @@ TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect) // ModifyOtherKeys on, set to mode 2 if possible (more keys supported) Format(ESC "[?1036h"); - // oops, this brakes Alt+letter quick search in non-latin kb layouts + // oops, this breakes Alt+letter quick search in non-latin kb layouts // Format(ESC "[>4;2m"); - // todo: user should have an option to decide if he wants Ctrl+numbers etc (mode 2) - // todo: or Alt+non_latin_letters working + // todo: + // user should have an option to decide if he wants Ctrl+numbers etc (mode 2) + // or Alt+non_latin_letters working (mode 1) Format(ESC "[>4;1m"); ChangeKeypad(true); From 2415ee897e316269b0516e3257419d4d2703fa11 Mon Sep 17 00:00:00 2001 From: Ivan Sorokin Date: Wed, 15 Jan 2025 10:32:11 +0100 Subject: [PATCH 9/9] minor --- WinPort/src/Backend/TTY/TTYOutput.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index 8a887ef51a..7212e158ac 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -226,7 +226,6 @@ TTYOutput::~TTYOutput() if ((_nodetect & NODETECT_K) == 0) { Format(ESC "[=0;1u" "\r"); // kovidgoyal's kitty mode off } - Format(ESC "[0m" ESC "[?1049l" ESC "[?47l" ESC "8" ESC "[?2004l" ESC "[?1004l" "\r\n"); if ((_nodetect & NODETECT_W) == 0) { Format(ESC "[?9001l"); // win32-input-mode off