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);
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? */
+ // TODO: Give error message?
clear_tv(&rettv);
break;
}
* completion.
*/
compl_opt_refresh_always = FALSE;
+ compl_opt_suppress_empty = FALSE;
if (col < 0)
col = curs_col;
}
}
- /* Show a message about what (completion) mode we're in. */
- showmode();
- if (!shortmess(SHM_COMPLETIONMENU))
+ // Show a message about what (completion) mode we're in.
+ if (!compl_opt_suppress_empty)
{
- if (edit_submode_extra != NULL)
+ showmode();
+ if (!shortmess(SHM_COMPLETIONMENU))
{
- if (!p_smd)
- msg_attr(edit_submode_extra,
- edit_submode_highl < HLF_COUNT
- ? HL_ATTR(edit_submode_highl) : 0);
+ 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"
}
- else
- msg_clr_cmdline(); /* necessary for "noshowmode" */
}
/* Show the popup menu, unless we got interrupted. */
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
\ }
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' ] )
let s:called_completedone = 1
endfunc
-function Test_CompleteDoneDict()
+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 )
+ 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 )
+func s:CompleteDone_CompleteFuncDictNoUserData(findstart, base)
if a:findstart
return 0
endif
let s:called_completedone = 1
endfunc
-function Test_CompleteDoneDictNoUserData()
+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 )
+ 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 )
+func s:CompleteDone_CompleteFuncList(findstart, base)
if a:findstart
return 0
endif
let s:called_completedone = 1
endfunc
-function Test_CompleteDoneList()
+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 )
+ call assert_equal('', v:completed_item[ 'user_data' ])
+ call assert_true(s:called_completedone)
let s:called_completedone = 0
au! CompleteDone