summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-06-06 22:50:35 +0200
committerBram Moolenaar <Bram@vim.org>2019-06-06 22:50:35 +0200
commit125370459178b0ca3acc98edca774c390c9b9fa4 (patch)
tree296eefc52a5cd8cc65b934ef40abafab9ea12653
parent773a97c254d02784079fb3b20447620412588850 (diff)
downloadvim-git-125370459178b0ca3acc98edca774c390c9b9fa4.tar.gz
patch 8.1.1486: a listener change is merged even when it adds a linev8.1.1486
Problem: A listener change is merged even when it adds a line. (Paul Jolly) Solution: Do not merge a change that adds or removes a line. (closes #4490)
-rw-r--r--src/change.c1
-rw-r--r--src/testdir/test_listener.vim16
-rw-r--r--src/version.c2
3 files changed, 12 insertions, 7 deletions
diff --git a/src/change.c b/src/change.c
index 07985ee62..fcaa5708a 100644
--- a/src/change.c
+++ b/src/change.c
@@ -186,6 +186,7 @@ check_recorded_changes(
|| (prev_lnume >= lnum && xtra != 0))
{
if (li->li_next == NULL && lnum == prev_lnum
+ && xtra == 0
&& col + 1 == (colnr_T)dict_get_number(
li->li_tv.vval.v_dict, (char_u *)"col"))
{
diff --git a/src/testdir/test_listener.vim b/src/testdir/test_listener.vim
index 16c4c0022..a318d527a 100644
--- a/src/testdir/test_listener.vim
+++ b/src/testdir/test_listener.vim
@@ -28,9 +28,10 @@ func Test_listening()
set undolevels& " start new undo block
call append(2, 'two two')
undo
+ call assert_equal([{'lnum': 3, 'end': 3, 'col': 1, 'added': 1}], s:list)
redraw
- " the two changes get merged
- call assert_equal([{'lnum': 3, 'end': 4, 'col': 1, 'added': 0}], s:list)
+ " the two changes are not merged
+ call assert_equal([{'lnum': 3, 'end': 4, 'col': 1, 'added': -1}], s:list)
1
" Two listeners, both get called. Also check column.
@@ -65,15 +66,16 @@ func Test_listening()
call assert_equal([{'lnum': 3, 'end': 3, 'col': 1, 'added': 1},
\ {'lnum': 1, 'end': 2, 'col': 1, 'added': 0}], s:list)
- " an insert just above a previous change that was the last one gets merged
+ " an insert just above a previous change that was the last one does not get
+ " merged
call setline(1, ['one one', 'two'])
call listener_flush()
let s:list = []
call setline(2, 'something')
call append(1, 'two two')
- call assert_equal([], s:list)
+ call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': 0}], s:list)
call listener_flush()
- call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': 1}], s:list)
+ call assert_equal([{'lnum': 2, 'end': 2, 'col': 1, 'added': 1}], s:list)
" an insert above a previous change causes a flush
call setline(1, ['one one', 'two'])
@@ -86,13 +88,13 @@ func Test_listening()
call assert_equal([{'lnum': 1, 'end': 1, 'col': 1, 'added': 1}], s:list)
call assert_equal('two two', s:text)
- " a delete at a previous change that was the last one gets merged
+ " a delete at a previous change that was the last one does not get merged
call setline(1, ['one one', 'two'])
call listener_flush()
let s:list = []
call setline(2, 'something')
2del
- call assert_equal([], s:list)
+ call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': 0}], s:list)
call listener_flush()
call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': -1}], s:list)
diff --git a/src/version.c b/src/version.c
index 4c44f2e3c..bfda61873 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1486,
+/**/
1485,
/**/
1484,