]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.0128: cannot list options one per line v8.2.0128
authorBram Moolenaar <Bram@vim.org>
Sat, 18 Jan 2020 14:53:19 +0000 (15:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 18 Jan 2020 14:53:19 +0000 (15:53 +0100)
Problem:    Cannot list options one per line.
Solution:   Use ":set!" to list one option per line.

runtime/doc/options.txt
src/ex_cmds.h
src/ex_docmd.c
src/option.c
src/optiondefs.h
src/proto/option.pro
src/testdir/test_options.vim
src/version.c
src/vim.h

index b86244feaf4a41a2141ca63daf29b90a711f225d..5ee2ce13ac766688e23eb577df3b441a602be76f 100644 (file)
@@ -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
index 36a8ad4c2c16736250dbb51e9ec0bbb043cae94f..53e49d519cc6462d60c4675ccebceb4f55a120d6 100644 (file)
@@ -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,
index 51d85c3a2a0d344f4b58e242ec3afe2c7f73812b..193cfcfdffab49b0849bf090fadc15324319ac80 100644 (file)
@@ -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)
index 7c37326f931b62a73589b39e8f5f5030d3e2269c..e24181af10ee81c293b656b6eebc91a3e45a2290 100644 (file)
@@ -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
                {
index 8fda8bff8caec87f52e64fb0a861c2ef22097e34..36701070dd1123cef789ee1240a52de431f1389b 100644 (file)
@@ -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.
 // {"
index dc07ee6b830f99f14ddd192f5d1bd5783103e6f5..7da2cbf982d82a469fcba4a47d629ba668759869 100644 (file)
@@ -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);
index 636a24d6e9a08b26f56a7fc99c11e8fa05829015..7a74af652acba0791085b7bb239fa0316b7df2bf 100644 (file)
@@ -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
index d6fa59c9e773d5b4ffdcc1f24ef8dad2e9ff4ce0..cae650837a6119efdbadd47494baca28442b12bd 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    128,
 /**/
     127,
 /**/
index 16949ae291dd811b41bc5c8c51396a80ce63cc6f..d41db143990b42027bba275223d512e884609304 100644 (file)
--- 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'