]> granicus.if.org Git - vim/commitdiff
patch 7.4.1513 v7.4.1513
authorBram Moolenaar <Bram@vim.org>
Tue, 8 Mar 2016 13:44:42 +0000 (14:44 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 8 Mar 2016 13:44:42 +0000 (14:44 +0100)
Problem:    "J" fails if there are not enough lines. (Christian Neukirchen)
Solution:   Reduce the count, only fail on the last line.

src/normal.c
src/testdir/test_alot.vim
src/testdir/test_join.vim [new file with mode: 0644]
src/version.c

index b57191ae07ffba791f19e8b37d18fe5530b9a6ec..7f0d8bd74ccfbb6a8599430e9b36dc90eda4b75c 100644 (file)
@@ -9213,13 +9213,20 @@ nv_join(cmdarg_T *cap)
            cap->count0 = 2;        /* default for join is two lines! */
        if (curwin->w_cursor.lnum + cap->count0 - 1 >
                                                   curbuf->b_ml.ml_line_count)
-           clearopbeep(cap->oap);  /* beyond last line */
-       else
        {
-           prep_redo(cap->oap->regname, cap->count0,
-                        NUL, cap->cmdchar, NUL, NUL, cap->nchar);
-           (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE);
+           /* can't join when on the last line */
+           if (cap->count0 <= 2)
+           {
+               clearopbeep(cap->oap);
+               return;
+           }
+           cap->count0 = curbuf->b_ml.ml_line_count
+                                                 - curwin->w_cursor.lnum + 1;
        }
+
+       prep_redo(cap->oap->regname, cap->count0,
+                                    NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+       (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE, TRUE);
     }
 }
 
index 3ceece32d9eff5df0ef72867f1f022ca5850aca1..d7718ff6d09196aac7b8d56fef04254d82b3b4e1 100644 (file)
@@ -6,6 +6,7 @@ source test_cursor_func.vim
 source test_delete.vim
 source test_expand.vim
 source test_glob2regpat.vim
+source test_join.vim
 source test_lispwords.vim
 source test_menu.vim
 source test_reltime.vim
diff --git a/src/testdir/test_join.vim b/src/testdir/test_join.vim
new file mode 100644 (file)
index 0000000..8a028f1
--- /dev/null
@@ -0,0 +1,13 @@
+" Test for joining lines.
+
+func Test_join_with_count()
+  new
+  call setline(1, ['one', 'two', 'three', 'four'])
+  normal J
+  call assert_equal('one two', getline(1))
+  %del
+  call setline(1, ['one', 'two', 'three', 'four'])
+  normal 10J
+  call assert_equal('one two three four', getline(1))
+  quit!
+endfunc
index eb9c48667f0d89d62e7cdf691ca1d3cc6b033382..2a233131fa68cfd98150f18cd1bf5ad9e84ed106 100644 (file)
@@ -743,6 +743,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1513,
 /**/
     1512,
 /**/