]> granicus.if.org Git - vim/commitdiff
patch 8.1.1201: output of :command is hard to read v8.1.1201
authorBram Moolenaar <Bram@vim.org>
Wed, 24 Apr 2019 21:08:23 +0000 (23:08 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 24 Apr 2019 21:08:23 +0000 (23:08 +0200)
Problem:    Output of :command is hard to read.
Solution:   Make some columns wider, some narrower.  Truncate the command when
            listing all.

src/ex_docmd.c
src/getchar.c
src/menu.c
src/message.c
src/proto/message.pro
src/version.c

index e37fdfbeb560e329d4954c3f9e0b3ad2f8a7b4b7..af68a8ea701bffe8c812694fcff00e9733116298 100644 (file)
@@ -6000,6 +6000,7 @@ uc_list(char_u *name, size_t name_len)
     int                found = FALSE;
     ucmd_T     *cmd;
     int                len;
+    int                over;
     long       a;
     garray_T   *gap;
 
@@ -6019,17 +6020,36 @@ uc_list(char_u *name, size_t name_len)
 
            /* Put out the title first time */
            if (!found)
-               msg_puts_title(_("\n    Name        Args       Address   Complete  Definition"));
+               msg_puts_title(_("\n    Name              Args Address Complete   Definition"));
            found = TRUE;
            msg_putchar('\n');
            if (got_int)
                break;
 
-           /* Special cases */
-           msg_putchar(a & BANG ? '!' : ' ');
-           msg_putchar(a & REGSTR ? '"' : ' ');
-           msg_putchar(gap != &ucmds ? 'b' : ' ');
-           msg_putchar(' ');
+           // Special cases
+           len = 4;
+           if (a & BANG)
+           {
+               msg_putchar('!');
+               --len;
+           }
+           if (a & REGSTR)
+           {
+               msg_putchar('"');
+               --len;
+           }
+           if (gap != &ucmds)
+           {
+               msg_putchar('b');
+               --len;
+           }
+           if (a & TRLBAR)
+           {
+               msg_putchar('|');
+               --len;
+           }
+           while (len-- > 0)
+               msg_putchar(' ');
 
            msg_outtrans_attr(cmd->uc_name, HL_ATTR(HLF_D));
            len = (int)STRLEN(cmd->uc_name) + 4;
@@ -6037,30 +6057,33 @@ uc_list(char_u *name, size_t name_len)
            do {
                msg_putchar(' ');
                ++len;
-           } while (len < 16);
+           } while (len < 22);
 
+           // "over" is how much longer the name is than the column width for
+           // the name, we'll try to align what comes after.
+           over = len - 22;
            len = 0;
 
-           /* Arguments */
+           // Arguments
            switch ((int)(a & (EXTRA|NOSPC|NEEDARG)))
            {
-           case 0:                     IObuff[len++] = '0'; break;
-           case (EXTRA):               IObuff[len++] = '*'; break;
-           case (EXTRA|NOSPC):         IObuff[len++] = '?'; break;
-           case (EXTRA|NEEDARG):       IObuff[len++] = '+'; break;
-           case (EXTRA|NOSPC|NEEDARG): IObuff[len++] = '1'; break;
+               case 0:                     IObuff[len++] = '0'; break;
+               case (EXTRA):               IObuff[len++] = '*'; break;
+               case (EXTRA|NOSPC):         IObuff[len++] = '?'; break;
+               case (EXTRA|NEEDARG):       IObuff[len++] = '+'; break;
+               case (EXTRA|NOSPC|NEEDARG): IObuff[len++] = '1'; break;
            }
 
            do {
                IObuff[len++] = ' ';
-           } while (len < 5);
+           } while (len < 5 - over);
 
-           /* Range */
+           // Address / Range
            if (a & (RANGE|COUNT))
            {
                if (a & COUNT)
                {
-                   /* -count=N */
+                   // -count=N
                    sprintf((char *)IObuff + len, "%ldc", cmd->uc_def);
                    len += (int)STRLEN(IObuff + len);
                }
@@ -6068,7 +6091,7 @@ uc_list(char_u *name, size_t name_len)
                    IObuff[len++] = '%';
                else if (cmd->uc_def >= 0)
                {
-                   /* -range=N */
+                   // -range=N
                    sprintf((char *)IObuff + len, "%ld", cmd->uc_def);
                    len += (int)STRLEN(IObuff + len);
                }
@@ -6078,9 +6101,9 @@ uc_list(char_u *name, size_t name_len)
 
            do {
                IObuff[len++] = ' ';
-           } while (len < 11);
+           } while (len < 9 - over);
 
-           /* Address Type */
+           // Address Type
            for (j = 0; addr_type_complete[j].expand != -1; ++j)
                if (addr_type_complete[j].expand != ADDR_LINES
                        && addr_type_complete[j].expand == cmd->uc_addr_type)
