summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/autocmd.txt23
-rw-r--r--src/autocmd.c1
-rw-r--r--src/insexpand.c12
-rw-r--r--src/testdir/test_ins_complete.vim9
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
6 files changed, 35 insertions, 13 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 89ba5750d..0dc2fffea 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -374,7 +374,10 @@ Name triggered by ~
|MenuPopup| just before showing the popup menu
|CompleteChanged| after Insert mode completion menu changed
-|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"
@@ -589,8 +592,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. Never triggered
- recursively.
+ use |CompleteDonePre| or |CompleteDone| for
+ that. Never triggered recursively.
Sets these |v:event| keys:
completed_item See |complete-items|.
@@ -606,12 +609,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.
The |v:completed_item| variable contains
information about the completed item.
diff --git a/src/autocmd.c b/src/autocmd.c
index 13aa065ec..dce23b897 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -114,6 +114,7 @@ static struct event_name
{"ColorSchemePre", EVENT_COLORSCHEMEPRE},
{"CompleteChanged", EVENT_COMPLETECHANGED},
{"CompleteDone", EVENT_COMPLETEDONE},
+ {"CompleteDonePre", EVENT_COMPLETEDONEPRE},
{"CursorHold", EVENT_CURSORHOLD},
{"CursorHoldI", EVENT_CURSORHOLDI},
{"CursorMoved", EVENT_CURSORMOVED},
diff --git a/src/insexpand.c b/src/insexpand.c
index e3c811a50..0be20092a 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -2061,12 +2061,11 @@ ins_compl_prep(int c)
auto_format(FALSE, TRUE);
- // 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.
+ // 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_COMPLETEDONE);
+ ins_apply_autocmds(EVENT_COMPLETEDONEPRE);
ins_compl_free();
compl_started = FALSE;
@@ -2092,6 +2091,9 @@ ins_compl_prep(int c)
if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
do_c_expr_indent();
#endif
+ // 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)
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index ef5ac72ae..77045f4d0 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -175,7 +175,7 @@ func s:CompleteDone_CheckCompletedItemNone()
let s:called_completedone = 1
endfunc
-func 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' ] )
@@ -183,7 +183,9 @@ func 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
endfunc
@@ -205,7 +207,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>"
diff --git a/src/version.c b/src/version.c
index 739169f86..7447918c0 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 */
/**/
+ 158,
+/**/
157,
/**/
156,
diff --git a/src/vim.h b/src/vim.h
index 9402c4ecf..23e53747a 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1303,6 +1303,7 @@ enum auto_event
EVENT_COLORSCHEMEPRE, // before loading a colorscheme
EVENT_COMPLETECHANGED, // after completion popup menu changed
EVENT_COMPLETEDONE, // after finishing insert complete
+ EVENT_COMPLETEDONEPRE, // idem, before clearing info
EVENT_CURSORHOLD, // cursor in same position for a while
EVENT_CURSORHOLDI, // idem, in Insert mode
EVENT_CURSORMOVED, // cursor was moved