diff options
author | Jason Felice <jason.m.felice@gmail.com> | 2018-08-08 20:51:49 -0700 |
---|---|---|
committer | Jason Felice <jason.m.felice@gmail.com> | 2018-08-09 16:46:01 -0700 |
commit | 0a8be9f8ef1e23a375b3a35ec06734f205cfd181 (patch) | |
tree | 2285602a55b0613b4091cfa7d0d867d023d57f55 /src/nvim/edit.c | |
parent | cf9dd7a3f473c5d523e7f248bfc6f83904fff74b (diff) | |
download | rneovim-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.c | 14 |
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) |