summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-03 20:43:24 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-03 20:43:24 +0000
commit15a24f08987e3831be255333bb84b7bc9c00db24 (patch)
tree2742c778aa1022841de13832c77437cf1b9f5498
parent800b01b0c8a5983e23d8caa2be6c73d195448193 (diff)
downloadvim-git-15a24f08987e3831be255333bb84b7bc9c00db24.tar.gz
patch 8.2.3731: "set! termcap" shows codes in one column, but not keysv8.2.3731
Problem: "set! termcap" shows codes in one column, but not keys. Solution: Also use one column for keys. (closes #9258)
-rw-r--r--src/option.c13
-rw-r--r--src/proto/term.pro2
-rw-r--r--src/term.c13
-rw-r--r--src/testdir/test_set.vim30
-rw-r--r--src/version.c2
5 files changed, 48 insertions, 12 deletions
diff --git a/src/option.c b/src/option.c
index 22dcfc5d1..c6230c402 100644
--- 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
index 949b35000..6f0f08103 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -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_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
index c20da0c33..a8819a3ad 100644
--- 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
index 7215772a0..4035248e1 100644
--- 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
index d0057b300..5c822be96 100644
--- 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,