# HG changeset patch # User Bram Moolenaar # Date 1638564303 -3600 # Node ID d26bab4f6aca7c2423bfcf95021761d36eb9777a # Parent 0a13343e1eb9e359f203786c2c568ec87750a98a patch 8.2.3731: "set! termcap" shows codes in one column, but not keys Commit: https://github.com/vim/vim/commit/15a24f08987e3831be255333bb84b7bc9c00db24 Author: Bram Moolenaar Date: Fri Dec 3 20:43:24 2021 +0000 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 https://github.com/vim/vim/issues/9258) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -1218,11 +1218,12 @@ ex_set(exarg_T *eap) * does not need to be expanded with option_expand(). * "opt_flags": * 0 for ":set" - * OPT_GLOBAL for ":setglobal" - * OPT_LOCAL for ":setlocal" and a modeline - * OPT_MODELINE for a modeline - * OPT_WINONLY to only set window-local options - * OPT_NOWIN to skip setting window-local options + * OPT_GLOBAL for ":setglobal" + * OPT_LOCAL for ":setlocal" and a modeline + * OPT_MODELINE for a modeline + * OPT_WINONLY to only set 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 */ @@ -1290,7 +1291,7 @@ do_set( else if (STRNCMP(arg, "termcap", 7) == 0 && !(opt_flags & OPT_MODELINE)) { showoptions(2, opt_flags); - show_termcodes(); + show_termcodes(opt_flags); did_show = TRUE; arg += 7; } diff --git a/src/proto/term.pro b/src/proto/term.pro --- a/src/proto/term.pro +++ b/src/proto/term.pro @@ -80,7 +80,7 @@ int check_termcode(int max_offset, char_ 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); 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); void update_tcap(int attr); void swap_tcap(void); diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -6217,9 +6217,10 @@ gather_termleader(void) /* * Show all termcodes (for ":set termcap") * This code looks a lot like showoptions(), but is different. + * "flags" can have OPT_ONECOLUMN. */ void -show_termcodes(void) +show_termcodes(int flags) { int col; int *items; @@ -6244,12 +6245,13 @@ show_termcodes(void) 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) * 2. display the medium items (medium length 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[] @@ -6259,9 +6261,10 @@ show_termcodes(void) { len = show_one_termcode(termcodes[i].name, termcodes[i].code, FALSE); - if (len <= INC3 - GAP ? run == 1 + if ((flags & OPT_ONECOLUMN) || + (len <= INC3 - GAP ? run == 1 : len <= INC2 - GAP ? run == 2 - : run == 3) + : run == 3)) items[item_count++] = i; } diff --git a/src/testdir/test_set.vim b/src/testdir/test_set.vim --- a/src/testdir/test_set.vim +++ b/src/testdir/test_set.vim @@ -1,5 +1,7 @@ " Tests for the :set command +source check.vim + function Test_set_backslash() let isk_save = &isk @@ -45,4 +47,32 @@ func Test_set_no_arg() setglobal textwidth& 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3731, +/**/ 3730, /**/ 3729,