summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-18 15:53:19 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-18 15:53:19 +0100
commit6b915c0c0ee7ef82f8d3d310a4345e098cb929b0 (patch)
tree426ab78922c56f48bd65ac7877d1f0a73c53d094
parent3029bcc094415243bad14e5720f68e857b755dad (diff)
downloadvim-git-6b915c0c0ee7ef82f8d3d310a4345e098cb929b0.tar.gz
patch 8.2.0128: cannot list options one per linev8.2.0128
Problem: Cannot list options one per line. Solution: Use ":set!" to list one option per line.
-rw-r--r--runtime/doc/options.txt12
-rw-r--r--src/ex_cmds.h6
-rw-r--r--src/ex_docmd.c18
-rw-r--r--src/option.c34
-rw-r--r--src/optiondefs.h2
-rw-r--r--src/proto/option.pro1
-rw-r--r--src/testdir/test_options.vim9
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h13
9 files changed, 59 insertions, 38 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index b86244fea..5ee2ce13a 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -22,9 +22,13 @@ achieve special effects. These options come in three forms:
1. Setting options *set-option* *E764*
*:se* *:set*
-:se[t] Show all options that differ from their default value.
+:se[t][!] Show all options that differ from their default value.
+ When [!] is present every option is on a separate
+ line.
-:se[t] all Show all but terminal options.
+:se[t][!] all Show all but terminal options.
+ When [!] is present every option is on a separate
+ line.
:se[t] termcap Show all terminal options. Note that in the GUI the
key codes are not shown, because they are generated
@@ -287,7 +291,7 @@ happens when the buffer is not loaded, but they are lost when the buffer is
wiped out |:bwipe|.
*:setl* *:setlocal*
-:setl[ocal] ... Like ":set" but set only the value local to the
+:setl[ocal][!] ... Like ":set" but set only the value local to the
current buffer or window. Not all options have a
local value. If the option does not have a local
value the global value is set.
@@ -309,7 +313,7 @@ wiped out |:bwipe|.
{option}, so that the global value will be used.
*:setg* *:setglobal*
-:setg[lobal] ... Like ":set" but set only the global value for a local
+:setg[lobal][!] ... Like ":set" but set only the global value for a local
option without changing the local value.
When displaying an option, the global value is shown.
With the "all" argument: display global values for all
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 36a8ad4c2..53e49d519 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1307,16 +1307,16 @@ EXCMD(CMD_scscope, "scscope", ex_scscope,
EX_EXTRA|EX_NOTRLCOM,
ADDR_NONE),
EXCMD(CMD_set, "set", ex_set,
- EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+ EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
ADDR_NONE),
EXCMD(CMD_setfiletype, "setfiletype", ex_setfiletype,
EX_TRLBAR|EX_EXTRA|EX_NEEDARG|EX_CMDWIN,
ADDR_NONE),
EXCMD(CMD_setglobal, "setglobal", ex_set,
- EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+ EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
ADDR_NONE),
EXCMD(CMD_setlocal, "setlocal", ex_set,
- EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
+ EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_SBOXOK,
ADDR_NONE),
EXCMD(CMD_sfind, "sfind", ex_splitview,
EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 51d85c3a2..193cfcfdf 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -320,7 +320,6 @@ static void ex_setfiletype(exarg_T *eap);
# define ex_diffupdate ex_ni
#endif
static void ex_digraphs(exarg_T *eap);
-static void ex_set(exarg_T *eap);
#ifdef FEAT_SEARCH_EXTRA
static void ex_nohlsearch(exarg_T *eap);
#else
@@ -8488,23 +8487,6 @@ ex_digraphs(exarg_T *eap UNUSED)
#endif
}
- static void
-ex_set(exarg_T *eap)
-{
- int flags = 0;
-
- if (eap->cmdidx == CMD_setlocal)
- flags = OPT_LOCAL;
- else if (eap->cmdidx == CMD_setglobal)
- flags = OPT_GLOBAL;
-#if defined(FEAT_EVAL) && defined(FEAT_BROWSE)
- if (cmdmod.browse && flags == 0)
- ex_options(eap);
- else
-#endif
- (void)do_set(eap->arg, flags);
-}
-
#if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
void
set_no_hlsearch(int flag)
diff --git a/src/option.c b/src/option.c
index 7c37326f9..e24181af1 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1066,6 +1066,27 @@ set_title_defaults(void)
}
#endif
+ void
+ex_set(exarg_T *eap)
+{
+ int flags = 0;
+
+ if (eap->cmdidx == CMD_setlocal)
+ flags = OPT_LOCAL;
+ else if (eap->cmdidx == CMD_setglobal)
+ flags = OPT_GLOBAL;
+#if defined(FEAT_EVAL) && defined(FEAT_BROWSE)
+ if (cmdmod.browse && flags == 0)
+ ex_options(eap);
+ else
+#endif
+ {
+ if (eap->forceit)
+ flags |= OPT_ONECOLUMN;
+ (void)do_set(eap->arg, flags);
+ }
+}
+
/*
* Parse 'arg' for option settings.
*
@@ -4349,7 +4370,7 @@ showoptions(
#define INC 20
#define GAP 3
- items = ALLOC_MULT(struct vimoption *, PARAM_COUNT);
+ items = ALLOC_MULT(struct vimoption *, OPTION_COUNT);
if (items == NULL)
return;
@@ -4364,9 +4385,10 @@ showoptions(
msg_puts_title(_("\n--- Options ---"));
/*
- * do the loop two times:
+ * Do the loop two times:
* 1. display the short items
* 2. display the long items (only strings and numbers)
+ * When "opt_flags" has OPT_ONECOLUMN do everything in run 2.
*/
for (run = 1; run <= 2 && !got_int; ++run)
{
@@ -4377,12 +4399,12 @@ showoptions(
for (p = &options[0]; p->fullname != NULL; p++)
{
// apply :filter /pat/
- if (message_filtered((char_u *) p->fullname))
+ if (message_filtered((char_u *)p->fullname))
continue;
varp = NULL;
isterm = istermoption(p);
- if (opt_flags != 0)
+ if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) != 0)
{
if (p->indir != PV_NONE && !isterm)
varp = get_varp_scope(p, opt_flags);
@@ -4394,7 +4416,9 @@ showoptions(
|| (all == 1 && !isterm)
|| (all == 0 && !optval_default(p, varp, p_cp))))
{
- if (p->flags & P_BOOL)
+ if (opt_flags & OPT_ONECOLUMN)
+ len = Columns;
+ else if (p->flags & P_BOOL)
len = 1; // a toggle option fits always
else
{
diff --git a/src/optiondefs.h b/src/optiondefs.h
index 8fda8bff8..36701070d 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -3009,7 +3009,7 @@ static struct vimoption options[] =
{NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCTX_INIT}
};
-#define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption))
+#define OPTION_COUNT (sizeof(options) / sizeof(struct vimoption))
// The following is needed to make the gen_opt_test.vim script work.
// {"
diff --git a/src/proto/option.pro b/src/proto/option.pro
index dc07ee6b8..7da2cbf98 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -8,6 +8,7 @@ void set_init_2(void);
void set_init_3(void);
void set_helplang_default(char_u *lang);
void set_title_defaults(void);
+void ex_set(exarg_T *eap);
int do_set(char_u *arg, int opt_flags);
void did_set_option(int opt_idx, int opt_flags, int new_value, int value_checked);
int string_to_key(char_u *arg, int multi_byte);
diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim
index 636a24d6e..7a74af652 100644
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -44,7 +44,7 @@ func Test_wildchar()
set wildchar&
endfunc
-func Test_options()
+func Test_options_command()
let caught = 'ok'
try
options
@@ -388,6 +388,13 @@ func Test_set_all()
set tw& iskeyword& splitbelow&
endfunc
+func Test_set_one_column()
+ let out_mult = execute('set all')->split("\n")
+ let out_one = execute('set! all')->split("\n")
+ " one column should be two to four times as many lines
+ call assert_inrange(len(out_mult) * 2, len(out_mult) * 4, len(out_one))
+endfunc
+
func Test_set_values()
if filereadable('opt_test.vim')
source opt_test.vim
diff --git a/src/version.c b/src/version.c
index d6fa59c9e..cae650837 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 128,
+/**/
127,
/**/
126,
diff --git a/src/vim.h b/src/vim.h
index 16949ae29..d41db1439 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1229,12 +1229,13 @@ typedef struct {
* When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
* values, get local value.
*/
-#define OPT_FREE 1 // free old value if it was allocated
-#define OPT_GLOBAL 2 // use global value
-#define OPT_LOCAL 4 // use local value
-#define OPT_MODELINE 8 // option in modeline
-#define OPT_WINONLY 16 // only set window-local options
-#define OPT_NOWIN 32 // don't set window-local options
+#define OPT_FREE 0x01 // free old value if it was allocated
+#define OPT_GLOBAL 0x02 // use global value
+#define OPT_LOCAL 0x04 // use local value
+#define OPT_MODELINE 0x08 // option in modeline
+#define OPT_WINONLY 0x10 // only set window-local options
+#define OPT_NOWIN 0x20 // don't set window-local options
+#define OPT_ONECOLUMN 0x40 // list options one per line
// Magic chars used in confirm dialog strings
#define DLG_BUTTON_SEP '\n'