aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2020-01-26 19:54:26 -0800
committerGitHub <noreply@github.com>2020-01-26 19:54:26 -0800
commitd3a9d75c0462fea7b00e639d1b324bcf08a8b02d (patch)
tree28caf8951b81d9c44129fa9eaae7f76c4d021245
parentb5daee7b8faaa00b83eb17ad231b8dbc417f628c (diff)
parent5ede2766c8d994f9e299288d46cefdd12ffee47f (diff)
downloadrneovim-d3a9d75c0462fea7b00e639d1b324bcf08a8b02d.tar.gz
rneovim-d3a9d75c0462fea7b00e639d1b324bcf08a8b02d.tar.bz2
rneovim-d3a9d75c0462fea7b00e639d1b324bcf08a8b02d.zip
Merge #11772 from janlazo/vim-8.2.0152
vim-patch:8.2.{152,158}
-rw-r--r--runtime/doc/autocmd.txt22
-rw-r--r--src/nvim/auevents.lua1
-rw-r--r--src/nvim/edit.c19
-rw-r--r--src/nvim/testdir/test_ins_complete.vim11
4 files changed, 34 insertions, 19 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 8006a45899..64ca7b6a45 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -358,7 +358,10 @@ Name triggered by ~
|MenuPopup| just before showing the popup menu
|CompleteChanged| after popup menu changed, not fired on popup menu hide
-|CompleteDone| after Insert mode completion is done
+|CompleteDonePre| after Insert mode completion is done, before clearing
+ info
+|CompleteDone| after Insert mode completion is done, after clearing
+ info
|User| to be used in combination with ":doautocmd"
|Signal| after Nvim receives a signal
@@ -577,7 +580,8 @@ ColorSchemePre Before loading a color scheme. |:colorscheme|
CompleteChanged *CompleteChanged*
After each time the Insert mode completion
menu changed. Not fired on popup menu hide,
- use |CompleteDone| for that.
+ use |CompleteDonePre| or |CompleteDone| for
+ that.
Sets these |v:event| keys:
completed_item See |complete-items|.
@@ -594,12 +598,22 @@ CompleteChanged *CompleteChanged*
The size and position of the popup are also
available by calling |pum_getpos()|.
+ *CompleteDonePre*
+CompleteDonePre After Insert mode completion is done. Either
+ when something was completed or abandoning
+ completion. |ins-completion|
+ |complete_info()| can be used, the info is
+ cleared after triggering CompleteDonePre.
+ The |v:completed_item| variable contains
+ information about the completed item.
+
*CompleteDone*
CompleteDone After Insert mode completion is done. Either
when something was completed or abandoning
completion. |ins-completion|
- |complete_info()| can be used, the info is
- cleared after triggering CompleteDone.
+ |complete_info()| cannot be used, the info is
+ cleared before triggering CompleteDone. Use
+ CompleteDonePre if you need it.
|v:completed_item| gives the completed item.
*CursorHold*
diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua
index 96e170a9e1..4391d997a7 100644
--- a/src/nvim/auevents.lua
+++ b/src/nvim/auevents.lua
@@ -31,6 +31,7 @@ return {
'ColorSchemePre', -- before loading a colorscheme
'CompleteChanged', -- after popup menu changed
'CompleteDone', -- after finishing insert complete
+ 'CompleteDonePre', -- idem, before clearing info
'CursorHold', -- cursor in same position for a while
'CursorHoldI', -- idem, in Insert mode
'CursorMoved', -- cursor was moved
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index 68fa99484c..e253905057 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -3594,17 +3594,11 @@ static bool ins_compl_prep(int c)
auto_format(FALSE, TRUE);
- {
- const int new_mode = ctrl_x_mode;
-
- // Trigger the CompleteDone event to give scripts a chance to
- // act upon the completion. Do this before clearing the info,
- // and restore ctrl_x_mode, so that complete_info() can be
- // used.
- ctrl_x_mode = prev_mode;
- ins_apply_autocmds(EVENT_COMPLETEDONE);
- ctrl_x_mode = new_mode;
- }
+ // Trigger the CompleteDonePre event to give scripts a chance to
+ // act upon the completion before clearing the info, and restore
+ // ctrl_x_mode, so that complete_info() can be used.
+ ctrl_x_mode = prev_mode;
+ ins_apply_autocmds(EVENT_COMPLETEDONEPRE);
ins_compl_free();
compl_started = false;
@@ -3630,6 +3624,9 @@ static bool ins_compl_prep(int c)
*/
if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
do_c_expr_indent();
+ // Trigger the CompleteDone event to give scripts a chance to act
+ // upon the end of completion.
+ ins_apply_autocmds(EVENT_COMPLETEDONE);
}
} else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
/* Trigger the CompleteDone event to give scripts a chance to act
diff --git a/src/nvim/testdir/test_ins_complete.vim b/src/nvim/testdir/test_ins_complete.vim
index e6d427db05..f4e6b698c6 100644
--- a/src/nvim/testdir/test_ins_complete.vim
+++ b/src/nvim/testdir/test_ins_complete.vim
@@ -130,7 +130,7 @@ func s:CompleteDone_CheckCompletedItemNone()
let s:called_completedone = 1
endfunc
-function! s:CompleteDone_CheckCompletedItemDict()
+func s:CompleteDone_CheckCompletedItemDict(pre)
call assert_equal( 'aword', v:completed_item[ 'word' ] )
call assert_equal( 'wrd', v:completed_item[ 'abbr' ] )
call assert_equal( 'extra text', v:completed_item[ 'menu' ] )
@@ -138,10 +138,12 @@ function! s:CompleteDone_CheckCompletedItemDict()
call assert_equal( 'W', v:completed_item[ 'kind' ] )
call assert_equal( 'test', v:completed_item[ 'user_data' ] )
- call assert_equal('function', complete_info().mode)
+ if a:pre
+ call assert_equal('function', complete_info().mode)
+ endif
let s:called_completedone = 1
-endfunction
+endfunc
func Test_CompleteDoneNone()
throw 'skipped: Nvim does not support v:none'
@@ -161,7 +163,8 @@ func Test_CompleteDoneNone()
endfunc
func Test_CompleteDoneDict()
- au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict()
+ au CompleteDonePre * :call <SID>CompleteDone_CheckCompletedItemDict(1)
+ au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict(0)
set completefunc=<SID>CompleteDone_CompleteFuncDict
execute "normal a\<C-X>\<C-U>\<C-Y>"