changeset 29501:69d24e60f4f8 v9.0.0092

patch 9.0.0092: plugins cannot change v:completed_item Commit: https://github.com/vim/vim/commit/61021aa318ca4c4a6b0182ee93388b2e9b5eefba Author: Shougo Matsushita <Shougo.Matsu@gmail.com> Date: Wed Jul 27 14:40:00 2022 +0100 patch 9.0.0092: plugins cannot change v:completed_item Problem: Plugins cannot change v:completed_item. Solution: Make v:completed_item writeable. (Shougo Matsushita, closes #10801)
author Bram Moolenaar <Bram@vim.org>
date Wed, 27 Jul 2022 15:45:03 +0200
parents 57d7422e07fa
children f4aee5967fc6
files runtime/doc/eval.txt src/evalvars.c src/testdir/test_ins_complete.vim src/version.c
diffstat 4 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2005,6 +2005,8 @@ v:completed_item
 		|Dictionary| containing the |complete-items| for the most
 		recently completed word after |CompleteDone|.  The
 		|Dictionary| is empty if the completion failed.
+		Note: Plugins can modify the value to emulate the builtin
+		|CompleteDone| event behavior.
 
 					*v:count* *count-variable*
 v:count		The count given for the last Normal mode command.  Can be used
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -111,7 +111,7 @@ static struct vimvar
     {VV_NAME("oldfiles",	 VAR_LIST), &t_list_string, 0},
     {VV_NAME("windowid",	 VAR_NUMBER), NULL, VV_RO},
     {VV_NAME("progpath",	 VAR_STRING), NULL, VV_RO},
-    {VV_NAME("completed_item",	 VAR_DICT), &t_dict_string, VV_RO},
+    {VV_NAME("completed_item",	 VAR_DICT), &t_dict_string, 0},
     {VV_NAME("option_new",	 VAR_STRING), NULL, VV_RO},
     {VV_NAME("option_old",	 VAR_STRING), NULL, VV_RO},
     {VV_NAME("option_oldlocal",	 VAR_STRING), NULL, VV_RO},
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -387,6 +387,19 @@ func Test_CompleteDone_undo()
   au! CompleteDone
 endfunc
 
+func Test_CompleteDone_modify()
+  let value = {
+        \ 'word': '',
+        \ 'abbr': '',
+        \ 'menu': '',
+        \ 'info': '',
+        \ 'kind': '',
+        \ 'user_data': '',
+        \ }
+  let v:completed_item = value
+  call assert_equal(v:completed_item, value)
+endfunc
+
 func CompleteTest(findstart, query)
   if a:findstart
     return col('.')
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    92,
+/**/
     91,
 /**/
     90,