summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-03 21:00:02 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-03 21:00:02 +0100
commitf10997a1543eb0724d882da3678bacd44e647141 (patch)
tree24e970f79ff00a9b0e2d17a7f24ba9d8031837ea /src
parent467c32bd72efea09677f173fef7a3465d9ab7826 (diff)
patch 8.2.0082: when reusing a buffer listeners are not clearedv8.2.0082
Problem: When reusing a buffer listeners are not cleared. (Axel Forsman) Solution: Clear listeners when reusing a buffer. (closes #5431)
Diffstat (limited to 'src')
-rw-r--r--src/buffer.c1
-rw-r--r--src/testdir/test_listener.vim31
-rw-r--r--src/version.c2
3 files changed, 34 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c
index eb6b287728..0a68d484e5 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -979,6 +979,7 @@ free_buffer_stuff(
hash_init(&buf->b_vars->dv_hashtab);
init_changedtick(buf);
CHANGEDTICK(buf) = tick;
+ remove_listeners(buf);
}
#endif
uc_clear(&buf->b_ucmds); // clear local user commands
diff --git a/src/testdir/test_listener.vim b/src/testdir/test_listener.vim
index a7815dc046..a263abadd2 100644
--- a/src/testdir/test_listener.vim
+++ b/src/testdir/test_listener.vim
@@ -295,3 +295,34 @@ func Test_listener_undo_line_number()
delfunc EchoChanges
call listener_remove(lid)
endfunc
+
+func Test_listener_cleared_newbuf()
+ func Listener(bufnr, start, end, added, changes)
+ let g:gotCalled += 1
+ endfunc
+ new
+ " check that listening works
+ let g:gotCalled = 0
+ let lid = listener_add("Listener")
+ call feedkeys("axxx\<Esc>", 'xt')
+ call listener_flush(bufnr())
+ call assert_equal(1, g:gotCalled)
+ %bwipe!
+ let bufnr = bufnr()
+ let b:testing = 123
+ let lid = listener_add("Listener")
+ enew!
+ " check buffer is reused
+ call assert_equal(bufnr, bufnr())
+ call assert_false(exists('b:testing'))
+
+ " check that listening stops when reusing the buffer
+ let g:gotCalled = 0
+ call feedkeys("axxx\<Esc>", 'xt')
+ call listener_flush(bufnr())
+ call assert_equal(0, g:gotCalled)
+ unlet g:gotCalled
+
+ bwipe!
+ delfunc Listener
+endfunc
diff --git a/src/version.c b/src/version.c
index cff754f28d..6dd07bb686 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 82,
+/**/
81,
/**/
80,