changeset 8445:dd2e2bd69d0e v7.4.1513

commit https://github.com/vim/vim/commit/41e0f2f48f541eb2c8eb5620d3f1d270eb979154 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Mar 8 14:44:42 2016 +0100 patch 7.4.1513 Problem: "J" fails if there are not enough lines. (Christian Neukirchen) Solution: Reduce the count, only fail on the last line.
author Christian Brabandt <cb@256bit.org>
date Tue, 08 Mar 2016 14:45:05 +0100
parents 865b2c46e625
children cef7be734b6e
files src/normal.c src/testdir/test_alot.vim src/testdir/test_join.vim src/version.c
diffstat 4 files changed, 30 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -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);
     }
 }
 
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -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
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_join.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1513,
+/**/
     1512,
 /**/
     1511,