aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/edit.c
diff options
context:
space:
mode:
authorJason Felice <jason.m.felice@gmail.com>2018-08-08 20:51:49 -0700
committerJason Felice <jason.m.felice@gmail.com>2018-08-09 16:46:01 -0700
commit0a8be9f8ef1e23a375b3a35ec06734f205cfd181 (patch)
tree2285602a55b0613b4091cfa7d0d867d023d57f55 /src/nvim/edit.c
parentcf9dd7a3f473c5d523e7f248bfc6f83904fff74b (diff)
downloadrneovim-0a8be9f8ef1e23a375b3a35ec06734f205cfd181.tar.gz
rneovim-0a8be9f8ef1e23a375b3a35ec06734f205cfd181.tar.bz2
rneovim-0a8be9f8ef1e23a375b3a35ec06734f205cfd181.zip
vim-patch:8.1.0057: popup menu displayed wrong when using autocmd
Problem: Popup menu displayed wrong when using autocmd. Solution: Use aucmd_prepbuf(). Force updating status line if the popup menu is going to be redrawn anyway. (Christian Brabandt, closes vim/vim#3009) https://github.com/vim/vim/commit/6ba3ec1bace67513a352326864cebc16b3c5bc56
Diffstat (limited to 'src/nvim/edit.c')
-rw-r--r--src/nvim/edit.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 0d99aa8fb2..7279110444 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -1390,7 +1390,12 @@ ins_redraw (
if (ready && has_event(EVENT_TEXTCHANGEDI)
&& curbuf->b_last_changedtick != buf_get_changedtick(curbuf)
&& !pum_visible()) {
+ aco_save_T aco;
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, false, curbuf);
+ aucmd_restbuf(&aco);
curbuf->b_last_changedtick = buf_get_changedtick(curbuf);
}
@@ -1400,8 +1405,13 @@ ins_redraw (
if (ready && has_event(EVENT_TEXTCHANGEDP)
&& curbuf->b_last_changedtick_pum != buf_get_changedtick(curbuf)
&& pum_visible()) {
- apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, false, curbuf);
- curbuf->b_last_changedtick_pum = buf_get_changedtick(curbuf);
+ aco_save_T aco;
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, false, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick_pum = buf_get_changedtick(curbuf);
}
if (must_redraw)