]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1895: OSC terminal response hard to detect v9.1.1895
authorFoxe Chen <chen.foxe@gmail.com>
Sat, 1 Nov 2025 16:26:18 +0000 (16:26 +0000)
committerChristian Brabandt <cb@256bit.org>
Sat, 1 Nov 2025 16:28:52 +0000 (16:28 +0000)
Problem:  OSC terminal response hard to detect
Solution: Add the <OSC> and <xOSC> pseudo keys
          (Foxe Chen)

closes: #18660

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/intro.txt
runtime/doc/tags
src/keymap.h
src/misc2.c
src/term.c
src/version.c

index 46aa9428f3bd17e7ddf7427ca66b5812f1cc0d35..828d2852d97a1597ffc0b83cd3ea63dd4bc29bb6 100644 (file)
@@ -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)        ~
 <Del>          delete                          127
 <CSI>          command sequence intro  ALT-Esc 155     *<CSI>*
 <xCSI>         CSI when typed in the GUI               *<xCSI>*
+<OSC>          operating system command        157     *<OSC>*
+<xOSC>         finished OSC response                   *<xOSC>*
 
 <EOL>          end-of-line (can be <CR>, <NL> or <CR><NL>,
                depends on system and 'fileformat')     *<EOL>*
index 8fd8cbae16b6f45dd9f0018ce74a9335bbd63ba4..09ba497efcd96e486eeadf120c084c793c5f6ec6 100644 (file)
@@ -3841,6 +3841,7 @@ $quote    eval.txt        /*$quote*
 <NL>   motion.txt      /*<NL>*
 <Nop>  map.txt /*<Nop>*
 <Nul>  intro.txt       /*<Nul>*
+<OSC>  intro.txt       /*<OSC>*
 <PageDown>     scroll.txt      /*<PageDown>*
 <PageUp>       scroll.txt      /*<PageUp>*
 <Plug> map.txt /*<Plug>*
@@ -3961,6 +3962,7 @@ $quote    eval.txt        /*$quote*
 <xHome>        term.txt        /*<xHome>*
 <xHome>-xterm  term.txt        /*<xHome>-xterm*
 <xLeft>        term.txt        /*<xLeft>*
+<xOSC> intro.txt       /*<xOSC>*
 <xRight>       term.txt        /*<xRight>*
 <xUp>  term.txt        /*<xUp>*
 =      change.txt      /*=*
index e993e0999a437300d71d11706a95db6eae3d5042..d30097950281a2d1e9d5ab91d3b6ae5f111c3e34 100644 (file)
@@ -280,6 +280,7 @@ enum key_extra
     , KE_SID = 106             // <SID> 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)
index 8380e745c9b0ce7ecd6afc2bb3b85b784750d330..fcbf0dd1cd257b8ceb27f899fd575de91c6e0ab0 100644 (file)
@@ -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},
index 4c365b19bdf4cb729c2ff44ecec42c2d63f1033d..39005b242a4942fefe40b70595f5f91379bb7aa2 100644 (file)
@@ -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)
     {
index b8a4d78a84bc47557ae9cc6627607175ab8dbcdc..e42edad47cb0e1f723faca1c901318d1d677edc7 100644 (file)
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1895,
 /**/
     1894,
 /**/