diff options
Diffstat (limited to 'data/vim/patches/8.1.0939')
-rw-r--r-- | data/vim/patches/8.1.0939 | 400 |
1 files changed, 400 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0939 b/data/vim/patches/8.1.0939 new file mode 100644 index 000000000..4201039ed --- /dev/null +++ b/data/vim/patches/8.1.0939 @@ -0,0 +1,400 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0939 +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.0939 +Problem: No completion for sign group names. +Solution: Add completion for sign group names and buffer names. (Yegappan + Lakshmanan, closes #3980) +Files: src/sign.c, src/testdir/test_signs.vim + + +*** ../vim-8.1.0938/src/sign.c 2019-01-24 17:18:37.591462362 +0100 +--- src/sign.c 2019-02-17 14:45:25.699785487 +0100 +*************** +*** 1767,1786 **** + EXP_SUBCMD, // expand :sign sub-commands + EXP_DEFINE, // expand :sign define {name} args + EXP_PLACE, // expand :sign place {id} args + EXP_UNPLACE, // expand :sign unplace" +! EXP_SIGN_NAMES // expand with name of placed signs + } expand_what; + + /* + * Function given to ExpandGeneric() to obtain the sign command + * expansion. + */ + char_u * + get_sign_name(expand_T *xp UNUSED, int idx) + { +- sign_T *sp; +- int current_idx; +- + switch (expand_what) + { + case EXP_SUBCMD: +--- 1767,1831 ---- + EXP_SUBCMD, // expand :sign sub-commands + EXP_DEFINE, // expand :sign define {name} args + EXP_PLACE, // expand :sign place {id} args ++ EXP_LIST, // expand :sign place args + EXP_UNPLACE, // expand :sign unplace" +! EXP_SIGN_NAMES, // expand with name of placed signs +! EXP_SIGN_GROUPS // expand with name of placed sign groups + } expand_what; + + /* ++ * Return the n'th sign name (used for command line completion) ++ */ ++ static char_u * ++ get_nth_sign_name(int idx) ++ { ++ int current_idx; ++ sign_T *sp; ++ ++ // Complete with name of signs already defined ++ current_idx = 0; ++ for (sp = first_sign; sp != NULL; sp = sp->sn_next) ++ if (current_idx++ == idx) ++ return sp->sn_name; ++ return NULL; ++ } ++ ++ /* ++ * Return the n'th sign group name (used for command line completion) ++ */ ++ static char_u * ++ get_nth_sign_group_name(int idx) ++ { ++ int current_idx; ++ int todo; ++ hashitem_T *hi; ++ signgroup_T *group; ++ ++ // Complete with name of sign groups already defined ++ current_idx = 0; ++ todo = (int)sg_table.ht_used; ++ for (hi = sg_table.ht_array; todo > 0; ++hi) ++ { ++ if (!HASHITEM_EMPTY(hi)) ++ { ++ --todo; ++ if (current_idx++ == idx) ++ { ++ group = HI2SG(hi); ++ return group->sg_name; ++ } ++ } ++ } ++ return NULL; ++ } ++ ++ /* + * Function given to ExpandGeneric() to obtain the sign command + * expansion. + */ + char_u * + get_sign_name(expand_T *xp UNUSED, int idx) + { + switch (expand_what) + { + case EXP_SUBCMD: +*************** +*** 1802,1819 **** + }; + return (char_u *)place_arg[idx]; + } + case EXP_UNPLACE: + { + char *unplace_arg[] = { "group=", "file=", "buffer=", NULL }; + return (char_u *)unplace_arg[idx]; + } + case EXP_SIGN_NAMES: +! // Complete with name of signs already defined +! current_idx = 0; +! for (sp = first_sign; sp != NULL; sp = sp->sn_next) +! if (current_idx++ == idx) +! return sp->sn_name; +! return NULL; + default: + return NULL; + } +--- 1847,1869 ---- + }; + return (char_u *)place_arg[idx]; + } ++ case EXP_LIST: ++ { ++ char *list_arg[] = ++ { ++ "group=", "file=", "buffer=", NULL ++ }; ++ return (char_u *)list_arg[idx]; ++ } + case EXP_UNPLACE: + { + char *unplace_arg[] = { "group=", "file=", "buffer=", NULL }; + return (char_u *)unplace_arg[idx]; + } + case EXP_SIGN_NAMES: +! return get_nth_sign_name(idx); +! case EXP_SIGN_GROUPS: +! return get_nth_sign_group_name(idx); + default: + return NULL; + } +*************** +*** 1848,1875 **** + // | + // begin_subcmd_args + begin_subcmd_args = skipwhite(end_subcmd); +- p = skiptowhite(begin_subcmd_args); +- if (*p == NUL) +- { +- // +- // Expand first argument of subcmd when possible. +- // For ":jump {id}" and ":unplace {id}", we could +- // possibly expand the ids of all signs already placed. +- // +- xp->xp_pattern = begin_subcmd_args; +- switch (cmd_idx) +- { +- case SIGNCMD_LIST: +- case SIGNCMD_UNDEFINE: +- // :sign list <CTRL-D> +- // :sign undefine <CTRL-D> +- expand_what = EXP_SIGN_NAMES; +- break; +- default: +- xp->xp_context = EXPAND_NOTHING; +- } +- return; +- } + + // expand last argument of subcmd + +--- 1898,1903 ---- +*************** +*** 1878,1883 **** +--- 1906,1912 ---- + // p + + // Loop until reaching last argument. ++ p = begin_subcmd_args; + do + { + p = skipwhite(p); +*************** +*** 1900,1906 **** + expand_what = EXP_DEFINE; + break; + case SIGNCMD_PLACE: +! expand_what = EXP_PLACE; + break; + case SIGNCMD_JUMP: + case SIGNCMD_UNPLACE: +--- 1929,1947 ---- + expand_what = EXP_DEFINE; + break; + case SIGNCMD_PLACE: +! // List placed signs +! if (VIM_ISDIGIT(*begin_subcmd_args)) +! // :sign place {id} {args}... +! expand_what = EXP_PLACE; +! else +! // :sign place {args}... +! expand_what = EXP_LIST; +! break; +! case SIGNCMD_LIST: +! case SIGNCMD_UNDEFINE: +! // :sign list <CTRL-D> +! // :sign undefine <CTRL-D> +! expand_what = EXP_SIGN_NAMES; + break; + case SIGNCMD_JUMP: + case SIGNCMD_UNPLACE: +*************** +*** 1917,1933 **** + switch (cmd_idx) + { + case SIGNCMD_DEFINE: +! if (STRNCMP(last, "texthl", p - last) == 0 +! || STRNCMP(last, "linehl", p - last) == 0) + xp->xp_context = EXPAND_HIGHLIGHT; +! else if (STRNCMP(last, "icon", p - last) == 0) + xp->xp_context = EXPAND_FILES; + else + xp->xp_context = EXPAND_NOTHING; + break; + case SIGNCMD_PLACE: +! if (STRNCMP(last, "name", p - last) == 0) + expand_what = EXP_SIGN_NAMES; + else + xp->xp_context = EXPAND_NOTHING; + break; +--- 1958,1987 ---- + switch (cmd_idx) + { + case SIGNCMD_DEFINE: +! if (STRNCMP(last, "texthl", 6) == 0 +! || STRNCMP(last, "linehl", 6) == 0) + xp->xp_context = EXPAND_HIGHLIGHT; +! else if (STRNCMP(last, "icon", 4) == 0) + xp->xp_context = EXPAND_FILES; + else + xp->xp_context = EXPAND_NOTHING; + break; + case SIGNCMD_PLACE: +! if (STRNCMP(last, "name", 4) == 0) + expand_what = EXP_SIGN_NAMES; ++ else if (STRNCMP(last, "group", 5) == 0) ++ expand_what = EXP_SIGN_GROUPS; ++ else if (STRNCMP(last, "file", 4) == 0) ++ xp->xp_context = EXPAND_BUFFERS; ++ else ++ xp->xp_context = EXPAND_NOTHING; ++ break; ++ case SIGNCMD_UNPLACE: ++ case SIGNCMD_JUMP: ++ if (STRNCMP(last, "group", 5) == 0) ++ expand_what = EXP_SIGN_GROUPS; ++ else if (STRNCMP(last, "file", 4) == 0) ++ xp->xp_context = EXPAND_BUFFERS; + else + xp->xp_context = EXPAND_NOTHING; + break; +*** ../vim-8.1.0938/src/testdir/test_signs.vim 2019-01-17 17:36:42.495509219 +0100 +--- src/testdir/test_signs.vim 2019-02-17 14:45:25.699785487 +0100 +*************** +*** 210,222 **** + call assert_equal('"sign define Sign linehl=SpellBad SpellCap ' . + \ 'SpellLocal SpellRare', @:) + +! call writefile(['foo'], 'XsignOne') +! call writefile(['bar'], 'XsignTwo') + call feedkeys(":sign define Sign icon=Xsig\<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign define Sign icon=XsignOne XsignTwo', @:) +- call delete('XsignOne') +- call delete('XsignTwo') + + call feedkeys(":sign undefine \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign undefine Sign1 Sign2', @:) + +--- 210,225 ---- + call assert_equal('"sign define Sign linehl=SpellBad SpellCap ' . + \ 'SpellLocal SpellRare', @:) + +! call feedkeys(":sign define Sign texthl=Spell\<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign define Sign texthl=SpellBad SpellCap ' . +! \ 'SpellLocal SpellRare', @:) +! +! call writefile(repeat(["Sun is shining"], 30), "XsignOne") +! call writefile(repeat(["Sky is blue"], 30), "XsignTwo") + call feedkeys(":sign define Sign icon=Xsig\<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign define Sign icon=XsignOne XsignTwo', @:) + ++ " Test for completion of arguments to ':sign undefine' + call feedkeys(":sign undefine \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign undefine Sign1 Sign2', @:) + +*************** +*** 227,243 **** +--- 230,299 ---- + call feedkeys(":sign place 1 name=\<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign place 1 name=Sign1 Sign2', @:) + ++ edit XsignOne ++ sign place 1 name=Sign1 line=5 ++ sign place 1 name=Sign1 group=g1 line=10 ++ edit XsignTwo ++ sign place 1 name=Sign2 group=g2 line=15 ++ ++ " Test for completion of group= and file= arguments to ':sign place' ++ call feedkeys(":sign place 1 name=Sign1 file=Xsign\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place 1 name=Sign1 file=XsignOne XsignTwo', @:) ++ call feedkeys(":sign place 1 name=Sign1 group=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place 1 name=Sign1 group=g1 g2', @:) ++ ++ " Test for completion of arguments to 'sign place' without sign identifier ++ call feedkeys(":sign place \<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place buffer= file= group=', @:) ++ call feedkeys(":sign place file=Xsign\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place file=XsignOne XsignTwo', @:) ++ call feedkeys(":sign place group=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place group=g1 g2', @:) ++ call feedkeys(":sign place group=g1 file=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign place group=g1 file=XsignOne XsignTwo', @:) ++ ++ " Test for completion of arguments to ':sign unplace' + call feedkeys(":sign unplace 1 \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign unplace 1 buffer= file= group=', @:) ++ call feedkeys(":sign unplace 1 file=Xsign\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign unplace 1 file=XsignOne XsignTwo', @:) ++ call feedkeys(":sign unplace 1 group=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign unplace 1 group=g1 g2', @:) ++ call feedkeys(":sign unplace 1 group=g2 file=Xsign\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign unplace 1 group=g2 file=XsignOne XsignTwo', @:) + ++ " Test for completion of arguments to ':sign list' + call feedkeys(":sign list \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign list Sign1 Sign2', @:) + ++ " Test for completion of arguments to ':sign jump' + call feedkeys(":sign jump 1 \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign jump 1 buffer= file= group=', @:) ++ call feedkeys(":sign jump 1 file=Xsign\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign jump 1 file=XsignOne XsignTwo', @:) ++ call feedkeys(":sign jump 1 group=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign jump 1 group=g1 g2', @:) ++ ++ " Error cases ++ call feedkeys(":sign here\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"sign here', @:) ++ call feedkeys(":sign define Sign here=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal("\"sign define Sign here=\<C-A>", @:) ++ call feedkeys(":sign place 1 here=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal("\"sign place 1 here=\<C-A>", @:) ++ call feedkeys(":sign jump 1 here=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal("\"sign jump 1 here=\<C-A>", @:) ++ call feedkeys(":sign here there\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal("\"sign here there\<C-A>", @:) ++ call feedkeys(":sign here there=\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal("\"sign here there=\<C-A>", @:) + ++ sign unplace * group=* + sign undefine Sign1 + sign undefine Sign2 ++ enew ++ call delete('XsignOne') ++ call delete('XsignTwo') + endfunc + + func Test_sign_invalid_commands() +*** ../vim-8.1.0938/src/version.c 2019-02-17 14:10:52.105754303 +0100 +--- src/version.c 2019-02-17 14:46:51.643306843 +0100 +*************** +*** 781,782 **** +--- 781,784 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 939, + /**/ + +-- +Scientists decoded the first message from an alien civilization: + SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR +SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT +YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER +STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE +ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS +MAXIMUM! IT REALLY WORKS! + + /// 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 /// |