Skip to content

Commit 0fb286e

Browse files
committed
patch 8.1.1681: insert stray "{" when listener gets buffer line
Problem: Insert stray "{" when listener gets buffer line. (Paul Jolly) Solution: Flush the cached line after invoking listeners. (closes #4455)
1 parent 63d0dad commit 0fb286e

3 files changed

Lines changed: 31 additions & 1 deletion

File tree

src/memline.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2836,8 +2836,10 @@ ml_append_int(
28362836

28372837
#ifdef FEAT_EVAL
28382838
// When inserting above recorded changes: flush the changes before changing
2839-
// the text.
2839+
// the text. Then flush the cached line, it may become invalid.
28402840
may_invoke_listeners(buf, lnum + 1, lnum + 1, 1);
2841+
if (curbuf->b_ml.ml_line_lnum != 0)
2842+
ml_flush_line(curbuf);
28412843
#endif
28422844

28432845
#ifdef FEAT_TEXT_PROP

src/testdir/test_listener.vim

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,3 +242,29 @@ func Test_listener_garbage_collect()
242242
delfunc MyListener
243243
bwipe!
244244
endfunc
245+
246+
" This verifies the fix for issue #4455
247+
func Test_listener_caches_buffer_line()
248+
new
249+
inoremap <silent> <CR> <CR><Esc>O
250+
251+
function EchoChanges(bufnr, start, end, added, changes)
252+
for l:change in a:changes
253+
let text = getbufline(a:bufnr, l:change.lnum, l:change.end-1+l:change.added)
254+
endfor
255+
endfunction
256+
let lid = listener_add("EchoChanges")
257+
set autoindent
258+
set cindent
259+
260+
call setline(1, ["{", "\tif true {}", "}"])
261+
exe "normal /{}\nl"
262+
call feedkeys("i\r\e", 'xt')
263+
call assert_equal(["{", "\tif true {", "", "\t}", "}"], getline(1, 5))
264+
265+
bwipe!
266+
delfunc EchoChanges
267+
call listener_remove(lid)
268+
iunmap <CR>
269+
set nocindent
270+
endfunc

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,8 @@ static char *(features[]) =
777777

778778
static int included_patches[] =
779779
{ /* Add new patch number below this line */
780+
/**/
781+
1681,
780782
/**/
781783
1680,
782784
/**/

0 commit comments

Comments
 (0)