patch 9.1.1757: The colorresp plugin causes additional redraws
Problem: The colorresp plugin causes additional redraws
(Linwei, after v9.1.1703)
Solution: Move the code back into the C core and get rid of the vim
plugin (Foxe Chen)
fixes: #18251
closes: #18279
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
c975d62473
commit
c077f5e9d8
@ -1,4 +1,4 @@
|
|||||||
*autocmd.txt* For Vim version 9.1. Last change: 2025 Sep 11
|
*autocmd.txt* For Vim version 9.1. Last change: 2025 Sep 14
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -1313,8 +1313,10 @@ TermResponseAll After the response to |t_RV|, |t_RC|, |t_RS|,
|
|||||||
correspondingly, can be used. <amatch> will
|
correspondingly, can be used. <amatch> will
|
||||||
be set to any of:
|
be set to any of:
|
||||||
"ambiguouswidth" (|t_u7|),
|
"ambiguouswidth" (|t_u7|),
|
||||||
|
"background" (|t_RB|),
|
||||||
"cursorblink" (|t_RC|),
|
"cursorblink" (|t_RC|),
|
||||||
"cursorshape" (|t_RS|),
|
"cursorshape" (|t_RS|),
|
||||||
|
"foreground" (|t_RF|),
|
||||||
"da1",
|
"da1",
|
||||||
"osc",
|
"osc",
|
||||||
"version" (|t_RV|)
|
"version" (|t_RV|)
|
||||||
@ -1322,15 +1324,6 @@ TermResponseAll After the response to |t_RV|, |t_RC|, |t_RS|,
|
|||||||
executing another event, especially if file I/O,
|
executing another event, especially if file I/O,
|
||||||
a shell command or anything else that takes time
|
a shell command or anything else that takes time
|
||||||
is involved.
|
is involved.
|
||||||
Note: Traditionally, TermResponseAll was also
|
|
||||||
used for "foreground" and "background"
|
|
||||||
patterns. These are now handled as part of
|
|
||||||
the "osc" value. For backwards compatibility,
|
|
||||||
the $VIMRUNTIME/plugin/colorresp.vim plugin
|
|
||||||
will handle "osc" events and emit
|
|
||||||
TermResponseAll autocommand events when it
|
|
||||||
encounters "foreground" and "background"
|
|
||||||
values.
|
|
||||||
*TextChanged*
|
*TextChanged*
|
||||||
TextChanged After a change was made to the text in the
|
TextChanged After a change was made to the text in the
|
||||||
current buffer in Normal mode. That is after
|
current buffer in Normal mode. That is after
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 9.1. Last change: 2025 Aug 29
|
*eval.txt* For Vim version 9.1. Last change: 2025 Sep 14
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -2896,15 +2896,16 @@ v:termstyleresp The escape sequence returned by the terminal for the |t_RS|
|
|||||||
*v:termrbgresp* *termrbgresp-variable*
|
*v:termrbgresp* *termrbgresp-variable*
|
||||||
v:termrbgresp The escape sequence returned by the terminal for the |t_RB|
|
v:termrbgresp The escape sequence returned by the terminal for the |t_RB|
|
||||||
termcap entry. This is used to find out what the terminal
|
termcap entry. This is used to find out what the terminal
|
||||||
background color is; see 'background'. This is set by the
|
background color is; see 'background'. When this option is
|
||||||
$VIMRUNTIME/plugin/colorresp.vim plugin normally included with
|
set, the TermResponseAll autocommand event is fired, with
|
||||||
Vim, but can be set manually if you know what you are doing.
|
<amatch> set to "background".
|
||||||
Note that changing this will not do anything.
|
|
||||||
|
|
||||||
*v:termrfgresp* *termrfgresp-variable*
|
*v:termrfgresp* *termrfgresp-variable*
|
||||||
v:termrfgresp The escape sequence returned by the terminal for the |t_RF|
|
v:termrfgresp The escape sequence returned by the terminal for the |t_RF|
|
||||||
termcap entry. This is used to find out what the terminal
|
termcap entry. This is used to find out what the terminal
|
||||||
foreground color is. Behaves the same as |v:termrbgresp|
|
foreground color is. When this option is set, the
|
||||||
|
TermResponseAll autocommand event is fired, with <amatch> set
|
||||||
|
to "foreground".
|
||||||
|
|
||||||
*v:termu7resp* *termu7resp-variable*
|
*v:termu7resp* *termu7resp-variable*
|
||||||
v:termu7resp The escape sequence returned by the terminal for the |t_u7|
|
v:termu7resp The escape sequence returned by the terminal for the |t_u7|
|
||||||
@ -2923,9 +2924,7 @@ v:termda1 The escape sequence returned by a primary device attributes
|
|||||||
v:termosc The escape sequence of the most recent OSC response received
|
v:termosc The escape sequence of the most recent OSC response received
|
||||||
from the terminal. When this variable is set, the
|
from the terminal. When this variable is set, the
|
||||||
|TermResponseAll| autocommand event is fired, with <amatch>
|
|TermResponseAll| autocommand event is fired, with <amatch>
|
||||||
set to "osc". Also used to set the |v:termrbgresp| and
|
set to "osc".
|
||||||
|v:termrfgresp| via the $VIMRUNTIME/plugin/colorresp.vim
|
|
||||||
plugin
|
|
||||||
|
|
||||||
*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()`.
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
*version9.txt* For Vim version 9.1. Last change: 2025 Sep 13
|
*version9.txt* For Vim version 9.1. Last change: 2025 Sep 14
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -41759,9 +41759,6 @@ Others: ~
|
|||||||
Command-line.
|
Command-line.
|
||||||
- |min()|/|max()| can handle all comparable data types.
|
- |min()|/|max()| can handle all comparable data types.
|
||||||
- Vim triggers the |TermResponseAll| autocommand for any terminal OSC value.
|
- Vim triggers the |TermResponseAll| autocommand for any terminal OSC value.
|
||||||
- Vim includes the $VIMRUNTIME/plugins/colorresp.vim which parses the terminal
|
|
||||||
OSC response and can trigger a |TermResponseAll| with the "background" or
|
|
||||||
"foreground" value.
|
|
||||||
|
|
||||||
Platform specific ~
|
Platform specific ~
|
||||||
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
|
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
|
||||||
|
|||||||
@ -3,7 +3,6 @@ The plugin directory is for standard Vim plugin scripts.
|
|||||||
All files here ending in .vim will be sourced by Vim when it starts up.
|
All files here ending in .vim will be sourced by Vim when it starts up.
|
||||||
Look in the file for hints on how it can be disabled without deleting it.
|
Look in the file for hints on how it can be disabled without deleting it.
|
||||||
|
|
||||||
colorresp.vim used to detect terminal background and foreground colours
|
|
||||||
getscriptPlugin.vim get latest version of Vim scripts
|
getscriptPlugin.vim get latest version of Vim scripts
|
||||||
gzip.vim edit compressed files
|
gzip.vim edit compressed files
|
||||||
logiPat.vim logical operators on patterns
|
logiPat.vim logical operators on patterns
|
||||||
|
|||||||
@ -1,51 +0,0 @@
|
|||||||
vim9script
|
|
||||||
|
|
||||||
# Vim plugin for setting the background and foreground colours depending on
|
|
||||||
# the terminal response.
|
|
||||||
#
|
|
||||||
# Maintainer: The Vim Project <https://github.com/vim/vim>
|
|
||||||
# Last Change: 2025 Sep 05
|
|
||||||
|
|
||||||
if exists("g:loaded_colorresp")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
g:loaded_colorresp = 1
|
|
||||||
|
|
||||||
augroup ColorResp
|
|
||||||
au!
|
|
||||||
au TermResponseAll osc {
|
|
||||||
var parts: list<string> = matchlist(v:termosc, '\(\d\+\);rgb:\(\w\+\)/\(\w\+\)/\(\w\+\)')
|
|
||||||
if len(parts) >= 5
|
|
||||||
var type: string = parts[1]
|
|
||||||
var rval: number = str2nr(parts[2][: 1], 16)
|
|
||||||
var gval: number = str2nr(parts[3][: 1], 16)
|
|
||||||
var bval: number = str2nr(parts[4][: 1], 16)
|
|
||||||
|
|
||||||
if type == '11'
|
|
||||||
# Detect light or dark background by parsing OSC 11 RGB background reply
|
|
||||||
# from terminal. Sum the RGB values roughly; if bright enough, set
|
|
||||||
# 'background' to 'light', otherwise set it to 'dark'.
|
|
||||||
var new_bg_val: string = (3 * char2nr('6') < char2nr(parts[2]) + char2nr(parts[3]) + char2nr(parts[4])) ? "light" : "dark"
|
|
||||||
|
|
||||||
v:termrbgresp = v:termosc
|
|
||||||
&background = new_bg_val
|
|
||||||
# For backwards compatibility
|
|
||||||
if exists('#TermResponseAll#background')
|
|
||||||
doautocmd <nomodeline> TermResponseAll background
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
v:termrfgresp = v:termosc
|
|
||||||
# For backwards compatibility
|
|
||||||
if exists('#TermResponseAll#foreground')
|
|
||||||
doautocmd <nomodeline> TermResponseAll foreground
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
}
|
|
||||||
au VimEnter * ++once {
|
|
||||||
call echoraw(&t_RB)
|
|
||||||
call echoraw(&t_RF)
|
|
||||||
}
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
# vim: set sw=2 sts=2 :
|
|
||||||
@ -141,8 +141,8 @@ static struct vimvar
|
|||||||
{VV_NAME("t_blob", VAR_NUMBER), NULL, VV_RO},
|
{VV_NAME("t_blob", VAR_NUMBER), NULL, VV_RO},
|
||||||
{VV_NAME("t_class", VAR_NUMBER), NULL, VV_RO},
|
{VV_NAME("t_class", VAR_NUMBER), NULL, VV_RO},
|
||||||
{VV_NAME("t_object", VAR_NUMBER), NULL, VV_RO},
|
{VV_NAME("t_object", VAR_NUMBER), NULL, VV_RO},
|
||||||
{VV_NAME("termrfgresp", VAR_STRING), NULL, 0},
|
{VV_NAME("termrfgresp", VAR_STRING), NULL, VV_RO},
|
||||||
{VV_NAME("termrbgresp", VAR_STRING), NULL, 0},
|
{VV_NAME("termrbgresp", VAR_STRING), NULL, VV_RO},
|
||||||
{VV_NAME("termu7resp", VAR_STRING), NULL, VV_RO},
|
{VV_NAME("termu7resp", VAR_STRING), NULL, VV_RO},
|
||||||
{VV_NAME("termstyleresp", VAR_STRING), NULL, VV_RO},
|
{VV_NAME("termstyleresp", VAR_STRING), NULL, VV_RO},
|
||||||
{VV_NAME("termblinkresp", VAR_STRING), NULL, VV_RO},
|
{VV_NAME("termblinkresp", VAR_STRING), NULL, VV_RO},
|
||||||
|
|||||||
@ -883,6 +883,8 @@ vim_main2(void)
|
|||||||
// Requesting the termresponse is postponed until here, so that a "-c q"
|
// Requesting the termresponse is postponed until here, so that a "-c q"
|
||||||
// argument doesn't make it appear in the shell Vim was started from.
|
// argument doesn't make it appear in the shell Vim was started from.
|
||||||
may_req_termresponse();
|
may_req_termresponse();
|
||||||
|
|
||||||
|
may_req_bg_color();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// start in insert mode
|
// start in insert mode
|
||||||
|
|||||||
@ -59,6 +59,7 @@ void starttermcap(void);
|
|||||||
void stoptermcap(void);
|
void stoptermcap(void);
|
||||||
void may_req_termresponse(void);
|
void may_req_termresponse(void);
|
||||||
void check_terminal_behavior(void);
|
void check_terminal_behavior(void);
|
||||||
|
void may_req_bg_color(void);
|
||||||
int swapping_screen(void);
|
int swapping_screen(void);
|
||||||
void scroll_start(void);
|
void scroll_start(void);
|
||||||
void cursor_on_force(void);
|
void cursor_on_force(void);
|
||||||
|
|||||||
181
src/term.c
181
src/term.c
@ -131,6 +131,19 @@ static termrequest_T u7_status = TERMREQUEST_INIT;
|
|||||||
static termrequest_T xcc_status = TERMREQUEST_INIT;
|
static termrequest_T xcc_status = TERMREQUEST_INIT;
|
||||||
|
|
||||||
#ifdef FEAT_TERMRESPONSE
|
#ifdef FEAT_TERMRESPONSE
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
// Request foreground color report:
|
||||||
|
static termrequest_T rfg_status = TERMREQUEST_INIT;
|
||||||
|
static int fg_r = 0;
|
||||||
|
static int fg_g = 0;
|
||||||
|
static int fg_b = 0;
|
||||||
|
static int bg_r = 255;
|
||||||
|
static int bg_g = 255;
|
||||||
|
static int bg_b = 255;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
// Request background color report:
|
||||||
|
static termrequest_T rbg_status = TERMREQUEST_INIT;
|
||||||
|
|
||||||
// Request cursor blinking mode report:
|
// Request cursor blinking mode report:
|
||||||
static termrequest_T rbm_status = TERMREQUEST_INIT;
|
static termrequest_T rbm_status = TERMREQUEST_INIT;
|
||||||
@ -145,6 +158,10 @@ static termrequest_T *all_termrequests[] = {
|
|||||||
&crv_status,
|
&crv_status,
|
||||||
&u7_status,
|
&u7_status,
|
||||||
&xcc_status,
|
&xcc_status,
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
&rfg_status,
|
||||||
|
# endif
|
||||||
|
&rbg_status,
|
||||||
&rbm_status,
|
&rbm_status,
|
||||||
&rcs_status,
|
&rcs_status,
|
||||||
&winpos_status,
|
&winpos_status,
|
||||||
@ -4190,6 +4207,49 @@ check_terminal_behavior(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Similar to requesting the version string: Request the terminal background
|
||||||
|
* color when it is the right moment.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
may_req_bg_color(void)
|
||||||
|
{
|
||||||
|
if (can_get_termresponse() && starting == 0)
|
||||||
|
{
|
||||||
|
int didit = FALSE;
|
||||||
|
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
// Only request foreground if t_RF is set.
|
||||||
|
if (rfg_status.tr_progress == STATUS_GET && *T_RFG != NUL)
|
||||||
|
{
|
||||||
|
MAY_WANT_TO_LOG_THIS;
|
||||||
|
LOG_TR1("Sending FG request");
|
||||||
|
out_str(T_RFG);
|
||||||
|
termrequest_sent(&rfg_status);
|
||||||
|
didit = TRUE;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
// Only request background if t_RB is set.
|
||||||
|
if (rbg_status.tr_progress == STATUS_GET && *T_RBG != NUL)
|
||||||
|
{
|
||||||
|
MAY_WANT_TO_LOG_THIS;
|
||||||
|
LOG_TR1("Sending BG request");
|
||||||
|
out_str(T_RBG);
|
||||||
|
termrequest_sent(&rbg_status);
|
||||||
|
didit = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (didit)
|
||||||
|
{
|
||||||
|
// check for the characters now, otherwise they might be eaten by
|
||||||
|
// get_keystroke()
|
||||||
|
out_flush();
|
||||||
|
(void)vpeekc_nomap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4983,6 +5043,8 @@ handle_u7_response(int *arg, char_u *tp UNUSED, int csi_len UNUSED)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle a response to T_CRV: {lead}{first}{x};{vers};{y}c
|
* Handle a response to T_CRV: {lead}{first}{x};{vers};{y}c
|
||||||
* Xterm and alike use '>' for {first}.
|
* Xterm and alike use '>' for {first}.
|
||||||
@ -5743,6 +5805,93 @@ handle_csi(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_for_color_response(char_u *resp, int len)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
char_u *argp;
|
||||||
|
|
||||||
|
j = 1 + (resp[0] == ESC);
|
||||||
|
argp = resp + j;
|
||||||
|
|
||||||
|
if (len >= j + 3 && (argp[0] != '1'
|
||||||
|
|| (argp[1] != '1' && argp[1] != '0')
|
||||||
|
|| argp[2] != ';'))
|
||||||
|
i = 0; // no match
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = j; i < len; ++i)
|
||||||
|
if (resp[i] == '\007' || (resp[0] == OSC ? resp[i] == STERM
|
||||||
|
: (resp[i] == ESC && i + 1 < len && resp[i + 1] == '\\')))
|
||||||
|
{
|
||||||
|
int is_bg = argp[1] == '1';
|
||||||
|
int is_4digit = i - j >= 21 && resp[j + 11] == '/'
|
||||||
|
&& resp[j + 16] == '/';
|
||||||
|
|
||||||
|
if (i - j >= 15 && STRNCMP(resp + j + 3, "rgb:", 4) == 0
|
||||||
|
&& (is_4digit
|
||||||
|
|| (resp[j + 9] == '/' && resp[j + 12] == '/')))
|
||||||
|
{
|
||||||
|
char_u *tp_r = resp + j + 7;
|
||||||
|
char_u *tp_g = resp + j + (is_4digit ? 12 : 10);
|
||||||
|
char_u *tp_b = resp + j + (is_4digit ? 17 : 13);
|
||||||
|
#if defined(FEAT_TERMRESPONSE) && defined(FEAT_TERMINAL)
|
||||||
|
int rval, gval, bval;
|
||||||
|
|
||||||
|
rval = hexhex2nr(tp_r);
|
||||||
|
gval = hexhex2nr(tp_g);
|
||||||
|
bval = hexhex2nr(tp_b);
|
||||||
|
#endif
|
||||||
|
if (is_bg)
|
||||||
|
{
|
||||||
|
char *new_bg_val = (3 * '6' < *tp_r + *tp_g +
|
||||||
|
*tp_b) ? "light" : "dark";
|
||||||
|
|
||||||
|
LOG_TRN("Received RBG response: %s", tp);
|
||||||
|
#ifdef FEAT_TERMRESPONSE
|
||||||
|
rbg_status.tr_progress = STATUS_GOT;
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
bg_r = rval;
|
||||||
|
bg_g = gval;
|
||||||
|
bg_b = bval;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
if (!option_was_set((char_u *)"bg")
|
||||||
|
&& STRCMP(p_bg, new_bg_val) != 0)
|
||||||
|
{
|
||||||
|
// value differs, apply it
|
||||||
|
set_option_value_give_err((char_u *)"bg",
|
||||||
|
0L, (char_u *)new_bg_val, 0);
|
||||||
|
reset_option_was_set((char_u *)"bg");
|
||||||
|
redraw_asap(UPD_CLEAR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if defined(FEAT_TERMRESPONSE) && defined(FEAT_TERMINAL)
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_TRN("Received RFG response: %s", tp);
|
||||||
|
rfg_status.tr_progress = STATUS_GOT;
|
||||||
|
fg_r = rval;
|
||||||
|
fg_g = gval;
|
||||||
|
fg_b = bval;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
set_vim_var_string(is_bg ? VV_TERMRBGRESP
|
||||||
|
: VV_TERMRFGRESP, resp, len);
|
||||||
|
#endif
|
||||||
|
apply_autocmds(EVENT_TERMRESPONSEALL,
|
||||||
|
is_bg ? (char_u *)"background" : (char_u *)"foreground",
|
||||||
|
NULL, FALSE, curbuf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == len)
|
||||||
|
LOG_TR1("not enough characters for RB");
|
||||||
|
}
|
||||||
|
|
||||||
static oscstate_T osc_state;
|
static oscstate_T osc_state;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5803,6 +5952,9 @@ handle_osc(char_u *tp, int len, char_u *key_name, int *slen)
|
|||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
set_vim_var_string_direct(VV_TERMOSC, osc_state.buf.ga_data);
|
set_vim_var_string_direct(VV_TERMOSC, osc_state.buf.ga_data);
|
||||||
#endif
|
#endif
|
||||||
|
// Check for background/foreground colour response
|
||||||
|
check_for_color_response(osc_state.buf.ga_data, osc_state.buf.ga_len - 1);
|
||||||
|
|
||||||
char_u savebg = *p_bg;
|
char_u savebg = *p_bg;
|
||||||
apply_autocmds(EVENT_TERMRESPONSEALL, (char_u *)"osc",
|
apply_autocmds(EVENT_TERMRESPONSEALL, (char_u *)"osc",
|
||||||
NULL, FALSE, curbuf);
|
NULL, FALSE, curbuf);
|
||||||
@ -6584,28 +6736,18 @@ handle_osc:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if (defined(FEAT_TERMINAL) && defined(FEAT_TERMRESPONSE)) || defined(PROTO)
|
#if (defined(FEAT_TERMINAL) && defined(FEAT_TERMRESPONSE)) || defined(PROTO)
|
||||||
|
|
||||||
static void
|
|
||||||
term_get_color(char_u *str, char_u *r, char_u *g, char_u *b)
|
|
||||||
{
|
|
||||||
char_u rn[3], gn[3], bn[3];
|
|
||||||
|
|
||||||
if (sscanf((char *)str, "%*[^:]:%2s%*[^/]/%2s%*[^/]/%2s",
|
|
||||||
(char *)&rn, (char *)&gn, (char *)&bn) != 3)
|
|
||||||
return;
|
|
||||||
|
|
||||||
*r = hexhex2nr(rn);
|
|
||||||
*g = hexhex2nr(gn);
|
|
||||||
*b = hexhex2nr(bn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the text foreground color, if known.
|
* Get the text foreground color, if known.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
term_get_fg_color(char_u *r, char_u *g, char_u *b)
|
term_get_fg_color(char_u *r, char_u *g, char_u *b)
|
||||||
{
|
{
|
||||||
term_get_color(get_vim_var_str(VV_TERMRFGRESP), r, g, b);
|
if (rfg_status.tr_progress != STATUS_GOT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*r = fg_r;
|
||||||
|
*g = fg_g;
|
||||||
|
*b = fg_b;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6614,7 +6756,12 @@ term_get_fg_color(char_u *r, char_u *g, char_u *b)
|
|||||||
void
|
void
|
||||||
term_get_bg_color(char_u *r, char_u *g, char_u *b)
|
term_get_bg_color(char_u *r, char_u *g, char_u *b)
|
||||||
{
|
{
|
||||||
term_get_color(get_vim_var_str(VV_TERMRBGRESP), r, g, b);
|
if (rbg_status.tr_progress != STATUS_GOT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*r = bg_r;
|
||||||
|
*g = bg_g;
|
||||||
|
*b = bg_b;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -252,7 +252,6 @@ NEW_TESTS = \
|
|||||||
test_plugin_tohtml \
|
test_plugin_tohtml \
|
||||||
test_plugin_tutor \
|
test_plugin_tutor \
|
||||||
test_plugin_zip \
|
test_plugin_zip \
|
||||||
test_plugin_colorresp \
|
|
||||||
test_plus_arg_edit \
|
test_plus_arg_edit \
|
||||||
test_popup \
|
test_popup \
|
||||||
test_popupwin \
|
test_popupwin \
|
||||||
@ -526,7 +525,6 @@ NEW_TESTS_RES = \
|
|||||||
test_plugin_tohtml.res \
|
test_plugin_tohtml.res \
|
||||||
test_plugin_tutor.res \
|
test_plugin_tutor.res \
|
||||||
test_plugin_zip.res \
|
test_plugin_zip.res \
|
||||||
test_plugin_colorresp.res \
|
|
||||||
test_plus_arg_edit.res \
|
test_plus_arg_edit.res \
|
||||||
test_popup.res \
|
test_popup.res \
|
||||||
test_popupwin.res \
|
test_popupwin.res \
|
||||||
|
|||||||
@ -1,74 +0,0 @@
|
|||||||
" Test for the colorresp plugin
|
|
||||||
|
|
||||||
CheckNotGui
|
|
||||||
CheckUnix
|
|
||||||
|
|
||||||
runtime plugin/colorresp.vim
|
|
||||||
|
|
||||||
func Test_colorresp()
|
|
||||||
set t_RF=x
|
|
||||||
set t_RB=y
|
|
||||||
|
|
||||||
" response to t_RF, 4 digits
|
|
||||||
let red = 0x12
|
|
||||||
let green = 0x34
|
|
||||||
let blue = 0x56
|
|
||||||
let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrfgresp)
|
|
||||||
" call WaitForAssert({-> assert_equal(seq, v:termrfgresp)})
|
|
||||||
|
|
||||||
" response to t_RF, 2 digits
|
|
||||||
let red = 0x78
|
|
||||||
let green = 0x9a
|
|
||||||
let blue = 0xbc
|
|
||||||
let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrfgresp)
|
|
||||||
|
|
||||||
" response to t_RB, 4 digits, dark
|
|
||||||
set background=light
|
|
||||||
call test_option_not_set('background')
|
|
||||||
let red = 0x29
|
|
||||||
let green = 0x4a
|
|
||||||
let blue = 0x6b
|
|
||||||
let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrbgresp)
|
|
||||||
call assert_equal('dark', &background)
|
|
||||||
|
|
||||||
" response to t_RB, 4 digits, light
|
|
||||||
set background=dark
|
|
||||||
call test_option_not_set('background')
|
|
||||||
let red = 0x81
|
|
||||||
let green = 0x63
|
|
||||||
let blue = 0x65
|
|
||||||
let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrbgresp)
|
|
||||||
call assert_equal('light', &background)
|
|
||||||
|
|
||||||
" response to t_RB, 2 digits, dark
|
|
||||||
set background=light
|
|
||||||
call test_option_not_set('background')
|
|
||||||
let red = 0x47
|
|
||||||
let green = 0x59
|
|
||||||
let blue = 0x5b
|
|
||||||
let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrbgresp)
|
|
||||||
call assert_equal('dark', &background)
|
|
||||||
|
|
||||||
" response to t_RB, 2 digits, light
|
|
||||||
set background=dark
|
|
||||||
call test_option_not_set('background')
|
|
||||||
let red = 0x83
|
|
||||||
let green = 0xa4
|
|
||||||
let blue = 0xc2
|
|
||||||
let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
|
||||||
call feedkeys(seq, 'Lx!')
|
|
||||||
call assert_equal(seq, v:termrbgresp)
|
|
||||||
call assert_equal('light', &background)
|
|
||||||
|
|
||||||
set t_RF= t_RB=
|
|
||||||
endfunc
|
|
||||||
@ -2790,4 +2790,72 @@ func Test_term_response_osc()
|
|||||||
call assert_equal("\<Esc>]15;hello world!\x07", v:termosc)
|
call assert_equal("\<Esc>]15;hello world!\x07", v:termosc)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" This only checks if the sequence is recognized.
|
||||||
|
func Test_term_rgb_response()
|
||||||
|
set t_RF=x
|
||||||
|
set t_RB=y
|
||||||
|
|
||||||
|
" response to t_RF, 4 digits
|
||||||
|
let red = 0x12
|
||||||
|
let green = 0x34
|
||||||
|
let blue = 0x56
|
||||||
|
let seq = printf("\<Esc>]10;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrfgresp)
|
||||||
|
|
||||||
|
" response to t_RF, 2 digits
|
||||||
|
let red = 0x78
|
||||||
|
let green = 0x9a
|
||||||
|
let blue = 0xbc
|
||||||
|
let seq = printf("\<Esc>]10;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrfgresp)
|
||||||
|
|
||||||
|
" response to t_RB, 4 digits, dark
|
||||||
|
set background=light
|
||||||
|
eval 'background'->test_option_not_set()
|
||||||
|
let red = 0x29
|
||||||
|
let green = 0x4a
|
||||||
|
let blue = 0x6b
|
||||||
|
let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrbgresp)
|
||||||
|
call assert_equal('dark', &background)
|
||||||
|
|
||||||
|
" response to t_RB, 4 digits, light
|
||||||
|
set background=dark
|
||||||
|
call test_option_not_set('background')
|
||||||
|
let red = 0x81
|
||||||
|
let green = 0x63
|
||||||
|
let blue = 0x65
|
||||||
|
let seq = printf("\<Esc>]11;rgb:%02x00/%02x00/%02x00\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrbgresp)
|
||||||
|
call assert_equal('light', &background)
|
||||||
|
|
||||||
|
" response to t_RB, 2 digits, dark
|
||||||
|
set background=light
|
||||||
|
call test_option_not_set('background')
|
||||||
|
let red = 0x47
|
||||||
|
let green = 0x59
|
||||||
|
let blue = 0x5b
|
||||||
|
let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrbgresp)
|
||||||
|
call assert_equal('dark', &background)
|
||||||
|
|
||||||
|
" response to t_RB, 2 digits, light
|
||||||
|
set background=dark
|
||||||
|
call test_option_not_set('background')
|
||||||
|
let red = 0x83
|
||||||
|
let green = 0xa4
|
||||||
|
let blue = 0xc2
|
||||||
|
let seq = printf("\<Esc>]11;rgb:%02x/%02x/%02x\x07", red, green, blue)
|
||||||
|
call feedkeys(seq, 'Lx!')
|
||||||
|
call assert_equal(seq, v:termrbgresp)
|
||||||
|
call assert_equal('light', &background)
|
||||||
|
|
||||||
|
set t_RF= t_RB=
|
||||||
|
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 */
|
||||||
|
/**/
|
||||||
|
1757,
|
||||||
/**/
|
/**/
|
||||||
1756,
|
1756,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user