mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.1.1486: a listener change is merged even when it adds a line
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)
This commit is contained in:
@@ -186,6 +186,7 @@ check_recorded_changes(
|
|||||||
|| (prev_lnume >= lnum && xtra != 0))
|
|| (prev_lnume >= lnum && xtra != 0))
|
||||||
{
|
{
|
||||||
if (li->li_next == NULL && lnum == prev_lnum
|
if (li->li_next == NULL && lnum == prev_lnum
|
||||||
|
&& xtra == 0
|
||||||
&& col + 1 == (colnr_T)dict_get_number(
|
&& col + 1 == (colnr_T)dict_get_number(
|
||||||
li->li_tv.vval.v_dict, (char_u *)"col"))
|
li->li_tv.vval.v_dict, (char_u *)"col"))
|
||||||
{
|
{
|
||||||
|
@@ -28,9 +28,10 @@ func Test_listening()
|
|||||||
set undolevels& " start new undo block
|
set undolevels& " start new undo block
|
||||||
call append(2, 'two two')
|
call append(2, 'two two')
|
||||||
undo
|
undo
|
||||||
|
call assert_equal([{'lnum': 3, 'end': 3, 'col': 1, 'added': 1}], s:list)
|
||||||
redraw
|
redraw
|
||||||
" the two changes get merged
|
" the two changes are not merged
|
||||||
call assert_equal([{'lnum': 3, 'end': 4, 'col': 1, 'added': 0}], s:list)
|
call assert_equal([{'lnum': 3, 'end': 4, 'col': 1, 'added': -1}], s:list)
|
||||||
1
|
1
|
||||||
|
|
||||||
" Two listeners, both get called. Also check column.
|
" 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},
|
call assert_equal([{'lnum': 3, 'end': 3, 'col': 1, 'added': 1},
|
||||||
\ {'lnum': 1, 'end': 2, 'col': 1, 'added': 0}], s:list)
|
\ {'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 setline(1, ['one one', 'two'])
|
||||||
call listener_flush()
|
call listener_flush()
|
||||||
let s:list = []
|
let s:list = []
|
||||||
call setline(2, 'something')
|
call setline(2, 'something')
|
||||||
call append(1, 'two two')
|
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 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
|
" an insert above a previous change causes a flush
|
||||||
call setline(1, ['one one', 'two'])
|
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([{'lnum': 1, 'end': 1, 'col': 1, 'added': 1}], s:list)
|
||||||
call assert_equal('two two', s:text)
|
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 setline(1, ['one one', 'two'])
|
||||||
call listener_flush()
|
call listener_flush()
|
||||||
let s:list = []
|
let s:list = []
|
||||||
call setline(2, 'something')
|
call setline(2, 'something')
|
||||||
2del
|
2del
|
||||||
call assert_equal([], s:list)
|
call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': 0}], s:list)
|
||||||
call listener_flush()
|
call listener_flush()
|
||||||
call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': -1}], s:list)
|
call assert_equal([{'lnum': 2, 'end': 3, 'col': 1, 'added': -1}], s:list)
|
||||||
|
|
||||||
|
@@ -767,6 +767,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1486,
|
||||||
/**/
|
/**/
|
||||||
1485,
|
1485,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user