summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0939
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0939')
-rw-r--r--data/vim/patches/8.1.0939400
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 ///