@@ -6092,9 +6115,9 @@ uc_list(char_u *name, size_t name_len)
 
            do {
                IObuff[len++] = ' ';
-           } while (len < 21);
+           } while (len < 13 - over);
 
-           /* Completion */
+           // Completion
            for (j = 0; command_complete[j].expand != 0; ++j)
                if (command_complete[j].expand == cmd->uc_compl)
                {
@@ -6105,12 +6128,13 @@ uc_list(char_u *name, size_t name_len)
 
            do {
                IObuff[len++] = ' ';
-           } while (len < 35);
+           } while (len < 24 - over);
 
            IObuff[len] = '\0';
            msg_outtrans(IObuff);
 
-           msg_outtrans_special(cmd->uc_rep, FALSE);
+           msg_outtrans_special(cmd->uc_rep, FALSE,
+                                            name_len == 0 ? Columns - 46 : 0);
 #ifdef FEAT_EVAL
            if (p_verbose > 0)
                last_set_msg(cmd->uc_script_ctx);
@@ -6344,9 +6368,8 @@ ex_command(exarg_T *eap)
     end = p;
     name_len = (int)(end - name);
 
-    /* If there is nothing after the name, and no attributes were specified,
-     * we are listing commands
-     */
+    // If there is nothing after the name, and no attributes were specified,
+    // we are listing commands
     p = skipwhite(end);
     if (!has_attr && ends_excmd(*p))
     {
index b8c7b3f3ad5026bfeed870c2b21eb7c669b9a566..e8a1f0f5aae0107d2c897e4c37da9286d718e960 100644 (file)
@@ -4022,7 +4022,7 @@ showmap(
        msg_putchar(' ');
 
     /* Display the LHS.  Get length of what we write. */
-    len = msg_outtrans_special(mp->m_keys, TRUE);
+    len = msg_outtrans_special(mp->m_keys, TRUE, 0);
     do
     {
        msg_putchar(' ');               /* padd with blanks */
@@ -4053,7 +4053,7 @@ showmap(
        if (s != NULL)
        {
            vim_unescape_csi(s);
-           msg_outtrans_special(s, FALSE);
+           msg_outtrans_special(s, FALSE, 0);
            vim_free(s);
        }
     }
index f71ede94560c6f0294ae1b032f17e2d3df3d1acf..da03322bfd1fceba14d1ca2d576a94471cf21dab 100644 (file)
@@ -1214,7 +1214,7 @@ show_menus_recursive(vimmenu_T *menu, int modes, int depth)
                if (*menu->strings[bit] == NUL)
                    msg_puts_attr("<Nop>", HL_ATTR(HLF_8));
                else
-                   msg_outtrans_special(menu->strings[bit], FALSE);
+                   msg_outtrans_special(menu->strings[bit], FALSE, 0);
            }
     }
     else
index fa37df12bb25e27936dafbe31d03ba07dace472a..e18f9526973a942d96d6745c0c851010393e5cde 100644 (file)
@@ -1594,7 +1594,8 @@ msg_make(char_u *arg)
     int
 msg_outtrans_special(
     char_u     *strstart,
-    int                from)   /* TRUE for lhs of a mapping */
+    int                from,   // TRUE for lhs of a mapping
+    int                maxlen) // screen columns, 0 for unlimeted
 {
     char_u     *str = strstart;
     int                retval = 0;
@@ -1614,6 +1615,8 @@ msg_outtrans_special(
        else
            text = (char *)str2special(&str, from);
        len = vim_strsize((char_u *)text);
+       if (maxlen > 0 && retval + len >= maxlen)
+           break;
        /* Highlight special keys */
        msg_puts_attr(text, len > 1
                && (*mb_ptr2len)((char_u *)text) <= 1 ? attr : 0);
index 806de872bc60f6d8a9672705d942229bb53e532c..04b674486503f6e5bd817f045029f1eda21423a7 100644 (file)
@@ -35,7 +35,7 @@ int msg_outtrans_len(char_u *str, int len);
 char_u *msg_outtrans_one(char_u *p, int attr);
 int msg_outtrans_len_attr(char_u *msgstr, int len, int attr);
 void msg_make(char_u *arg);
-int msg_outtrans_special(char_u *strstart, int from);
+int msg_outtrans_special(char_u *strstart, int from, int maxlen);
 char_u *str2special_save(char_u *str, int is_lhs);
 char_u *str2special(char_u **sp, int from);
 void str2specialbuf(char_u *sp, char_u *buf, int len);
index 9d052ab8336195d5e28ace445d6666bbaed940f8..2fcdef1a6ef2e3c8f9a61690abce1ce52fe2ee38 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1201,
 /**/
     1200,
 /**/