Patch 8.1.0716
Problem: Get warning message when 'completefunc' returns nothing.
Solution: Allow for returning v:none to suppress the warning message.
(Yasuhiro Matsumoto, closes #3789)
Files: runtime/doc/insert.txt, src/edit.c,
src/testdir/test_ins_complete.vim
*** ../vim-8.1.0715/runtime/doc/insert.txt 2018-05-17 13:41:41.000000000
+0200
--- runtime/doc/insert.txt 2019-01-11 12:51:28.486353875 +0100
***************
*** 1076,1081 ****
--- 1076,1085 ----
The only value currently recognized is "always", the
effect is that the function is called whenever the
leading text is changed.
+
+ If you want to suppress the warning message for an empty result, return
+ v:none. This is useful to implement asynchronous completion with complete().
+
Other items are ignored.
For acting upon end of completion, see the |CompleteDone| autocommand event.
*** ../vim-8.1.0715/src/edit.c 2019-01-09 20:51:00.321398815 +0100
--- src/edit.c 2019-01-11 12:53:41.697357871 +0100
***************
*** 150,155 ****
--- 150,156 ----
static expand_T compl_xp;
static int compl_opt_refresh_always = FALSE;
+ static int compl_opt_suppress_empty = FALSE;
static void ins_ctrl_x(void);
static int has_compl_option(int dict_opt);
***************
*** 4247,4254 ****
case VAR_DICT:
matchdict = rettv.vval.v_dict;
break;
default:
! /* TODO: Give error message? */
clear_tv(&rettv);
break;
}
--- 4248,4259 ----
case VAR_DICT:
matchdict = rettv.vval.v_dict;
break;
+ case VAR_SPECIAL:
+ if (rettv.vval.v_number == VVAL_NONE)
+ compl_opt_suppress_empty = TRUE;
+ // FALLTHROUGH
default:
! // TODO: Give error message?
clear_tv(&rettv);
break;
}
***************
*** 5611,5616 ****
--- 5616,5622 ----
* completion.
*/
compl_opt_refresh_always = FALSE;
+ compl_opt_suppress_empty = FALSE;
if (col < 0)
col = curs_col;
***************
*** 5860,5878 ****
}
}
! /* Show a message about what (completion) mode we're in. */
! showmode();
! if (!shortmess(SHM_COMPLETIONMENU))
! {
! if (edit_submode_extra != NULL)
! {
! if (!p_smd)
! msg_attr(edit_submode_extra,
! edit_submode_highl < HLF_COUNT
! ? HL_ATTR(edit_submode_highl) : 0);
}
- else
- msg_clr_cmdline(); /* necessary for "noshowmode" */
}
/* Show the popup menu, unless we got interrupted. */
--- 5866,5887 ----
}
}
! // Show a message about what (completion) mode we're in.
! if (!compl_opt_suppress_empty)
! {
! showmode();
! if (!shortmess(SHM_COMPLETIONMENU))
! {
! if (edit_submode_extra != NULL)
! {
! if (!p_smd)
! msg_attr(edit_submode_extra,
! edit_submode_highl < HLF_COUNT
! ? HL_ATTR(edit_submode_highl) : 0);
! }
! else
! msg_clr_cmdline(); // necessary for "noshowmode"
}
}
/* Show the popup menu, unless we got interrupted. */
*** ../vim-8.1.0715/src/testdir/test_ins_complete.vim 2019-01-09
23:00:57.997176121 +0100
--- src/testdir/test_ins_complete.vim 2019-01-11 12:55:51.700396748 +0100
***************
*** 142,147 ****
--- 142,155 ----
delfunc CompleteFunc
endfunc
+ func s:CompleteDone_CompleteFuncNone( findstart, base )
+ if a:findstart
+ return 0
+ endif
+
+ return v:none
+ endfunc
+
func s:CompleteDone_CompleteFuncDict( findstart, base )
if a:findstart
return 0
***************
*** 161,166 ****
--- 169,178 ----
\ }
endfunc
+ func s:CompleteDone_CheckCompletedItemNone()
+ let s:called_completedone = 1
+ endfunc
+
func s:CompleteDone_CheckCompletedItemDict()
call assert_equal( 'aword', v:completed_item[ 'word' ] )
call assert_equal( 'wrd', v:completed_item[ 'abbr' ] )
***************
*** 172,192 ****
let s:called_completedone = 1
endfunc
! function Test_CompleteDoneDict()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict()
set completefunc=<SID>CompleteDone_CompleteFuncDict
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal( 'test', v:completed_item[ 'user_data' ] )
! call assert_true( s:called_completedone )
let s:called_completedone = 0
au! CompleteDone
endfunc
! func s:CompleteDone_CompleteFuncDictNoUserData( findstart, base )
if a:findstart
return 0
endif
--- 184,217 ----
let s:called_completedone = 1
endfunc
! func Test_CompleteDoneNone()
! au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemNone()
!
! set completefunc=<SID>CompleteDone_CompleteFuncNone
! execute "normal a\<C-X>\<C-U>\<C-Y>"
! set completefunc&
!
! call assert_true(s:called_completedone)
!
! let s:called_completedone = 0
! au! CompleteDone
! endfunc
!
! func Test_CompleteDoneDict()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict()
set completefunc=<SID>CompleteDone_CompleteFuncDict
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal('test', v:completed_item[ 'user_data' ])
! call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
endfunc
! func s:CompleteDone_CompleteFuncDictNoUserData(findstart, base)
if a:findstart
return 0
endif
***************
*** 215,235 ****
let s:called_completedone = 1
endfunc
! function Test_CompleteDoneDictNoUserData()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDictNoUserData()
set completefunc=<SID>CompleteDone_CompleteFuncDictNoUserData
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal( '', v:completed_item[ 'user_data' ] )
! call assert_true( s:called_completedone )
let s:called_completedone = 0
au! CompleteDone
endfunc
! func s:CompleteDone_CompleteFuncList( findstart, base )
if a:findstart
return 0
endif
--- 240,260 ----
let s:called_completedone = 1
endfunc
! func Test_CompleteDoneDictNoUserData()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDictNoUserData()
set completefunc=<SID>CompleteDone_CompleteFuncDictNoUserData
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal('', v:completed_item[ 'user_data' ])
! call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
endfunc
! func s:CompleteDone_CompleteFuncList(findstart, base)
if a:findstart
return 0
endif
***************
*** 248,262 ****
let s:called_completedone = 1
endfunc
! function Test_CompleteDoneList()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemList()
set completefunc=<SID>CompleteDone_CompleteFuncList
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal( '', v:completed_item[ 'user_data' ] )
! call assert_true( s:called_completedone )
let s:called_completedone = 0
au! CompleteDone
--- 273,287 ----
let s:called_completedone = 1
endfunc
! func Test_CompleteDoneList()
au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemList()
set completefunc=<SID>CompleteDone_CompleteFuncList
execute "normal a\<C-X>\<C-U>\<C-Y>"
set completefunc&
! call assert_equal('', v:completed_item[ 'user_data' ])
! call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone
*** ../vim-8.1.0715/src/version.c 2019-01-11 11:55:12.930066044 +0100
--- src/version.c 2019-01-11 12:52:49.509746564 +0100
***************
*** 801,802 ****
--- 801,804 ----
{ /* Add new patch number below this line */
+ /**/
+ 716,
/**/
--
Although the scythe isn't pre-eminent among the weapons of war, anyone who
has been on the wrong end of, say, a peasants' revolt will know that in
skilled hands it is fearsome.
-- (Terry Pratchett, Mort)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.