Returns a |Dictionary| with information about Insert mode
completion. See |ins-completion|.
The items are:
- mode Current completion mode name string.
- See |complete_info_mode| for the values.
- pum_visible |TRUE| if popup menu is visible.
- See |pumvisible()|.
+ completed Return a dictionary containing the entries of
+ the currently selected index item.
items List of all completion candidates. Each item
is a dictionary containing the entries "word",
"abbr", "menu", "kind", "info" and
and "items" are in "what", the returned list
will still be named "items", but each item
will have an additional "match" field.
+ mode Current completion mode name string.
+ See |complete_info_mode| for the values.
+ preinserted_text
+ The actual text that is pre-inserted, see
+ |preinserted()|.
+ pum_visible |TRUE| if popup menu is visible.
+ See |pumvisible()|.
selected Selected item index. First index is zero.
Index is -1 if no item is selected (showing
typed text only, or the last completion after
no item is selected when using the <Up> or
<Down> keys)
- completed Return a dictionary containing the entries of
- the currently selected index item.
*complete_info_mode*
mode values are:
{
int ret = OK;
listitem_T *item;
-#define CI_WHAT_MODE 0x01
-#define CI_WHAT_PUM_VISIBLE 0x02
-#define CI_WHAT_ITEMS 0x04
-#define CI_WHAT_SELECTED 0x08
-#define CI_WHAT_COMPLETED 0x10
-#define CI_WHAT_MATCHES 0x20
-#define CI_WHAT_ALL 0xff
+#define CI_WHAT_MODE 0x01
+#define CI_WHAT_PUM_VISIBLE 0x02
+#define CI_WHAT_ITEMS 0x04
+#define CI_WHAT_SELECTED 0x08
+#define CI_WHAT_COMPLETED 0x10
+#define CI_WHAT_MATCHES 0x20
+#define CI_WHAT_PREINSERTED_TEXT 0x40
+#define CI_WHAT_ALL 0xff
int what_flag;
if (what_list == NULL)
what_flag |= CI_WHAT_SELECTED;
else if (STRCMP(what, "completed") == 0)
what_flag |= CI_WHAT_COMPLETED;
+ else if (STRCMP(what, "preinserted_text") == 0)
+ what_flag |= CI_WHAT_PREINSERTED_TEXT;
else if (STRCMP(what, "matches") == 0)
what_flag |= CI_WHAT_MATCHES;
}
if (ret == OK && (what_flag & CI_WHAT_PUM_VISIBLE))
ret = dict_add_number(retdict, "pum_visible", pum_visible());
+ if (ret == OK && (what_flag & CI_WHAT_PREINSERTED_TEXT))
+ {
+ char_u *line = ml_get_curline();
+ int len = compl_ins_end_col - curwin->w_cursor.col;
+
+ ret = dict_add_string_len(retdict, "preinserted_text",
+ (len > 0) ? line + curwin->w_cursor.col : (char_u *)"", len);
+ }
+
if (ret == OK && (what_flag & (CI_WHAT_ITEMS | CI_WHAT_SELECTED
| CI_WHAT_MATCHES | CI_WHAT_COMPLETED)))
{
set completeopt=menuone
set completefunc=CompleteTest
call feedkeys("i\<C-X>\<C-U>\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
- call assert_equal("matched{'pum_visible': 1, 'mode': 'function', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
+ call assert_equal("matched{'preinserted_text': '', 'pum_visible': 1, 'mode': 'function', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
%d
set complete=.,FCompleteTest
call feedkeys("i\<C-N>\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
- call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
+ call assert_equal("matched{'preinserted_text': '', 'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
%d
set complete=.,F
call feedkeys("i\<C-N>\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
- call assert_equal("matched{'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
+ call assert_equal("matched{'preinserted_text': '', 'pum_visible': 1, 'mode': 'keyword', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1))
set completeopt&
set complete&
set completefunc&
set completefunc=CompleteInfoUserDefinedFn
call feedkeys("i\<C-X>\<C-U>" . a:mvmt . "\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : ''
- call assert_equal(completed. "{'pum_visible': 1, 'mode': 'function', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
+ call assert_equal(completed. "{'preinserted_text': '', 'pum_visible': 1, 'mode': 'function', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
%d
set complete=.,FCompleteInfoUserDefinedFn
call feedkeys("i\<C-N>" . a:mvmt . "\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : ''
- call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
+ call assert_equal(completed. "{'preinserted_text': '', 'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
%d
set complete=.,F
call feedkeys("i\<C-N>" . a:mvmt . "\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx")
let completed = a:idx != -1 ? ['foo', 'bar', 'baz', 'qux']->get(a:idx) : ''
- call assert_equal(completed. "{'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
+ call assert_equal(completed. "{'preinserted_text': '', 'pum_visible': 1, 'mode': 'keyword', 'selected': " . a:idx . ", 'items': " . items . "}", getline(1))
bwipe!
set completeopt& completefunc& complete&
endfunc
call DoTest("f", 'foobar', 2)
call assert_equal(1, g:preinserted)
+ " complete_info()
+ %delete
+ func GetPreinsert()
+ let g:cinfo = complete_info(['preinserted_text'])
+ return ""
+ endfunc
+ inoremap <buffer><F6> <C-R>=GetPreinsert()<CR>
+ call setline(1, ["foo_bar_xyz", "foo__xyz"])
+
+ set completeopt& completeopt+=preinsert
+ call feedkeys("G4li\<F6>\<C-Y>", 'tx')
+ call assert_equal("bar_xyz", g:cinfo.preinserted_text)
+
+ set completeopt& completeopt+=longest
+ call feedkeys("Gof\<F6>\<ESC>", 'tx')
+ call assert_equal("oo_bar_xyz", g:cinfo.preinserted_text)
+ unlet g:cinfo
+ delfunc GetPreinsert
+ set completeopt&
+
" Undo
%delete _
let &l:undolevels = &l:undolevels
\ {'word': 'Apr', 'menu': 'April', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''},
\ {'word': 'May', 'menu': 'May', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}
\ ],
+ \ 'preinserted_text': '',
\ 'selected': 0,
\ }
call feedkeys("i\<C-X>\<C-U>\<F5>", 'tx')
call assert_equal(d, g:compl_info)
- let g:compl_what = ['mode', 'pum_visible', 'selected']
+ let g:compl_what = ['mode', 'pum_visible', 'preinserted_text', 'selected']
call remove(d, 'items')
call feedkeys("i\<C-X>\<C-U>\<F5>", 'tx')
call assert_equal(d, g:compl_info)
let g:compl_what = ['mode']
call remove(d, 'selected')
call remove(d, 'pum_visible')
+ call remove(d, 'preinserted_text')
call feedkeys("i\<C-X>\<C-U>\<F5>", 'tx')
call assert_equal(d, g:compl_info)
bwipe!
\ 'mode': '',
\ 'pum_visible': 0,
\ 'items': [],
+ \ 'preinserted_text': '',
\ 'selected': -1,
\ }
call assert_equal( d, complete_info() )
def Test_complete_info()
v9.CheckSourceDefAndScriptFailure(['complete_info("")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1'])
v9.CheckSourceDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<any>', 'E1211: List required for argument 1'])
- assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info())
+ assert_equal({'pum_visible': 0, 'mode': '', 'preinserted_text': '', 'selected': -1, 'items': []}, complete_info())
assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
enddef
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1876,
/**/
1875,
/**/