diff options
Diffstat (limited to 'data/vim/patches/8.1.1068')
-rw-r--r-- | data/vim/patches/8.1.1068 | 588 |
1 files changed, 0 insertions, 588 deletions
diff --git a/data/vim/patches/8.1.1068 b/data/vim/patches/8.1.1068 deleted file mode 100644 index 48a5c99db..000000000 --- a/data/vim/patches/8.1.1068 +++ /dev/null @@ -1,588 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1068 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.1068 -Problem: Cannot get all the information about current completion. -Solution: Add complete_info(). (Shougo, Hirohito Higashi, closes #4106) -Files: runtime/doc/eval.txt, runtime/doc/insert.txt, - runtime/doc/usr_41.txt, src/edit.c, src/evalfunc.c, - src/proto/edit.pro, src/testdir/test_popup.vim - - -*** ../vim-8.1.1067/runtime/doc/eval.txt 2019-03-26 22:50:19.147698161 +0100 ---- runtime/doc/eval.txt 2019-03-29 12:09:44.357635376 +0100 -*************** -*** 2242,2254 **** - complete({startcol}, {matches}) none set Insert mode completion - complete_add({expr}) Number add completion match - complete_check() Number check for key typed during completion - confirm({msg} [, {choices} [, {default} [, {type}]]]) - Number number of choice picked by user - copy({expr}) any make a shallow copy of {expr} - cos({expr}) Float cosine of {expr} - cosh({expr}) Float hyperbolic cosine of {expr} -! count({list}, {expr} [, {ic} [, {start}]]) -! Number count how many {expr} are in {list} - cscope_connection([{num}, {dbpath} [, {prepend}]]) - Number checks existence of cscope connection - cursor({lnum}, {col} [, {off}]) ---- 2267,2280 ---- - complete({startcol}, {matches}) none set Insert mode completion - complete_add({expr}) Number add completion match - complete_check() Number check for key typed during completion -+ complete_info([{what}]) Dict get current completion information - confirm({msg} [, {choices} [, {default} [, {type}]]]) - Number number of choice picked by user - copy({expr}) any make a shallow copy of {expr} - cos({expr}) Float cosine of {expr} - cosh({expr}) Float hyperbolic cosine of {expr} -! count({comp}, {expr} [, {ic} [, {start}]]) -! Number count how many {expr} are in {comp} - cscope_connection([{num}, {dbpath} [, {prepend}]]) - Number checks existence of cscope connection - cursor({lnum}, {col} [, {off}]) -*************** -*** 3512,3520 **** - Only to be used by the function specified with the - 'completefunc' option. - - *confirm()* - confirm({msg} [, {choices} [, {default} [, {type}]]]) -! Confirm() offers the user a dialog, from which a choice can be - made. It returns the number of the choice. For the first - choice this is 1. - Note: confirm() is only supported when compiled with dialog ---- 3539,3596 ---- - Only to be used by the function specified with the - 'completefunc' option. - -+ *complete_info()* -+ complete_info([{what}]) -+ Returns a Dictionary with information about Insert mode -+ completion. See |ins-completion|. -+ The items are: -+ mode Current completion mode name string. -+ See |completion_info_mode| for the values. -+ pum_visible |TRUE| if popup menu is visible. -+ See |pumvisible()|. -+ items List of completion matches. Each item is a -+ dictionary containing the entries "word", -+ "abbr", "menu", "kind", "info" and "user_data". -+ See |complete-items|. -+ selected Selected item index. First index is zero. -+ Index is -1 if no item is selected (showing -+ typed text only) -+ inserted Inserted string. [NOT IMPLEMENT YET] -+ -+ *complete_info_mode* -+ mode values are: -+ "" Not in completion mode -+ "keyword" Keyword completion |i_CTRL-X_CTRL-N| -+ "ctrl_x" Just pressed CTRL-X |i_CTRL-X| -+ "whole_line" Whole lines |i_CTRL-X_CTRL-L| -+ "files" File names |i_CTRL-X_CTRL-F| -+ "tags" Tags |i_CTRL-X_CTRL-]| -+ "path_defines" Definition completion |i_CTRL-X_CTRL-D| -+ "path_patterns" Include completion |i_CTRL-X_CTRL-I| -+ "dictionary" Dictionary |i_CTRL-X_CTRL-K| -+ "thesaurus" Thesaurus |i_CTRL-X_CTRL-T| -+ "cmdline" Vim Command line |i_CTRL-X_CTRL-V| -+ "function" User defined completion |i_CTRL-X_CTRL-U| -+ "omni" Omni completion |i_CTRL-X_CTRL-O| -+ "spell" Spelling suggestions |i_CTRL-X_s| -+ "eval" |complete()| completion -+ "unknown" Other internal modes -+ -+ If the optional {what} list argument is supplied, then only -+ the items listed in {what} are returned. Unsupported items in -+ {what} are silently ignored. -+ -+ Examples: > -+ " Get all items -+ call complete_info() -+ " Get only 'mode' -+ call complete_info(['mode']) -+ " Get only 'mode' and 'pum_visible' -+ call complete_info(['mode', 'pum_visible']) -+ < - *confirm()* - confirm({msg} [, {choices} [, {default} [, {type}]]]) -! confirm() offers the user a dialog, from which a choice can be - made. It returns the number of the choice. For the first - choice this is 1. - Note: confirm() is only supported when compiled with dialog -*** ../vim-8.1.1067/runtime/doc/insert.txt 2019-01-11 13:02:20.101567912 +0100 ---- runtime/doc/insert.txt 2019-03-29 11:55:56.275979508 +0100 -*************** -*** 642,647 **** ---- 642,648 ---- - not a valid CTRL-X mode command. Valid keys are the CTRL-X command itself, - CTRL-N (next), and CTRL-P (previous). - -+ To get the current completion information, |complete_info()| can be used. - Also see the 'infercase' option if you want to adjust the case of the match. - - *complete_CTRL-E* -*************** -*** 1051,1063 **** - number between zero and the cursor column "col('.')". This involves looking - at the characters just before the cursor and including those characters that - could be part of the completed item. The text between this column and the -! cursor column will be replaced with the matches. - -! Special return values: -! -1 If no completion can be done, the completion will be cancelled with an -! error message. -! -2 To cancel silently and stay in completion mode. -! -3 To cancel silently and leave completion mode. - - On the second invocation the arguments are: - a:findstart 0 ---- 1052,1064 ---- - number between zero and the cursor column "col('.')". This involves looking - at the characters just before the cursor and including those characters that - could be part of the completed item. The text between this column and the -! cursor column will be replaced with the matches. If the returned value is -! larger than the cursor column, the cursor column is used. - -! Negative return values: -! -2 To cancel silently and stay in completion mode. -! -3 To cancel silently and leave completion mode. -! Another negative value: completion starts at the cursor column - - On the second invocation the arguments are: - a:findstart 0 -*** ../vim-8.1.1067/runtime/doc/usr_41.txt 2019-01-11 13:42:31.680331155 +0100 ---- runtime/doc/usr_41.txt 2019-03-29 11:55:56.275979508 +0100 -*************** -*** 829,834 **** ---- 834,840 ---- - complete() set found matches - complete_add() add to found matches - complete_check() check if completion should be aborted -+ complete_info() get current completion information - pumvisible() check if the popup menu is displayed - - Folding: *folding-functions* -*** ../vim-8.1.1067/src/edit.c 2019-03-26 22:46:01.885928372 +0100 ---- src/edit.c 2019-03-29 12:12:58.388217318 +0100 -*************** -*** 15,21 **** - - #ifdef FEAT_INS_EXPAND - /* -! * definitions used for CTRL-X submode - */ - # define CTRL_X_WANT_IDENT 0x100 - ---- 15,23 ---- - - #ifdef FEAT_INS_EXPAND - /* -! * Definitions used for CTRL-X submode. -! * Note: If you change CTRL-X submode, you must also maintain ctrl_x_msgs[] and -! * ctrl_x_mode_names[]. - */ - # define CTRL_X_WANT_IDENT 0x100 - -*************** -*** 40,57 **** - # define CTRL_X_MSG(i) ctrl_x_msgs[(i) & ~CTRL_X_WANT_IDENT] - # define CTRL_X_MODE_LINE_OR_EVAL(m) ((m) == CTRL_X_WHOLE_LINE || (m) == CTRL_X_EVAL) - -! /* Message for CTRL-X mode, index is ctrl_x_mode. */ - static char *ctrl_x_msgs[] = - { -! N_(" Keyword completion (^N^P)"), /* CTRL_X_NORMAL, ^P/^N compl. */ - N_(" ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"), -! NULL, /* CTRL_X_SCROLL: depends on state */ - N_(" Whole line completion (^L^N^P)"), - N_(" File name completion (^F^N^P)"), - N_(" Tag completion (^]^N^P)"), - N_(" Path pattern completion (^N^P)"), - N_(" Definition completion (^D^N^P)"), -! NULL, /* CTRL_X_FINISHED */ - N_(" Dictionary completion (^K^N^P)"), - N_(" Thesaurus completion (^T^N^P)"), - N_(" Command-line completion (^V^N^P)"), ---- 42,59 ---- - # define CTRL_X_MSG(i) ctrl_x_msgs[(i) & ~CTRL_X_WANT_IDENT] - # define CTRL_X_MODE_LINE_OR_EVAL(m) ((m) == CTRL_X_WHOLE_LINE || (m) == CTRL_X_EVAL) - -! // Message for CTRL-X mode, index is ctrl_x_mode. - static char *ctrl_x_msgs[] = - { -! N_(" Keyword completion (^N^P)"), // CTRL_X_NORMAL, ^P/^N compl. - N_(" ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"), -! NULL, // CTRL_X_SCROLL: depends on state - N_(" Whole line completion (^L^N^P)"), - N_(" File name completion (^F^N^P)"), - N_(" Tag completion (^]^N^P)"), - N_(" Path pattern completion (^N^P)"), - N_(" Definition completion (^D^N^P)"), -! NULL, // CTRL_X_FINISHED - N_(" Dictionary completion (^K^N^P)"), - N_(" Thesaurus completion (^T^N^P)"), - N_(" Command-line completion (^V^N^P)"), -*************** -*** 59,67 **** - N_(" Omni completion (^O^N^P)"), - N_(" Spelling suggestion (s^N^P)"), - N_(" Keyword Local completion (^N^P)"), -! NULL, /* CTRL_X_EVAL doesn't use msg. */ - }; - - static char e_hitend[] = N_("Hit end of paragraph"); - # ifdef FEAT_COMPL_FUNC - static char e_complwin[] = N_("E839: Completion function changed window"); ---- 61,90 ---- - N_(" Omni completion (^O^N^P)"), - N_(" Spelling suggestion (s^N^P)"), - N_(" Keyword Local completion (^N^P)"), -! NULL, // CTRL_X_EVAL doesn't use msg. - }; - -+ static char *ctrl_x_mode_names[] = { -+ "keyword", -+ "ctrl_x", -+ "unknown", // CTRL_X_SCROLL -+ "whole_line", -+ "files", -+ "tags", -+ "path_patterns", -+ "path_defines", -+ "unknown", // CTRL_X_FINISHED -+ "dictionary", -+ "thesaurus", -+ "cmdline", -+ "function", -+ "omni", -+ "spell", -+ NULL, // CTRL_X_LOCAL_MSG only used in "ctrl_x_msgs" -+ "eval" -+ }; -+ -+ - static char e_hitend[] = N_("Hit end of paragraph"); - # ifdef FEAT_COMPL_FUNC - static char e_complwin[] = N_("E839: Completion function changed window"); -*************** -*** 163,168 **** ---- 186,192 ---- - static char_u *find_line_end(char_u *ptr); - static void ins_compl_free(void); - static void ins_compl_clear(void); -+ static char_u *ins_compl_mode(void); - static int ins_compl_bs(void); - static int ins_compl_need_restart(void); - static void ins_compl_new_leader(void); -*************** -*** 3525,3530 **** ---- 3549,3656 ---- - return compl_started; - } - -+ -+ /* -+ * Get complete information -+ */ -+ void -+ get_complete_info(list_T *what_list, dict_T *retdict) -+ { -+ 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_INSERTED 0x10 -+ #define CI_WHAT_ALL 0xff -+ int what_flag; -+ -+ if (what_list == NULL) -+ what_flag = CI_WHAT_ALL; -+ else -+ { -+ what_flag = 0; -+ for (item = what_list->lv_first; item != NULL; item = item->li_next) -+ { -+ char_u *what = tv_get_string(&item->li_tv); -+ -+ if (STRCMP(what, "mode") == 0) -+ what_flag |= CI_WHAT_MODE; -+ else if (STRCMP(what, "pum_visible") == 0) -+ what_flag |= CI_WHAT_PUM_VISIBLE; -+ else if (STRCMP(what, "items") == 0) -+ what_flag |= CI_WHAT_ITEMS; -+ else if (STRCMP(what, "selected") == 0) -+ what_flag |= CI_WHAT_SELECTED; -+ else if (STRCMP(what, "inserted") == 0) -+ what_flag |= CI_WHAT_INSERTED; -+ } -+ } -+ -+ if (ret == OK && (what_flag & CI_WHAT_MODE)) -+ ret = dict_add_string(retdict, "mode", ins_compl_mode()); -+ -+ 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_ITEMS)) -+ { -+ list_T *li; -+ dict_T *di; -+ compl_T *match; -+ -+ li = list_alloc(); -+ if (li == NULL) -+ return; -+ ret = dict_add_list(retdict, "items", li); -+ if (ret == OK && compl_first_match != NULL) -+ { -+ match = compl_first_match; -+ do -+ { -+ if (!(match->cp_flags & ORIGINAL_TEXT)) -+ { -+ di = dict_alloc(); -+ if (di == NULL) -+ return; -+ ret = list_append_dict(li, di); -+ if (ret != OK) -+ return; -+ dict_add_string(di, "word", match->cp_str); -+ dict_add_string(di, "abbr", match->cp_text[CPT_ABBR]); -+ dict_add_string(di, "menu", match->cp_text[CPT_MENU]); -+ dict_add_string(di, "kind", match->cp_text[CPT_KIND]); -+ dict_add_string(di, "info", match->cp_text[CPT_INFO]); -+ dict_add_string(di, "user_data", -+ match->cp_text[CPT_USER_DATA]); -+ } -+ match = match->cp_next; -+ } -+ while (match != NULL && match != compl_first_match); -+ } -+ } -+ -+ if (ret == OK && (what_flag & CI_WHAT_SELECTED)) -+ ret = dict_add_number(retdict, "selected", (compl_curr_match != NULL) ? -+ compl_curr_match->cp_number - 1 : -1); -+ -+ // TODO -+ // if (ret == OK && (what_flag & CI_WHAT_INSERTED)) -+ } -+ -+ /* -+ * Return Insert completion mode name string -+ */ -+ static char_u * -+ ins_compl_mode(void) -+ { -+ if (ctrl_x_mode == CTRL_X_NOT_DEFINED_YET || compl_started) -+ return (char_u *)ctrl_x_mode_names[ctrl_x_mode & ~CTRL_X_WANT_IDENT]; -+ -+ return (char_u *)""; -+ } -+ - /* - * Delete one character before the cursor and show the subset of the matches - * that match the word that is now before the cursor. -*** ../vim-8.1.1067/src/evalfunc.c 2019-03-26 22:50:19.151698126 +0100 ---- src/evalfunc.c 2019-03-29 12:15:43.859016653 +0100 -*************** -*** 113,118 **** ---- 113,119 ---- - static void f_complete(typval_T *argvars, typval_T *rettv); - static void f_complete_add(typval_T *argvars, typval_T *rettv); - static void f_complete_check(typval_T *argvars, typval_T *rettv); -+ static void f_complete_info(typval_T *argvars, typval_T *rettv); - #endif - static void f_confirm(typval_T *argvars, typval_T *rettv); - static void f_copy(typval_T *argvars, typval_T *rettv); -*************** -*** 593,598 **** ---- 594,600 ---- - {"complete", 2, 2, f_complete}, - {"complete_add", 1, 1, f_complete_add}, - {"complete_check", 0, 0, f_complete_check}, -+ {"complete_info", 0, 1, f_complete_info}, - #endif - {"confirm", 1, 4, f_confirm}, - {"copy", 1, 1, f_copy}, -*************** -*** 2600,2605 **** ---- 2602,2630 ---- - rettv->vval.v_number = compl_interrupted; - RedrawingDisabled = saved; - } -+ -+ /* -+ * "complete_info()" function -+ */ -+ static void -+ f_complete_info(typval_T *argvars, typval_T *rettv) -+ { -+ list_T *what_list = NULL; -+ -+ if (rettv_dict_alloc(rettv) != OK) -+ return; -+ -+ if (argvars[0].v_type != VAR_UNKNOWN) -+ { -+ if (argvars[0].v_type != VAR_LIST) -+ { -+ emsg(_(e_listreq)); -+ return; -+ } -+ what_list = argvars[0].vval.v_list; -+ } -+ get_complete_info(what_list, rettv->vval.v_dict); -+ } - #endif - - /* -*** ../vim-8.1.1067/src/proto/edit.pro 2019-01-31 13:47:51.126632619 +0100 ---- src/proto/edit.pro 2019-03-29 12:13:26.104015732 +0100 -*************** -*** 18,23 **** ---- 18,24 ---- - char_u *find_word_start(char_u *ptr); - char_u *find_word_end(char_u *ptr); - int ins_compl_active(void); -+ void get_complete_info(list_T *what_list, dict_T *retdict); - int ins_compl_add_tv(typval_T *tv, int dir); - void ins_compl_check_keys(int frequency, int in_compl_func); - int get_literal(void); -*** ../vim-8.1.1067/src/testdir/test_popup.vim 2019-01-06 13:10:46.332499076 +0100 ---- src/testdir/test_popup.vim 2019-03-29 11:55:56.279979474 +0100 -*************** -*** 896,899 **** ---- 896,1000 ---- - endtry - endfunc - -+ func Test_popup_complete_info_01() -+ new -+ inoremap <buffer><F5> <C-R>=complete_info().mode<CR> -+ func s:complTestEval() abort -+ call complete(1, ['aa', 'ab']) -+ return '' -+ endfunc -+ inoremap <buffer><F6> <C-R>=s:complTestEval()<CR> -+ call writefile([ -+ \ 'dummy dummy.txt 1', -+ \], 'Xdummy.txt') -+ setlocal tags=Xdummy.txt -+ setlocal dictionary=Xdummy.txt -+ setlocal thesaurus=Xdummy.txt -+ setlocal omnifunc=syntaxcomplete#Complete -+ setlocal completefunc=syntaxcomplete#Complete -+ setlocal spell -+ for [keys, mode_name] in [ -+ \ ["", ''], -+ \ ["\<C-X>", 'ctrl_x'], -+ \ ["\<C-X>\<C-N>", 'keyword'], -+ \ ["\<C-X>\<C-P>", 'keyword'], -+ \ ["\<C-X>\<C-L>", 'whole_line'], -+ \ ["\<C-X>\<C-F>", 'files'], -+ \ ["\<C-X>\<C-]>", 'tags'], -+ \ ["\<C-X>\<C-D>", 'path_defines'], -+ \ ["\<C-X>\<C-I>", 'path_patterns'], -+ \ ["\<C-X>\<C-K>", 'dictionary'], -+ \ ["\<C-X>\<C-T>", 'thesaurus'], -+ \ ["\<C-X>\<C-V>", 'cmdline'], -+ \ ["\<C-X>\<C-U>", 'function'], -+ \ ["\<C-X>\<C-O>", 'omni'], -+ \ ["\<C-X>s", 'spell'], -+ \ ["\<F6>", 'eval'], -+ \] -+ call feedkeys("i" . keys . "\<F5>\<Esc>", 'tx') -+ call assert_equal(mode_name, getline('.')) -+ %d -+ endfor -+ call delete('Xdummy.txt') -+ bwipe! -+ endfunc -+ -+ func UserDefinedComplete(findstart, base) -+ if a:findstart -+ return 0 -+ else -+ return [ -+ \ { 'word': 'Jan', 'menu': 'January' }, -+ \ { 'word': 'Feb', 'menu': 'February' }, -+ \ { 'word': 'Mar', 'menu': 'March' }, -+ \ { 'word': 'Apr', 'menu': 'April' }, -+ \ { 'word': 'May', 'menu': 'May' }, -+ \ ] -+ endif -+ endfunc -+ -+ func GetCompleteInfo() -+ if empty(g:compl_what) -+ let g:compl_info = complete_info() -+ else -+ let g:compl_info = complete_info(g:compl_what) -+ endif -+ return '' -+ endfunc -+ -+ func Test_popup_complete_info_02() -+ new -+ inoremap <buffer><F5> <C-R>=GetCompleteInfo()<CR> -+ setlocal completefunc=UserDefinedComplete -+ -+ let d = { -+ \ 'mode': 'function', -+ \ 'pum_visible': 1, -+ \ 'items': [ -+ \ {'word': 'Jan', 'menu': 'January', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, -+ \ {'word': 'Feb', 'menu': 'February', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, -+ \ {'word': 'Mar', 'menu': 'March', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, -+ \ {'word': 'Apr', 'menu': 'April', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}, -+ \ {'word': 'May', 'menu': 'May', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''} -+ \ ], -+ \ 'selected': 0, -+ \ } -+ -+ let g:compl_what = [] -+ call feedkeys("i\<C-X>\<C-U>\<F5>", 'tx') -+ call assert_equal(d, g:compl_info) -+ -+ let g:compl_what = ['mode', 'pum_visible', '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 feedkeys("i\<C-X>\<C-U>\<F5>", 'tx') -+ call assert_equal(d, g:compl_info) -+ bwipe! -+ endfunc -+ - " vim: shiftwidth=2 sts=2 expandtab -*** ../vim-8.1.1067/src/version.c 2019-03-29 10:54:17.711209062 +0100 ---- src/version.c 2019-03-29 11:57:29.903220370 +0100 -*************** -*** 777,778 **** ---- 777,780 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1068, - /**/ - --- -Drink wet cement and get really stoned. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 /// |