From 8707b7a15b8a22ee4f60e1f9e7d3d417b20e60d2 Mon Sep 17 00:00:00 2001 From: Foxe Chen Date: Sat, 1 Nov 2025 16:26:18 +0000 Subject: [PATCH] patch 9.1.1895: OSC terminal response hard to detect Problem: OSC terminal response hard to detect Solution: Add the and pseudo keys (Foxe Chen) closes: #18660 Signed-off-by: Foxe Chen Signed-off-by: Christian Brabandt --- runtime/doc/intro.txt | 4 +++- runtime/doc/tags | 2 ++ src/keymap.h | 2 ++ src/misc2.c | 2 ++ src/term.c | 5 ++++- src/version.c | 2 ++ 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt index 46aa9428f3..828d2852d9 100644 --- a/runtime/doc/intro.txt +++ b/runtime/doc/intro.txt @@ -1,4 +1,4 @@ -*intro.txt* For Vim version 9.1. Last change: 2025 Oct 12 +*intro.txt* For Vim version 9.1. Last change: 2025 Nov 01 VIM REFERENCE MANUAL by Bram Moolenaar @@ -450,6 +450,8 @@ notation meaning equivalent decimal value(s) ~ delete 127 command sequence intro ALT-Esc 155 ** CSI when typed in the GUI ** + operating system command 157 ** + finished OSC response ** end-of-line (can be , or , depends on system and 'fileformat') ** diff --git a/runtime/doc/tags b/runtime/doc/tags index 8fd8cbae16..09ba497efc 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -3841,6 +3841,7 @@ $quote eval.txt /*$quote* motion.txt /** map.txt /** intro.txt /** + intro.txt /** scroll.txt /** scroll.txt /** map.txt /** @@ -3961,6 +3962,7 @@ $quote eval.txt /*$quote* term.txt /** -xterm term.txt /*-xterm* term.txt /** + intro.txt /** term.txt /** term.txt /** = change.txt /*=* diff --git a/src/keymap.h b/src/keymap.h index e993e0999a..d300979502 100644 --- a/src/keymap.h +++ b/src/keymap.h @@ -280,6 +280,7 @@ enum key_extra , KE_SID = 106 // special key, followed by {nr}; , KE_ESC = 107 // used for K_ESC , KE_WILD = 108 // triggers wildmode completion + , KE_OSC = 109 // OSC sequence }; /* @@ -478,6 +479,7 @@ enum key_extra #define K_MOUSERIGHT TERMCAP2KEY(KS_EXTRA, KE_MOUSERIGHT) #define K_CSI TERMCAP2KEY(KS_EXTRA, KE_CSI) +#define K_OSC TERMCAP2KEY(KS_EXTRA, KE_OSC) #define K_SNR TERMCAP2KEY(KS_EXTRA, KE_SNR) #define K_PLUG TERMCAP2KEY(KS_EXTRA, KE_PLUG) #define K_CMDWIN TERMCAP2KEY(KS_EXTRA, KE_CMDWIN) diff --git a/src/misc2.c b/src/misc2.c index 8380e745c9..fcbf0dd1cd 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -1053,6 +1053,7 @@ static struct key_name_entry {TRUE, NL, STRING_INIT("NewLine"), TRUE}, {TRUE, NL, STRING_INIT("NL"), FALSE}, {TRUE, K_ZERO, STRING_INIT("Nul"), FALSE}, + {TRUE, OSC, STRING_INIT("OSC"), FALSE}, {TRUE, K_PAGEDOWN, STRING_INIT("PageDown"), FALSE}, {TRUE, K_PAGEUP, STRING_INIT("PageUp"), FALSE}, {TRUE, K_PE, STRING_INIT("PasteEnd"), FALSE}, @@ -1111,6 +1112,7 @@ static struct key_name_entry {TRUE, K_XF4, STRING_INIT("xF4"), FALSE}, {TRUE, K_XHOME, STRING_INIT("xHome"), FALSE}, {TRUE, K_XLEFT, STRING_INIT("xLeft"), FALSE}, + {TRUE, K_OSC, STRING_INIT("xOSC"), FALSE}, {TRUE, K_XRIGHT, STRING_INIT("xRight"), FALSE}, {TRUE, K_XUP, STRING_INIT("xUp"), FALSE}, {TRUE, K_ZEND, STRING_INIT("zEnd"), FALSE}, diff --git a/src/term.c b/src/term.c index 4c365b19bd..39005b242a 100644 --- a/src/term.c +++ b/src/term.c @@ -5933,7 +5933,6 @@ handle_osc(char_u *tp, int len, char_u *key_name, int *slen) last_char = ((char_u *)osc_state.buf.ga_data)[osc_state.buf.ga_len - 1]; key_name[0] = (int)KS_EXTRA; - key_name[1] = (int)KE_IGNORE; // Read data and append to buffer. If we reach a terminator, then // finally set the vim var. @@ -5945,6 +5944,8 @@ handle_osc(char_u *tp, int len, char_u *key_name, int *slen) { osc_state.processing = FALSE; + key_name[1] = (int)KE_OSC; + ga_concat_len(&osc_state.buf, tp, i + 1 + (tp[i] == ESC)); ga_append(&osc_state.buf, NUL); *slen = i + 1 + (tp[i] == ESC); @@ -5962,6 +5963,8 @@ handle_osc(char_u *tp, int len, char_u *key_name, int *slen) return OK; } + key_name[1] = (int)KE_IGNORE; + #ifdef ELAPSED_FUNC if (ELAPSED_FUNC(osc_state.start_tv) >= p_ost) { diff --git a/src/version.c b/src/version.c index b8a4d78a84..e42edad47c 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1895, /**/ 1894, /**/ -- 2.47.3