]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.1760: extra line break for wrapping output of :args v8.1.1760
authorBram Moolenaar <Bram@vim.org>
Sat, 27 Jul 2019 19:23:45 +0000 (21:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 27 Jul 2019 19:23:45 +0000 (21:23 +0200)
Problem:    Extra line break for wrapping output of :args.
Solution:   Avoid the extra line break. (Daniel Hahler, closes #4737)

src/testdir/test_arglist.vim
src/version.c

index 441373beae93b637eed5528251dab335cbd2fd99..f161d6ec182b76c691846181eb937c4bfda17dd9 100644 (file)
@@ -169,6 +169,25 @@ func Test_argument()
 
   let &hidden = save_hidden
 
+  let save_columns = &columns
+  let &columns = 79
+  exe 'args ' .. join(range(1, 81))
+  call assert_equal(join([
+        \ '',
+        \ '[1] 6   11  16  21  26  31  36  41  46  51  56  61  66  71  76  81  ',
+        \ '2   7   12  17  22  27  32  37  42  47  52  57  62  67  72  77  ',
+        \ '3   8   13  18  23  28  33  38  43  48  53  58  63  68  73  78  ',
+        \ '4   9   14  19  24  29  34  39  44  49  54  59  64  69  74  79  ',
+        \ '5   10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  ',
+        \ ], "\n"),
+        \ execute('args'))
+
+  " No trailing newline with one item per row.
+  let long_arg = repeat('X', 81)
+  exe 'args ' .. long_arg
+  call assert_equal("\n[".long_arg.']', execute('args'))
+  let &columns = save_columns
+
   " Setting argument list should fail when the current buffer has unsaved
   " changes
   %argd
index 2aedc6a273def54dd5f6f99d18a15c1d772b72c8..4b89a31f17545e156b0330b3efa32ab3be3ff417 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1760,
 /**/
     1759,
 /**/
@@ -4418,11 +4420,11 @@ list_in_columns(char_u **items, int size, int current)
 
     if (Columns < width)
     {
-       /* Not enough screen columns - show one per line */
+       // Not enough screen columns - show one per line
        for (i = 0; i < item_count; ++i)
        {
            version_msg_wrap(items[i], i == current);
-           if (msg_col > 0)
+           if (msg_col > 0 && i < item_count - 1)
                msg_putchar('\n');
        }
        return;
@@ -4433,7 +4435,7 @@ list_in_columns(char_u **items, int size, int current)
     ncol = (int) (Columns + 1) / width;
     nrow = item_count / ncol + (item_count % ncol ? 1 : 0);
 
-    // "i" counts columns then rows.  idx counts rows then columns.
+    // "i" counts columns then rows.  "idx" counts rows then columns.
     for (i = 0; !got_int && i < nrow * ncol; ++i)
     {
        int idx = (i / ncol) + (i % ncol) * nrow;
@@ -4467,9 +4469,12 @@ list_in_columns(char_u **items, int size, int current)
        else
        {
            // this row is out of items, thus at the end of the row
-           if (msg_col > 0 && cur_row < nrow)
-               msg_putchar('\n');
-           ++cur_row;
+           if (msg_col > 0)
+           {
+               if (cur_row < nrow)
+                   msg_putchar('\n');
+               ++cur_row;
+           }
        }
     }
 }