0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.3731: "set! termcap" shows codes in one column, but not keys

Problem:    "set! termcap" shows codes in one column, but not keys.
Solution:   Also use one column for keys. (closes #9258)
This commit is contained in:
Bram Moolenaar 2021-12-03 20:43:24 +00:00
parent 800b01b0c8
commit 15a24f0898
5 changed files with 48 additions and 12 deletions

View File

@ -1218,11 +1218,12 @@ ex_set(exarg_T *eap)
* does not need to be expanded with option_expand(). * does not need to be expanded with option_expand().
* "opt_flags": * "opt_flags":
* 0 for ":set" * 0 for ":set"
* OPT_GLOBAL for ":setglobal" * OPT_GLOBAL for ":setglobal"
* OPT_LOCAL for ":setlocal" and a modeline * OPT_LOCAL for ":setlocal" and a modeline
* OPT_MODELINE for a modeline * OPT_MODELINE for a modeline
* OPT_WINONLY to only set window-local options * OPT_WINONLY to only set window-local options
* OPT_NOWIN to skip setting window-local options * OPT_NOWIN to skip setting window-local options
* OPT_ONECOLUMN do not use multiple columns
* *
* returns FAIL if an error is detected, OK otherwise * returns FAIL if an error is detected, OK otherwise
*/ */
@ -1290,7 +1291,7 @@ do_set(
else if (STRNCMP(arg, "termcap", 7) == 0 && !(opt_flags & OPT_MODELINE)) else if (STRNCMP(arg, "termcap", 7) == 0 && !(opt_flags & OPT_MODELINE))
{ {
showoptions(2, opt_flags); showoptions(2, opt_flags);
show_termcodes(); show_termcodes(opt_flags);
did_show = TRUE; did_show = TRUE;
arg += 7; arg += 7;
} }

View File

@ -80,7 +80,7 @@ int check_termcode(int max_offset, char_u *buf, int bufsize, int *buflen);
void term_get_fg_color(char_u *r, char_u *g, char_u *b); void term_get_fg_color(char_u *r, char_u *g, char_u *b);
void term_get_bg_color(char_u *r, char_u *g, char_u *b); void term_get_bg_color(char_u *r, char_u *g, char_u *b);
char_u *replace_termcodes(char_u *from, char_u **bufp, int flags, int *did_simplify); char_u *replace_termcodes(char_u *from, char_u **bufp, int flags, int *did_simplify);
void show_termcodes(void); void show_termcodes(int flags);
int show_one_termcode(char_u *name, char_u *code, int printit); int show_one_termcode(char_u *name, char_u *code, int printit);
void update_tcap(int attr); void update_tcap(int attr);
void swap_tcap(void); void swap_tcap(void);

View File

@ -6217,9 +6217,10 @@ gather_termleader(void)
/* /*
* Show all termcodes (for ":set termcap") * Show all termcodes (for ":set termcap")
* This code looks a lot like showoptions(), but is different. * This code looks a lot like showoptions(), but is different.
* "flags" can have OPT_ONECOLUMN.
*/ */
void void
show_termcodes(void) show_termcodes(int flags)
{ {
int col; int col;
int *items; int *items;
@ -6244,12 +6245,13 @@ show_termcodes(void)
msg_puts_title(_("\n--- Terminal keys ---")); msg_puts_title(_("\n--- Terminal keys ---"));
/* /*
* do the loop two times: * Do the loop three times:
* 1. display the short items (non-strings and short strings) * 1. display the short items (non-strings and short strings)
* 2. display the medium items (medium length strings) * 2. display the medium items (medium length strings)
* 3. display the long items (remaining strings) * 3. display the long items (remaining strings)
* When "flags" has OPT_ONECOLUMN do everything in 3.
*/ */
for (run = 1; run <= 3 && !got_int; ++run) for (run = (flags & OPT_ONECOLUMN) ? 3 : 1; run <= 3 && !got_int; ++run)
{ {
/* /*
* collect the items in items[] * collect the items in items[]
@ -6259,9 +6261,10 @@ show_termcodes(void)
{ {
len = show_one_termcode(termcodes[i].name, len = show_one_termcode(termcodes[i].name,
termcodes[i].code, FALSE); termcodes[i].code, FALSE);
if (len <= INC3 - GAP ? run == 1 if ((flags & OPT_ONECOLUMN) ||
(len <= INC3 - GAP ? run == 1
: len <= INC2 - GAP ? run == 2 : len <= INC2 - GAP ? run == 2
: run == 3) : run == 3))
items[item_count++] = i; items[item_count++] = i;
} }

View File

@ -1,5 +1,7 @@
" Tests for the :set command " Tests for the :set command
source check.vim
function Test_set_backslash() function Test_set_backslash()
let isk_save = &isk let isk_save = &isk
@ -45,4 +47,32 @@ func Test_set_no_arg()
setglobal textwidth& setglobal textwidth&
endfunc endfunc
func Test_set_termcap()
CheckNotGui
let lines = split(execute('set termcap'), "\n")
call assert_match('--- Terminal codes ---', lines[0])
" four columns
call assert_match('t_..=.*t_..=.*t_..=.*t_..=', lines[1])
for keys_idx in range(len(lines))
if lines[keys_idx] =~ '--- Terminal keys ---'
break
endif
endfor
call assert_true(keys_idx < len(lines))
" three columns
call assert_match('t_.. .*t_.. .*t_.. ', lines[keys_idx + 1])
let more_lines = split(execute('set! termcap'), "\n")
for i in range(len(more_lines))
if more_lines[i] =~ '--- Terminal keys ---'
break
endif
endfor
call assert_true(i < len(more_lines))
call assert_true(i > keys_idx)
call assert_true(len(more_lines) - i > len(lines) - keys_idx)
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -753,6 +753,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 */
/**/
3731,
/**/ /**/
3730, 3730,
/**/ /**/