summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/normal.c17
-rw-r--r--src/testdir/test_alot.vim1
-rw-r--r--src/testdir/test_join.vim13
-rw-r--r--src/version.c2
4 files changed, 28 insertions, 5 deletions
diff --git a/src/normal.c b/src/normal.c
index b57191ae0..7f0d8bd74 100644
--- 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);
}
}
diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim
index 3ceece32d..d7718ff6d 100644
--- 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
diff --git a/src/testdir/test_join.vim b/src/testdir/test_join.vim
new file mode 100644
index 000000000..8a028f1e5
--- /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
diff --git a/src/version.c b/src/version.c
index eb9c48667..2a233131f 100644
--- 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,