mirror of
https://github.com/vim/vim.git
synced 2025-10-22 08:34:29 -04:00
patch 9.1.1666: no support for terminal primary device attributes
Problem: no support for terminal primary device attributes Solution: Add support for detecting the DA1 response from the terminal, add the v:termda1 variable and the 't_Ms' option for the OSC 52 command format (Foxe Chen) closes: #18033 Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
5d3c39af2a
commit
5734afebab
@@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 9.1. Last change: 2025 Aug 20
|
*eval.txt* For Vim version 9.1. Last change: 2025 Aug 23
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -2911,6 +2911,12 @@ v:termu7resp The escape sequence returned by the terminal for the |t_u7|
|
|||||||
this option is set, the TermResponseAll autocommand event is
|
this option is set, the TermResponseAll autocommand event is
|
||||||
fired, with <amatch> set to "ambiguouswidth".
|
fired, with <amatch> set to "ambiguouswidth".
|
||||||
|
|
||||||
|
*v:termda1*
|
||||||
|
v:termda1 The escape sequence returned by a primary device attributes
|
||||||
|
(DA1) query from the terminal. When this option is set, the
|
||||||
|
TermResponseAll autocommand event is fired, with <amatch> set
|
||||||
|
to "da1". Can be used to detect OSC 52 support in a terminal.
|
||||||
|
|
||||||
*v:testing* *testing-variable*
|
*v:testing* *testing-variable*
|
||||||
v:testing Must be set before using `test_garbagecollect_now()`.
|
v:testing Must be set before using `test_garbagecollect_now()`.
|
||||||
Also, when set certain error messages won't be shown for 2
|
Also, when set certain error messages won't be shown for 2
|
||||||
|
@@ -1102,6 +1102,7 @@ $quote eval.txt /*$quote*
|
|||||||
't_KJ' term.txt /*'t_KJ'*
|
't_KJ' term.txt /*'t_KJ'*
|
||||||
't_KK' term.txt /*'t_KK'*
|
't_KK' term.txt /*'t_KK'*
|
||||||
't_KL' term.txt /*'t_KL'*
|
't_KL' term.txt /*'t_KL'*
|
||||||
|
't_Ms' term.txt /*'t_Ms'*
|
||||||
't_PE' term.txt /*'t_PE'*
|
't_PE' term.txt /*'t_PE'*
|
||||||
't_PS' term.txt /*'t_PS'*
|
't_PS' term.txt /*'t_PS'*
|
||||||
't_RB' term.txt /*'t_RB'*
|
't_RB' term.txt /*'t_RB'*
|
||||||
@@ -10587,6 +10588,7 @@ t_KI term.txt /*t_KI*
|
|||||||
t_KJ term.txt /*t_KJ*
|
t_KJ term.txt /*t_KJ*
|
||||||
t_KK term.txt /*t_KK*
|
t_KK term.txt /*t_KK*
|
||||||
t_KL term.txt /*t_KL*
|
t_KL term.txt /*t_KL*
|
||||||
|
t_Ms term.txt /*t_Ms*
|
||||||
t_PE term.txt /*t_PE*
|
t_PE term.txt /*t_PE*
|
||||||
t_PS term.txt /*t_PS*
|
t_PS term.txt /*t_PS*
|
||||||
t_RB term.txt /*t_RB*
|
t_RB term.txt /*t_RB*
|
||||||
@@ -11257,6 +11259,7 @@ v:t_string eval.txt /*v:t_string*
|
|||||||
v:t_tuple eval.txt /*v:t_tuple*
|
v:t_tuple eval.txt /*v:t_tuple*
|
||||||
v:t_typealias eval.txt /*v:t_typealias*
|
v:t_typealias eval.txt /*v:t_typealias*
|
||||||
v:termblinkresp eval.txt /*v:termblinkresp*
|
v:termblinkresp eval.txt /*v:termblinkresp*
|
||||||
|
v:termda1 eval.txt /*v:termda1*
|
||||||
v:termrbgresp eval.txt /*v:termrbgresp*
|
v:termrbgresp eval.txt /*v:termrbgresp*
|
||||||
v:termresponse eval.txt /*v:termresponse*
|
v:termresponse eval.txt /*v:termresponse*
|
||||||
v:termrfgresp eval.txt /*v:termrfgresp*
|
v:termrfgresp eval.txt /*v:termrfgresp*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
*term.txt* For Vim version 9.1. Last change: 2025 Aug 06
|
*term.txt* For Vim version 9.1. Last change: 2025 Aug 23
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -644,6 +644,9 @@ Note: Use the <> form if possible
|
|||||||
<FocusGained> Vim window got focus (internal only)
|
<FocusGained> Vim window got focus (internal only)
|
||||||
<FocusLost> Vim window lost focus (internal only)
|
<FocusLost> Vim window lost focus (internal only)
|
||||||
|
|
||||||
|
t_Ms OSC 52 command format (empty *t_Ms* *'t_Ms'*
|
||||||
|
if terminal doesn't support it)
|
||||||
|
|
||||||
Note about t_so and t_mr: When the termcap entry "so" is not present the
|
Note about t_so and t_mr: When the termcap entry "so" is not present the
|
||||||
entry for "mr" is used. And vice versa. The same is done for "se" and "me".
|
entry for "mr" is used. And vice versa. The same is done for "se" and "me".
|
||||||
If your terminal supports both inversion and standout mode, you can see two
|
If your terminal supports both inversion and standout mode, you can see two
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
*version9.txt* For Vim version 9.1. Last change: 2025 Aug 22
|
*version9.txt* For Vim version 9.1. Last change: 2025 Aug 23
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -41851,12 +41851,17 @@ Options: ~
|
|||||||
'tabpanelopt' Optional settings for the |tabpanel|
|
'tabpanelopt' Optional settings for the |tabpanel|
|
||||||
't_xo' Terminal uses XON/XOFF handshaking (e.g. vt420)
|
't_xo' Terminal uses XON/XOFF handshaking (e.g. vt420)
|
||||||
't_CF' Support for alternate font highlighting terminal code
|
't_CF' Support for alternate font highlighting terminal code
|
||||||
|
't_Ms' OSC 52 command format
|
||||||
'winfixbuf' Keep buffer focused in a window
|
'winfixbuf' Keep buffer focused in a window
|
||||||
'wlseat' Specify Wayland seat to use for the |wayland| feature
|
'wlseat' Specify Wayland seat to use for the |wayland| feature
|
||||||
'wlsteal' Steal focus to access the |wayland| clipboard
|
'wlsteal' Steal focus to access the |wayland| clipboard
|
||||||
'wltimeout' Specify the connection timeout for the |wayland|
|
'wltimeout' Specify the connection timeout for the |wayland|
|
||||||
compositor
|
compositor
|
||||||
|
|
||||||
|
Vim Variables: ~
|
||||||
|
|v:termda1| The escape sequence returned for the primary device
|
||||||
|
attribute query (DA1).
|
||||||
|
|
||||||
Vim Arguments: ~
|
Vim Arguments: ~
|
||||||
|-Y| Do not connect to the |wayland| compositor.
|
|-Y| Do not connect to the |wayland| compositor.
|
||||||
|--clientserver| Specify backend for clientserver functionality.
|
|--clientserver| Specify backend for clientserver functionality.
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
" Language: Vim script
|
" Language: Vim script
|
||||||
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
|
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
|
||||||
" Doug Kearns <dougkearns@gmail.com>
|
" Doug Kearns <dougkearns@gmail.com>
|
||||||
" Last Change: 2025 Aug 18
|
" Last Change: 2025 Aug 23
|
||||||
" Former Maintainer: Charles E. Campbell
|
" Former Maintainer: Charles E. Campbell
|
||||||
|
|
||||||
" DO NOT CHANGE DIRECTLY.
|
" DO NOT CHANGE DIRECTLY.
|
||||||
@@ -165,7 +165,7 @@ syn keyword vimFuncName contained win_getid win_gettype win_gotoid win_id2tabwin
|
|||||||
" Predefined variable names {{{2
|
" Predefined variable names {{{2
|
||||||
" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR=''
|
" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR=''
|
||||||
syn keyword vimVimVarName contained count count1 prevcount errmsg warningmsg statusmsg shell_error this_session version lnum termresponse fname lang lc_time ctype charconvert_from charconvert_to fname_in fname_out fname_new fname_diff cmdarg foldstart foldend folddashes foldlevel progname servername dying exception throwpoint register cmdbang insertmode val key profiling fcs_reason fcs_choice beval_bufnr beval_winnr beval_winid beval_lnum beval_col beval_text scrollstart swapname swapchoice swapcommand char mouse_win mouse_winid mouse_lnum mouse_col operator searchforward hlsearch oldfiles windowid progpath completed_item option_new option_old option_oldlocal option_oldglobal option_command option_type errors false true none null numbermax numbermin numbersize
|
syn keyword vimVimVarName contained count count1 prevcount errmsg warningmsg statusmsg shell_error this_session version lnum termresponse fname lang lc_time ctype charconvert_from charconvert_to fname_in fname_out fname_new fname_diff cmdarg foldstart foldend folddashes foldlevel progname servername dying exception throwpoint register cmdbang insertmode val key profiling fcs_reason fcs_choice beval_bufnr beval_winnr beval_winid beval_lnum beval_col beval_text scrollstart swapname swapchoice swapcommand char mouse_win mouse_winid mouse_lnum mouse_col operator searchforward hlsearch oldfiles windowid progpath completed_item option_new option_old option_oldlocal option_oldglobal option_command option_type errors false true none null numbermax numbermin numbersize
|
||||||
syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod
|
syn keyword vimVimVarName contained vim_did_enter testing t_number t_string t_func t_list t_dict t_float t_bool t_none t_job t_channel t_blob t_class t_object termrfgresp termrbgresp termu7resp termstyleresp termblinkresp event versionlong echospace argv collate exiting colornames sizeofint sizeoflong sizeofpointer maxcol python3_version t_typealias t_enum t_enumvalue stacktrace t_tuple wayland_display clipmethod termda1
|
||||||
|
|
||||||
"--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim ---
|
"--- syntax here and above generated by runtime/syntax/generator/gen_syntax_vim.vim ---
|
||||||
|
|
||||||
|
@@ -165,6 +165,7 @@ static struct vimvar
|
|||||||
{VV_NAME("t_tuple", VAR_NUMBER), NULL, VV_RO},
|
{VV_NAME("t_tuple", VAR_NUMBER), NULL, VV_RO},
|
||||||
{VV_NAME("wayland_display", VAR_STRING), NULL, VV_RO},
|
{VV_NAME("wayland_display", VAR_STRING), NULL, VV_RO},
|
||||||
{VV_NAME("clipmethod", VAR_STRING), NULL, VV_RO},
|
{VV_NAME("clipmethod", VAR_STRING), NULL, VV_RO},
|
||||||
|
{VV_NAME("termda1", VAR_STRING), NULL, VV_RO},
|
||||||
};
|
};
|
||||||
|
|
||||||
// shorthand
|
// shorthand
|
||||||
|
20
src/term.c
20
src/term.c
@@ -1719,7 +1719,7 @@ static char *(key_names[]) =
|
|||||||
"k7", "k8", "k9", "k;", "F1", "F2",
|
"k7", "k8", "k9", "k;", "F1", "F2",
|
||||||
"%1", "&8", "kb", "kI", "kD", "kh",
|
"%1", "&8", "kb", "kI", "kD", "kh",
|
||||||
"@7", "kP", "kN", "K1", "K3", "K4", "K5", "kB",
|
"@7", "kP", "kN", "K1", "K3", "K4", "K5", "kB",
|
||||||
"PS", "PE",
|
"PS", "PE", "Ms",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -5495,6 +5495,8 @@ handle_csi_function_key(
|
|||||||
* {lead}[ABCDEFHPQRS]
|
* {lead}[ABCDEFHPQRS]
|
||||||
* {lead}1;{modifier}[ABCDEFHPQRS]
|
* {lead}1;{modifier}[ABCDEFHPQRS]
|
||||||
*
|
*
|
||||||
|
* - DA1 query response: {lead}?...;c
|
||||||
|
*
|
||||||
* Return 0 for no match, -1 for partial match, > 0 for full match.
|
* Return 0 for no match, -1 for partial match, > 0 for full match.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
@@ -5607,6 +5609,22 @@ handle_csi(
|
|||||||
*slen = csi_len;
|
*slen = csi_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Primary device attributes (DA1) response
|
||||||
|
else if (first == '?' && trail == 'c')
|
||||||
|
{
|
||||||
|
LOG_TRN("Received DA1 response: %s", tp);
|
||||||
|
|
||||||
|
*slen = csi_len;
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
set_vim_var_string(VV_TERMDA1, tp, *slen);
|
||||||
|
#endif
|
||||||
|
apply_autocmds(EVENT_TERMRESPONSEALL,
|
||||||
|
(char_u *)"da1", NULL, FALSE, curbuf);
|
||||||
|
|
||||||
|
key_name[0] = (int)KS_EXTRA;
|
||||||
|
key_name[1] = (int)KE_IGNORE;
|
||||||
|
}
|
||||||
|
|
||||||
// Version string: Eat it when there is at least one digit and
|
// Version string: Eat it when there is at least one digit and
|
||||||
// it ends in 'c'
|
// it ends in 'c'
|
||||||
else if (*T_CRV != NUL && ap > argp + 1 && trail == 'c')
|
else if (*T_CRV != NUL && ap > argp + 1 && trail == 'c')
|
||||||
|
@@ -2803,4 +2803,9 @@ func Test_xterm_direct_no_termguicolors()
|
|||||||
close
|
close
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_da1_handling()
|
||||||
|
call feedkeys("\<Esc>[?62,52;c", 'Lx!')
|
||||||
|
call assert_equal("\<Esc>[?62,52;c", v:termda1)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -724,6 +724,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1666,
|
||||||
/**/
|
/**/
|
||||||
1665,
|
1665,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2239,7 +2239,8 @@ typedef int sock_T;
|
|||||||
#define VV_TYPE_TUPLE 111
|
#define VV_TYPE_TUPLE 111
|
||||||
#define VV_WAYLAND_DISPLAY 112
|
#define VV_WAYLAND_DISPLAY 112
|
||||||
#define VV_CLIPMETHOD 113
|
#define VV_CLIPMETHOD 113
|
||||||
#define VV_LEN 114 // number of v: vars
|
#define VV_TERMDA1 114
|
||||||
|
#define VV_LEN 115 // number of v: vars
|
||||||
|
|
||||||
// used for v_number in VAR_BOOL and VAR_SPECIAL
|
// used for v_number in VAR_BOOL and VAR_SPECIAL
|
||||||
#define VVAL_FALSE 0L // VAR_BOOL
|
#define VVAL_FALSE 0L // VAR_BOOL
|
||||||
|
Reference in New Issue
Block a user