diff options
Diffstat (limited to 'data/vim/patches/8.1.0658')
-rw-r--r-- | data/vim/patches/8.1.0658 | 1382 |
1 files changed, 1382 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0658 b/data/vim/patches/8.1.0658 new file mode 100644 index 000000000..6048cc5fd --- /dev/null +++ b/data/vim/patches/8.1.0658 @@ -0,0 +1,1382 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0658 +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.0658 +Problem: Deleting signs and completion for :sign is insufficient. +Solution: Add deleting signs in a specified or any group from the current + cursor location. Add group and priority to sign command + completion. Add tests for different sign unplace commands. Update + help text. Add tests for sign jump with group. Update help for + sign jump. (Yegappan Lakshmanan, closes #3731) +Files: runtime/doc/sign.txt, src/buffer.c, src/evalfunc.c, src/ex_cmds.c, + src/netbeans.c, src/proto/buffer.pro, src/proto/ex_cmds.pro, + src/testdir/test_signs.vim + + +*** ../vim-8.1.0657/runtime/doc/sign.txt 2018-12-21 15:16:57.475579814 +0100 +--- runtime/doc/sign.txt 2018-12-29 18:36:00.268781805 +0100 +*************** +*** 251,263 **** + all the files it appears in. + + :sign unplace * +! Remove all placed signs in the global group. + + :sign unplace * group=* +! Remove all placed signs in all the groups. + + :sign unplace +! Remove the placed sign at the cursor position. + + + LISTING PLACED SIGNS *:sign-place-list* +--- 251,274 ---- + all the files it appears in. + + :sign unplace * +! Remove placed signs in the global group from all the files. +! +! :sign unplace * group={group} +! Remove placed signs in group {group} from all the files. + + :sign unplace * group=* +! Remove placed signs in all the groups from all the files. + + :sign unplace +! Remove a placed sign at the cursor position. If multiple signs +! are placed in the line, then only one is removed. +! +! :sign unplace group={group} +! Remove a placed sign in group {group} at the cursor +! position. +! +! :sign unplace group=* +! Remove a placed sign in any group at the cursor position. + + + LISTING PLACED SIGNS *:sign-place-list* +*************** +*** 271,286 **** + :sign place group={group} file={fname} + List signs in group {group} placed in file {fname}. + + :sign place buffer={nr} + List signs placed in buffer {nr}. + + :sign place group={group} buffer={nr} + List signs in group {group} placed in buffer {nr}. + +! :sign place List placed signs in all files. + + :sign place group={group} +! List placed signs in all sign groups in all the files. + + + JUMPING TO A SIGN *:sign-jump* *E157* +--- 282,306 ---- + :sign place group={group} file={fname} + List signs in group {group} placed in file {fname}. + ++ :sign place group=* file={fname} ++ List signs in all the groups placed in file {fname}. ++ + :sign place buffer={nr} + List signs placed in buffer {nr}. + + :sign place group={group} buffer={nr} + List signs in group {group} placed in buffer {nr}. + +! :sign place group=* buffer={nr} +! List signs in all the groups placed in buffer {nr}. +! +! :sign place List placed signs in the global group in all files. + + :sign place group={group} +! List placed signs with sign group {group} in all files. +! +! :sign place group=* +! List placed signs in all sign groups in all files. + + + JUMPING TO A SIGN *:sign-jump* *E157* +*************** +*** 292,300 **** +--- 312,326 ---- + If the file isn't displayed in window and the current file can + not be |abandon|ed this fails. + ++ :sign jump {id} group={group} file={fname} ++ Same but jump to the sign in group {group} ++ + :sign jump {id} buffer={nr} *E934* + Same, but use buffer {nr}. This fails if buffer {nr} does not + have a name. + ++ :sign jump {id} group={group} buffer={nr} ++ Same but jump to the sign in group {group} ++ + + vim:tw=78:ts=8:noet:ft=help:norl: +*** ../vim-8.1.0657/src/buffer.c 2018-12-27 00:28:27.497299324 +0100 +--- src/buffer.c 2018-12-29 18:38:43.291325605 +0100 +*************** +*** 6077,6086 **** + int + sign_in_group(signlist_T *sign, char_u *group) + { +! return ((group != NULL && STRCMP(group, "*") == 0) || +! (group == NULL && sign->group == NULL) || +! (group != NULL && sign->group != NULL && +! STRCMP(group, sign->group->sg_name) == 0)); + } + + /* +--- 6077,6086 ---- + int + sign_in_group(signlist_T *sign, char_u *group) + { +! return ((group != NULL && STRCMP(group, "*") == 0) +! || (group == NULL && sign->group == NULL) +! || (group != NULL && sign->group != NULL +! && STRCMP(group, sign->group->sg_name) == 0)); + } + + /* +*************** +*** 6207,6212 **** +--- 6207,6213 ---- + linenr_T + buf_delsign( + buf_T *buf, // buffer sign is stored in ++ linenr_T atlnum, // sign at this line, 0 - at any line + int id, // sign id + char_u *group) // sign group + { +*************** +*** 6220,6226 **** + for (sign = buf->b_signlist; sign != NULL; sign = next) + { + next = sign->next; +! if ((id == 0 || sign->id == id) && sign_in_group(sign, group)) + + { + *lastp = next; +--- 6221,6229 ---- + for (sign = buf->b_signlist; sign != NULL; sign = next) + { + next = sign->next; +! if ((id == 0 || sign->id == id) && +! (atlnum == 0 || sign->lnum == atlnum) && +! sign_in_group(sign, group)) + + { + *lastp = next; +*************** +*** 6230,6237 **** + if (sign->group != NULL) + sign_group_unref(sign->group->sg_name); + vim_free(sign); + // Check whether only one sign needs to be deleted +! if (group == NULL || (*group != '*' && id != 0)) + break; + } + else +--- 6233,6246 ---- + if (sign->group != NULL) + sign_group_unref(sign->group->sg_name); + vim_free(sign); ++ update_debug_sign(buf, lnum); + // Check whether only one sign needs to be deleted +! // If deleting a sign with a specific identifer in a particular +! // group or deleting any sign at a particular line number, delete +! // only one sign. +! if (group == NULL +! || (*group != '*' && id != 0) +! || (*group == '*' && atlnum != 0)) + break; + } + else +*************** +*** 6272,6288 **** + + /* + * Return the sign at line 'lnum' in buffer 'buf'. Returns NULL if a sign is +! * not found at the line. + */ + static signlist_T * + buf_getsign_at_line( + buf_T *buf, // buffer whose sign we are searching for +! linenr_T lnum) // line number of sign + { + signlist_T *sign; // a sign in the signlist + + FOR_ALL_SIGNS_IN_BUF(buf, sign) +! if (sign->lnum == lnum) + return sign; + + return NULL; +--- 6281,6298 ---- + + /* + * Return the sign at line 'lnum' in buffer 'buf'. Returns NULL if a sign is +! * not found at the line. If 'groupname' is NULL, searches in the global group. + */ + static signlist_T * + buf_getsign_at_line( + buf_T *buf, // buffer whose sign we are searching for +! linenr_T lnum, // line number of sign +! char_u *groupname) // sign group name + { + signlist_T *sign; // a sign in the signlist + + FOR_ALL_SIGNS_IN_BUF(buf, sign) +! if (sign->lnum == lnum && sign_in_group(sign, groupname)) + return sign; + + return NULL; +*************** +*** 6312,6322 **** + int + buf_findsign_id( + buf_T *buf, // buffer whose sign we are searching for +! linenr_T lnum) // line number of sign + { + signlist_T *sign; // a sign in the signlist + +! sign = buf_getsign_at_line(buf, lnum); + if (sign != NULL) + return sign->id; + +--- 6322,6333 ---- + int + buf_findsign_id( + buf_T *buf, // buffer whose sign we are searching for +! linenr_T lnum, // line number of sign +! char_u *groupname) // sign group name + { + signlist_T *sign; // a sign in the signlist + +! sign = buf_getsign_at_line(buf, lnum, groupname); + if (sign != NULL) + return sign->id; + +*************** +*** 6401,6416 **** + } + + /* +! * Delete all signs in all buffers. + */ + void +! buf_delete_all_signs(void) + { + buf_T *buf; /* buffer we are checking for signs */ + + FOR_ALL_BUFFERS(buf) + if (buf->b_signlist != NULL) +! buf_delete_signs(buf, (char_u *)"*"); + } + + /* +--- 6412,6427 ---- + } + + /* +! * Delete all the signs in the specified group in all the buffers. + */ + void +! buf_delete_all_signs(char_u *groupname) + { + buf_T *buf; /* buffer we are checking for signs */ + + FOR_ALL_BUFFERS(buf) + if (buf->b_signlist != NULL) +! buf_delete_signs(buf, groupname); + } + + /* +*** ../vim-8.1.0657/src/evalfunc.c 2018-12-27 23:44:34.797953474 +0100 +--- src/evalfunc.c 2018-12-29 18:36:00.272781771 +0100 +*************** +*** 11600,11611 **** + { + // Delete the sign in all the buffers + FOR_ALL_BUFFERS(buf) +! if (sign_unplace(sign_id, group, buf) == OK) + rettv->vval.v_number = 0; + } + else + { +! if (sign_unplace(sign_id, group, buf) == OK) + rettv->vval.v_number = 0; + } + vim_free(group); +--- 11600,11611 ---- + { + // Delete the sign in all the buffers + FOR_ALL_BUFFERS(buf) +! if (sign_unplace(sign_id, group, buf, 0) == OK) + rettv->vval.v_number = 0; + } + else + { +! if (sign_unplace(sign_id, group, buf, 0) == OK) + rettv->vval.v_number = 0; + } + vim_free(group); +*** ../vim-8.1.0657/src/ex_cmds.c 2018-12-27 00:28:27.497299324 +0100 +--- src/ex_cmds.c 2018-12-29 18:36:00.272781771 +0100 +*************** +*** 7895,7901 **** + * Unplace the specified sign + */ + int +! sign_unplace(int sign_id, char_u *sign_group, buf_T *buf) + { + if (sign_id == 0) + { +--- 7895,7901 ---- + * Unplace the specified sign + */ + int +! sign_unplace(int sign_id, char_u *sign_group, buf_T *buf, linenr_T atlnum) + { + if (sign_id == 0) + { +*************** +*** 7908,7923 **** + linenr_T lnum; + + // Delete only the specified signs +! lnum = buf_delsign(buf, sign_id, sign_group); + if (lnum == 0) + return FAIL; +- update_debug_sign(buf, lnum); + } + + return OK; + } + + /* + * ":sign" command + */ + void +--- 7908,7937 ---- + linenr_T lnum; + + // Delete only the specified signs +! lnum = buf_delsign(buf, atlnum, sign_id, sign_group); + if (lnum == 0) + return FAIL; + } + + return OK; + } + + /* ++ * Unplace the sign at the current cursor line. ++ */ ++ static void ++ sign_unplace_at_cursor(char_u *groupname) ++ { ++ int id = -1; ++ ++ id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum, groupname); ++ if (id > 0) ++ sign_unplace(id, groupname, curwin->w_buffer, curwin->w_cursor.lnum); ++ else ++ EMSG(_("E159: Missing sign number")); ++ } ++ ++ /* + * ":sign" command + */ + void +*************** +*** 8047,8060 **** + sign_list_placed(NULL, NULL); + } + else if (idx == SIGNCMD_UNPLACE) +- { + /* ":sign unplace": remove placed sign at cursor */ +! id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum); +! if (id > 0) +! sign_unplace(id, NULL, curwin->w_buffer); +! else +! EMSG(_("E159: Missing sign number")); +! } + else + EMSG(_(e_argreq)); + return; +--- 8061,8068 ---- + sign_list_placed(NULL, NULL); + } + else if (idx == SIGNCMD_UNPLACE) + /* ":sign unplace": remove placed sign at cursor */ +! sign_unplace_at_cursor(NULL); + else + EMSG(_(e_argreq)); + return; +*************** +*** 8063,8069 **** + if (idx == SIGNCMD_UNPLACE && arg[0] == '*' && arg[1] == NUL) + { + /* ":sign unplace *": remove all placed signs */ +! buf_delete_all_signs(); + return; + } + +--- 8071,8077 ---- + if (idx == SIGNCMD_UNPLACE && arg[0] == '*' && arg[1] == NUL) + { + /* ":sign unplace *": remove all placed signs */ +! buf_delete_all_signs(NULL); + return; + } + +*************** +*** 8084,8090 **** + { + /* ":sign unplace {id}": remove placed sign by number */ + FOR_ALL_BUFFERS(buf) +! sign_unplace(id, NULL, buf); + return; + } + } +--- 8092,8098 ---- + { + /* ":sign unplace {id}": remove placed sign by number */ + FOR_ALL_BUFFERS(buf) +! sign_unplace(id, NULL, buf, 0); + return; + } + } +*************** +*** 8183,8189 **** + } + else if (idx == SIGNCMD_JUMP) + { +! /* ":sign jump {id} file={fname}" */ + if (lnum >= 0 || sign_name != NULL || buf == NULL) + EMSG(_(e_invarg)); + else if ((lnum = buf_findsign(buf, id, group)) > 0) +--- 8191,8198 ---- + } + else if (idx == SIGNCMD_JUMP) + { +! // ":sign jump {id} file={fname}" +! // ":sign jump {id} group={group} file={fname}" + if (lnum >= 0 || sign_name != NULL || buf == NULL) + EMSG(_(e_invarg)); + else if ((lnum = buf_findsign(buf, id, group)) > 0) +*************** +*** 8225,8231 **** + { + if (buf != NULL) + // ":sign unplace * file={fname}" +! sign_unplace(0, group, buf); + else + // ":sign unplace * group=*": remove all placed signs + FOR_ALL_BUFFERS(buf) +--- 8234,8240 ---- + { + if (buf != NULL) + // ":sign unplace * file={fname}" +! sign_unplace(0, group, buf, 0); + else + // ":sign unplace * group=*": remove all placed signs + FOR_ALL_BUFFERS(buf) +*************** +*** 8238,8251 **** + // ":sign unplace {id} file={fname}" + // ":sign unplace {id} group={group} file={fname}" + // ":sign unplace {id} group=* file={fname}" +! sign_unplace(id, group, buf); + else +! // ":sign unplace {id} group={group}": +! // ":sign unplace {id} group=*": +! // remove all placed signs in this group. +! FOR_ALL_BUFFERS(buf) +! if (buf->b_signlist != NULL) +! sign_unplace(id, group, buf); + } + } + /* idx == SIGNCMD_PLACE */ +--- 8247,8272 ---- + // ":sign unplace {id} file={fname}" + // ":sign unplace {id} group={group} file={fname}" + // ":sign unplace {id} group=* file={fname}" +! sign_unplace(id, group, buf, 0); + else +! { +! if (id == -1) +! { +! // ":sign unplace group={group}": +! // ":sign unplace group=*": +! // remove sign in the current line in specified group +! sign_unplace_at_cursor(group); +! } +! else +! { +! // ":sign unplace {id} group={group}": +! // ":sign unplace {id} group=*": +! // remove all placed signs in this group. +! FOR_ALL_BUFFERS(buf) +! if (buf->b_signlist != NULL) +! sign_unplace(id, group, buf, 0); +! } +! } + } + } + /* idx == SIGNCMD_PLACE */ +*************** +*** 8581,8593 **** + { + char *place_arg[] = + { +! "line=", "name=", "file=", "buffer=", NULL + }; + return (char_u *)place_arg[idx]; + } + case EXP_UNPLACE: + { +! char *unplace_arg[] = { "file=", "buffer=", NULL }; + return (char_u *)unplace_arg[idx]; + } + case EXP_SIGN_NAMES: +--- 8602,8615 ---- + { + char *place_arg[] = + { +! "line=", "name=", "group=", "priority=", "file=", +! "buffer=", NULL + }; + 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: +*** ../vim-8.1.0657/src/netbeans.c 2018-12-21 15:16:57.479579788 +0100 +--- src/netbeans.c 2018-12-29 18:36:00.272781771 +0100 +*************** +*** 1251,1262 **** + /* delete signs from the lines being deleted */ + for (i = del_from_lnum; i <= del_to_lnum; i++) + { +! int id = buf_findsign_id(buf->bufp, (linenr_T)i); + if (id > 0) + { + nbdebug((" Deleting sign %d on line %d\n", + id, i)); +! buf_delsign(buf->bufp, id, NULL); + } + else + { +--- 1251,1262 ---- + /* delete signs from the lines being deleted */ + for (i = del_from_lnum; i <= del_to_lnum; i++) + { +! int id = buf_findsign_id(buf->bufp, (linenr_T)i, NULL); + if (id > 0) + { + nbdebug((" Deleting sign %d on line %d\n", + id, i)); +! buf_delsign(buf->bufp, 0, id, NULL); + } + else + { +*** ../vim-8.1.0657/src/proto/buffer.pro 2018-12-27 00:28:27.501299292 +0100 +--- src/proto/buffer.pro 2018-12-29 18:40:08.310566333 +0100 +*************** +*** 69,91 **** + void switch_to_win_for_buf(buf_T *buf, win_T **save_curwinp, tabpage_T **save_curtabp, bufref_T *save_curbuf); + void restore_win_for_buf(win_T *save_curwin, tabpage_T *save_curtab, bufref_T *save_curbuf); + int find_win_for_buf(buf_T *buf, win_T **wp, tabpage_T **tp); +- void buf_addsign(buf_T *buf, int id, char_u *group, int prio, linenr_T lnum, int typenr); +- linenr_T buf_change_sign_type(buf_T *buf, int markId, char_u *group, int typenr); +- int buf_getsigntype(buf_T *buf, linenr_T lnum, int type); +- linenr_T buf_delsign(buf_T *buf, int id, char_u *group); +- int buf_findsign(buf_T *buf, int id, char_u *group); +- #ifdef FEAT_SIGNS + void init_signs(void); + int sign_group_get_next_signid(buf_T *buf, char_u *groupname); + int sign_in_group(signlist_T *sign, char_u *group); + dict_T *sign_get_info(signlist_T *sign); + signlist_T *buf_getsign_with_id(buf_T *buf, int id, char_u *group); +! #endif +! int buf_findsign_id(buf_T *buf, linenr_T lnum); + int buf_findsigntype_id(buf_T *buf, linenr_T lnum, int typenr); + int buf_signcount(buf_T *buf, linenr_T lnum); + void buf_delete_signs(buf_T *buf, char_u *group); +! void buf_delete_all_signs(void); + void sign_list_placed(buf_T *rbuf, char_u *sign_group); + void sign_mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after); + void set_buflisted(int on); +--- 69,89 ---- + void switch_to_win_for_buf(buf_T *buf, win_T **save_curwinp, tabpage_T **save_curtabp, bufref_T *save_curbuf); + void restore_win_for_buf(win_T *save_curwin, tabpage_T *save_curtab, bufref_T *save_curbuf); + int find_win_for_buf(buf_T *buf, win_T **wp, tabpage_T **tp); + void init_signs(void); + int sign_group_get_next_signid(buf_T *buf, char_u *groupname); + int sign_in_group(signlist_T *sign, char_u *group); + dict_T *sign_get_info(signlist_T *sign); ++ void buf_addsign(buf_T *buf, int id, char_u *groupname, int prio, linenr_T lnum, int typenr); ++ linenr_T buf_change_sign_type(buf_T *buf, int markId, char_u *group, int typenr); ++ int buf_getsigntype(buf_T *buf, linenr_T lnum, int type); ++ linenr_T buf_delsign(buf_T *buf, linenr_T atlnum, int id, char_u *group); ++ int buf_findsign(buf_T *buf, int id, char_u *group); + signlist_T *buf_getsign_with_id(buf_T *buf, int id, char_u *group); +! int buf_findsign_id(buf_T *buf, linenr_T lnum, char_u *groupname); + int buf_findsigntype_id(buf_T *buf, linenr_T lnum, int typenr); + int buf_signcount(buf_T *buf, linenr_T lnum); + void buf_delete_signs(buf_T *buf, char_u *group); +! void buf_delete_all_signs(char_u *groupname); + void sign_list_placed(buf_T *rbuf, char_u *sign_group); + void sign_mark_adjust(linenr_T line1, linenr_T line2, long amount, long amount_after); + void set_buflisted(int on); +*** ../vim-8.1.0657/src/proto/ex_cmds.pro 2018-12-21 15:16:57.479579788 +0100 +--- src/proto/ex_cmds.pro 2018-12-29 18:40:16.218495713 +0100 +*************** +*** 54,77 **** + void ex_exusage(exarg_T *eap); + void ex_viusage(exarg_T *eap); + void ex_helptags(exarg_T *eap); + void ex_sign(exarg_T *eap); + void sign_gui_started(void); + int sign_get_attr(int typenr, int line); + char_u *sign_get_text(int typenr); + void *sign_get_image(int typenr); + char_u *sign_typenr2name(int typenr); + void free_signs(void); +- void free_signs(void); + char_u *get_sign_name(expand_T *xp, int idx); + void set_context_in_sign_cmd(expand_T *xp, char_u *arg); + void ex_smile(exarg_T *eap); + void ex_drop(exarg_T *eap); + char_u *skip_vimgrep_pat(char_u *p, char_u **s, int *flags); + void ex_oldfiles(exarg_T *eap); +- int sign_define_by_name(char_u *name, char_u *icon, char_u *linehl, char_u *text, char_u *texthl); +- int sign_undefine_by_name(char_u *name); +- void sign_getlist(char_u *name, list_T *retlist); +- int sign_place(int *sign_id, char_u *group, char_u *sign_name, buf_T *buf, linenr_T lnum, int prio); +- int sign_unplace(int id, char_u *group, buf_T *buf); +- void sign_get_placed(buf_T *buf, linenr_T lnum, int id, char_u *group, list_T *retlist); + /* vim: set ft=c : */ +--- 54,76 ---- + void ex_exusage(exarg_T *eap); + void ex_viusage(exarg_T *eap); + void ex_helptags(exarg_T *eap); ++ int sign_define_by_name(char_u *name, char_u *icon, char_u *linehl, char_u *text, char_u *texthl); ++ int sign_undefine_by_name(char_u *name); ++ int sign_place(int *sign_id, char_u *sign_group, char_u *sign_name, buf_T *buf, linenr_T lnum, int prio); ++ int sign_unplace(int sign_id, char_u *sign_group, buf_T *buf, linenr_T atlnum); + void ex_sign(exarg_T *eap); ++ void sign_getlist(char_u *name, list_T *retlist); ++ void sign_get_placed(buf_T *buf, linenr_T lnum, int sign_id, char_u *sign_group, list_T *retlist); + void sign_gui_started(void); + int sign_get_attr(int typenr, int line); + char_u *sign_get_text(int typenr); + void *sign_get_image(int typenr); + char_u *sign_typenr2name(int typenr); + void free_signs(void); + char_u *get_sign_name(expand_T *xp, int idx); + void set_context_in_sign_cmd(expand_T *xp, char_u *arg); + void ex_smile(exarg_T *eap); + void ex_drop(exarg_T *eap); + char_u *skip_vimgrep_pat(char_u *p, char_u **s, int *flags); + void ex_oldfiles(exarg_T *eap); + /* vim: set ft=c : */ +*** ../vim-8.1.0657/src/testdir/test_signs.vim 2018-12-27 00:28:27.501299292 +0100 +--- src/testdir/test_signs.vim 2018-12-29 18:36:00.272781771 +0100 +*************** +*** 28,35 **** + let a=execute('sign list Sign1') + call assert_equal("\nsign Sign1 text=x ", a) + +! " Split the window to the bottom to verify sign jump will stay in the current window +! " if the buffer is displayed there. + let bn = bufnr('%') + let wn = winnr() + exe 'sign place 41 line=3 name=Sign1 buffer=' . bn +--- 28,35 ---- + let a=execute('sign list Sign1') + call assert_equal("\nsign Sign1 text=x ", a) + +! " Split the window to the bottom to verify sign jump will stay in the +! " current window if the buffer is displayed there. + let bn = bufnr('%') + let wn = winnr() + exe 'sign place 41 line=3 name=Sign1 buffer=' . bn +*************** +*** 211,229 **** + call assert_equal('"sign undefine Sign1 Sign2', @:) + + call feedkeys(":sign place 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign place 1 buffer= file= line= name=', @:) + + call feedkeys(":sign place 1 name=\<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign place 1 name=Sign1 Sign2', @:) + + call feedkeys(":sign unplace 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign unplace 1 buffer= file=', @:) + + call feedkeys(":sign list \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign list Sign1 Sign2', @:) + + call feedkeys(":sign jump 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign jump 1 buffer= file=', @:) + + sign undefine Sign1 + sign undefine Sign2 +--- 211,230 ---- + call assert_equal('"sign undefine Sign1 Sign2', @:) + + call feedkeys(":sign place 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign place 1 buffer= file= group= line= name= priority=', +! \ @:) + + call feedkeys(":sign place 1 name=\<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign place 1 name=Sign1 Sign2', @:) + + call feedkeys(":sign unplace 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign unplace 1 buffer= file= group=', @:) + + call feedkeys(":sign list \<C-A>\<C-B>\"\<CR>", 'tx') + call assert_equal('"sign list Sign1 Sign2', @:) + + call feedkeys(":sign jump 1 \<C-A>\<C-B>\"\<CR>", 'tx') +! call assert_equal('"sign jump 1 buffer= file= group=', @:) + + sign undefine Sign1 + sign undefine Sign2 +*************** +*** 449,455 **** + + edit Xsign + let bnum = bufnr('%') +- let fname = fnamemodify('Xsign', ':p') + + " Error case + call assert_fails("call sign_place(5, [], 'sign1', 'Xsign', +--- 450,455 ---- +*************** +*** 466,471 **** +--- 466,475 ---- + let s = sign_getplaced('Xsign') + call assert_equal(1, len(s[0].signs)) + call assert_equal(s[0].signs[0].group, '') ++ let s = sign_getplaced(bnum, {'group' : ''}) ++ call assert_equal([{'id' : 5, 'group' : '', 'name' : 'sign1', 'lnum' : 10, ++ \ 'priority' : 10}], s[0].signs) ++ call assert_equal(1, len(s[0].signs)) + let s = sign_getplaced(bnum, {'group' : 'g2'}) + call assert_equal('g2', s[0].signs[0].group) + let s = sign_getplaced(bnum, {'group' : 'g3'}) +*************** +*** 584,717 **** + sign place 5 group=g1 line=10 name=sign1 file=Xsign + sign place 5 group=g2 line=10 name=sign1 file=Xsign + +! " Test for :sign place group={group} file={fname} + let a = execute('sign place file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a) + + let a = execute('sign place group=g2 file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 group=g2 name=sign1 priority=10\n", a) + + let a = execute('sign place group=* file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 group=g2 name=sign1 priority=10\n" . + \ " line=10 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=10 id=5 name=sign1 priority=10\n", a) + + let a = execute('sign place group=xyz file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a) + + call sign_unplace('*') +- +- " Test for :sign place group={group} buffer={nr} + let bnum = bufnr('Xsign') + exe 'sign place 5 line=10 name=sign1 buffer=' . bnum + exe 'sign place 5 group=g1 line=11 name=sign1 buffer=' . bnum + exe 'sign place 5 group=g2 line=12 name=sign1 buffer=' . bnum + + let a = execute('sign place buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a) + + let a = execute('sign place group=g2 buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=12 id=5 group=g2 name=sign1 priority=10\n", a) + + let a = execute('sign place group=* buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 name=sign1 priority=10\n" . + \ " line=11 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a) + + let a = execute('sign place group=xyz buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a) + + let a = execute('sign place group=*') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 name=sign1 priority=10\n" . + \ " line=11 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a) + +! " Test for :sign unplace +! sign unplace 5 group=g2 file=Xsign +! call assert_equal([], sign_getplaced(bnum, {'group' : 'g2'})[0].signs) +! +! exe 'sign unplace 5 group=g1 buffer=' . bnum +! call assert_equal([], sign_getplaced(bnum, {'group' : 'g1'})[0].signs) +! +! sign unplace 5 group=xy file=Xsign +! call assert_equal(1, len(sign_getplaced(bnum, {'group' : '*'})[0].signs)) +! +! " Test for removing all the signs. Place the signs again for this test +! sign place 5 group=g1 line=11 name=sign1 file=Xsign +! sign place 5 group=g2 line=12 name=sign1 file=Xsign +! sign place 6 line=20 name=sign1 file=Xsign +! sign place 6 group=g1 line=21 name=sign1 file=Xsign +! sign place 6 group=g2 line=22 name=sign1 file=Xsign +! sign unplace 5 group=* file=Xsign +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . +! \ " line=20 id=6 name=sign1 priority=10\n" . +! \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . +! \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) + +! " Remove all the signs from the global group +! sign unplace * file=Xsign +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . +! \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . +! \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) + +! " Remove all the signs from a particular group +! sign place 5 line=10 name=sign1 file=Xsign +! sign place 5 group=g1 line=11 name=sign1 file=Xsign +! sign place 5 group=g2 line=12 name=sign1 file=Xsign +! sign unplace * group=g1 file=Xsign +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . +! \ " line=10 id=5 name=sign1 priority=10\n" . +! \ " line=12 id=5 group=g2 name=sign1 priority=10\n" . +! \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) + +! " Remove all the signs from all the groups in a file +! sign place 5 group=g1 line=11 name=sign1 file=Xsign +! sign place 6 line=20 name=sign1 file=Xsign +! sign place 6 group=g1 line=21 name=sign1 file=Xsign +! sign unplace * group=* file=Xsign +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\n", a) + +! " Remove a particular sign id in a group from all the files +! sign place 5 group=g1 line=11 name=sign1 file=Xsign +! sign unplace 5 group=g1 +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\n", a) + +! " Remove a particular sign id in all the groups from all the files +! sign place 5 line=10 name=sign1 file=Xsign +! sign place 5 group=g1 line=11 name=sign1 file=Xsign +! sign place 5 group=g2 line=12 name=sign1 file=Xsign +! sign place 6 line=20 name=sign1 file=Xsign +! sign place 6 group=g1 line=21 name=sign1 file=Xsign +! sign place 6 group=g2 line=22 name=sign1 file=Xsign + sign unplace 5 group=* +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . +! \ " line=20 id=6 name=sign1 priority=10\n" . +! \ " line=21 id=6 group=g1 name=sign1 priority=10\n" . +! \ " line=22 id=6 group=g2 name=sign1 priority=10\n", a) + +! " Remove all the signs from all the groups in all the files +! sign place 5 line=10 name=sign1 file=Xsign +! sign place 5 group=g1 line=11 name=sign1 file=Xsign + sign unplace * group=* +! let a = execute('sign place group=*') +! call assert_equal("\n--- Signs ---\n", a) + +! " Error cases +! call assert_fails("sign place 3 group= name=sign1 buffer=" . bnum, 'E474:') + +- call delete("Xsign") + call sign_unplace('*') + call sign_undefine() + enew | only + endfunc + + " Tests for auto-generating the sign identifier +--- 588,1021 ---- + sign place 5 group=g1 line=10 name=sign1 file=Xsign + sign place 5 group=g2 line=10 name=sign1 file=Xsign + +! " Tests for the ':sign place' command +! +! " :sign place file={fname} + let a = execute('sign place file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a) + ++ " :sign place group={group} file={fname} + let a = execute('sign place group=g2 file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 group=g2 name=sign1 priority=10\n", a) + ++ " :sign place group=* file={fname} + let a = execute('sign place group=* file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 group=g2 name=sign1 priority=10\n" . + \ " line=10 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=10 id=5 name=sign1 priority=10\n", a) + ++ " Error case: non-existing group + let a = execute('sign place group=xyz file=Xsign') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a) + + call sign_unplace('*') + let bnum = bufnr('Xsign') + exe 'sign place 5 line=10 name=sign1 buffer=' . bnum + exe 'sign place 5 group=g1 line=11 name=sign1 buffer=' . bnum + exe 'sign place 5 group=g2 line=12 name=sign1 buffer=' . bnum + ++ " :sign place buffer={fname} + let a = execute('sign place buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=10 id=5 name=sign1 priority=10\n", a) + ++ " :sign place group={group} buffer={fname} + let a = execute('sign place group=g2 buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n line=12 id=5 group=g2 name=sign1 priority=10\n", a) + ++ " :sign place group=* buffer={fname} + let a = execute('sign place group=* buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 name=sign1 priority=10\n" . + \ " line=11 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a) + ++ " Error case: non-existing group + let a = execute('sign place group=xyz buffer=' . bnum) + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n", a) + ++ " :sign place ++ let a = execute('sign place') ++ call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . ++ \ " line=10 id=5 name=sign1 priority=10\n", a) ++ ++ " :sign place group={group} ++ let a = execute('sign place group=g1') ++ call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . ++ \ " line=11 id=5 group=g1 name=sign1 priority=10\n", a) ++ ++ " :sign place group=* + let a = execute('sign place group=*') + call assert_equal("\n--- Signs ---\nSigns for Xsign:\n" . + \ " line=10 id=5 name=sign1 priority=10\n" . + \ " line=11 id=5 group=g1 name=sign1 priority=10\n" . + \ " line=12 id=5 group=g2 name=sign1 priority=10\n", a) + +! " Test for ':sign jump' command with groups +! sign jump 5 group=g1 file=Xsign +! call assert_equal(11, line('.')) +! call assert_equal('Xsign', bufname('')) +! sign jump 5 group=g2 file=Xsign +! call assert_equal(12, line('.')) + +! " Error cases +! call assert_fails("sign place 3 group= name=sign1 buffer=" . bnum, 'E474:') + +! call delete("Xsign") +! call sign_unplace('*') +! call sign_undefine() +! enew | only +! endfunc + +! " Place signs used for ":sign unplace" command test +! func Place_signs_for_test() +! call sign_unplace('*') + +! sign place 3 line=10 name=sign1 file=Xsign1 +! sign place 3 group=g1 line=11 name=sign1 file=Xsign1 +! sign place 3 group=g2 line=12 name=sign1 file=Xsign1 +! sign place 4 line=15 name=sign1 file=Xsign1 +! sign place 4 group=g1 line=16 name=sign1 file=Xsign1 +! sign place 4 group=g2 line=17 name=sign1 file=Xsign1 +! sign place 5 line=20 name=sign1 file=Xsign2 +! sign place 5 group=g1 line=21 name=sign1 file=Xsign2 +! sign place 5 group=g2 line=22 name=sign1 file=Xsign2 +! sign place 6 line=25 name=sign1 file=Xsign2 +! sign place 6 group=g1 line=26 name=sign1 file=Xsign2 +! sign place 6 group=g2 line=27 name=sign1 file=Xsign2 +! endfunc + +! " Place multiple signs in a single line for test +! func Place_signs_at_line_for_test() +! call sign_unplace('*') +! sign place 3 line=13 name=sign1 file=Xsign1 +! sign place 3 group=g1 line=13 name=sign1 file=Xsign1 +! sign place 3 group=g2 line=13 name=sign1 file=Xsign1 +! sign place 4 line=13 name=sign1 file=Xsign1 +! sign place 4 group=g1 line=13 name=sign1 file=Xsign1 +! sign place 4 group=g2 line=13 name=sign1 file=Xsign1 +! endfunc +! +! " Tests for the ':sign unplace' command +! func Test_sign_unplace() +! enew | only +! " Remove all the signs +! call sign_unplace('*') +! call sign_undefine() +! +! " Create two files and define signs +! call writefile(repeat(["Sun is shining"], 30), "Xsign1") +! call writefile(repeat(["It is beautiful"], 30), "Xsign2") +! +! let attr = {'text' : '=>', 'linehl' : 'Search', 'texthl' : 'Error'} +! call sign_define("sign1", attr) +! +! edit Xsign1 +! let bnum1 = bufnr('%') +! split Xsign2 +! let bnum2 = bufnr('%') +! +! let signs1 = [{'id' : 3, 'name' : 'sign1', 'lnum' : 10, 'group' : '', +! \ 'priority' : 10}, +! \ {'id' : 3, 'name' : 'sign1', 'lnum' : 11, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 3, 'name' : 'sign1', 'lnum' : 12, 'group' : 'g2', +! \ 'priority' : 10}, +! \ {'id' : 4, 'name' : 'sign1', 'lnum' : 15, 'group' : '', +! \ 'priority' : 10}, +! \ {'id' : 4, 'name' : 'sign1', 'lnum' : 16, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 4, 'name' : 'sign1', 'lnum' : 17, 'group' : 'g2', +! \ 'priority' : 10},] +! let signs2 = [{'id' : 5, 'name' : 'sign1', 'lnum' : 20, 'group' : '', +! \ 'priority' : 10}, +! \ {'id' : 5, 'name' : 'sign1', 'lnum' : 21, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 5, 'name' : 'sign1', 'lnum' : 22, 'group' : 'g2', +! \ 'priority' : 10}, +! \ {'id' : 6, 'name' : 'sign1', 'lnum' : 25, 'group' : '', +! \ 'priority' : 10}, +! \ {'id' : 6, 'name' : 'sign1', 'lnum' : 26, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 6, 'name' : 'sign1', 'lnum' : 27, 'group' : 'g2', +! \ 'priority' : 10},] +! +! " Test for :sign unplace {id} file={fname} +! call Place_signs_for_test() +! sign unplace 3 file=Xsign1 +! sign unplace 6 file=Xsign2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 3 || val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6 || val.group != ''}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group={group} file={fname} +! call Place_signs_for_test() +! sign unplace 4 group=g1 file=Xsign1 +! sign unplace 5 group=g2 file=Xsign2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != 'g1'}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 5 || val.group != 'g2'}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group=* file={fname} +! call Place_signs_for_test() +! sign unplace 3 group=* file=Xsign1 +! sign unplace 6 group=* file=Xsign2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 3}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * file={fname} +! call Place_signs_for_test() +! sign unplace * file=Xsign1 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal(signs2, sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group={group} file={fname} +! call Place_signs_for_test() +! sign unplace * group=g1 file=Xsign1 +! sign unplace * group=g2 file=Xsign2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != 'g1'}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.group != 'g2'}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group=* file={fname} +! call Place_signs_for_test() +! sign unplace * group=* file=Xsign2 +! call assert_equal(signs1, sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal([], sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace 3 buffer=' . bnum1 +! exe 'sign unplace 6 buffer=' . bnum2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 3 || val.group != ''}), +! \ sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6 || val.group != ''}), +! \ sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group={group} buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace 4 group=g1 buffer=' . bnum1 +! exe 'sign unplace 5 group=g2 buffer=' . bnum2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != 'g1'}), +! \ sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 5 || val.group != 'g2'}), +! \ sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group=* buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace 3 group=* buffer=' . bnum1 +! exe 'sign unplace 6 group=* buffer=' . bnum2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 3}), +! \ sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6}), +! \ sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace * buffer=' . bnum1 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != ''}), +! \ sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal(signs2, sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group={group} buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace * group=g1 buffer=' . bnum1 +! exe 'sign unplace * group=g2 buffer=' . bnum2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != 'g1'}), +! \ sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.group != 'g2'}), +! \ sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group=* buffer={nr} +! call Place_signs_for_test() +! exe 'sign unplace * group=* buffer=' . bnum2 +! call assert_equal(signs1, sign_getplaced(bnum1, {'group' : '*'})[0].signs) +! call assert_equal([], sign_getplaced(bnum2, {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} +! call Place_signs_for_test() +! sign unplace 4 +! sign unplace 6 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6 || val.group != ''}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group={group} +! call Place_signs_for_test() +! sign unplace 4 group=g1 +! sign unplace 6 group=g2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != 'g1'}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 6 || val.group != 'g2'}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace {id} group=* +! call Place_signs_for_test() +! sign unplace 3 group=* + sign unplace 5 group=* +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 3}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.id != 5}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) + +! " Test for :sign unplace * +! call Place_signs_for_test() +! sign unplace * +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.group != ''}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group={group} +! call Place_signs_for_test() +! sign unplace * group=g1 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != 'g1'}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal( +! \ filter(copy(signs2), +! \ {idx, val -> val.group != 'g1'}), +! \ sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Test for :sign unplace * group=* +! call Place_signs_for_test() + sign unplace * group=* +! call assert_equal([], sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal([], sign_getplaced('Xsign2', {'group' : '*'})[0].signs) + +! " Negative test cases +! call Place_signs_for_test() +! sign unplace 3 group=xy file=Xsign1 +! sign unplace * group=xy file=Xsign1 +! silent! sign unplace * group=* file=FileNotPresent +! call assert_equal(signs1, sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! call assert_equal(signs2, sign_getplaced('Xsign2', {'group' : '*'})[0].signs) +! +! " Tests for removing sign at the current cursor position +! +! " Test for ':sign unplace' +! let signs1 = [{'id' : 4, 'name' : 'sign1', 'lnum' : 13, 'group' : 'g2', +! \ 'priority' : 10}, +! \ {'id' : 4, 'name' : 'sign1', 'lnum' : 13, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 4, 'name' : 'sign1', 'lnum' : 13, 'group' : '', +! \ 'priority' : 10}, +! \ {'id' : 3, 'name' : 'sign1', 'lnum' : 13, 'group' : 'g2', +! \ 'priority' : 10}, +! \ {'id' : 3, 'name' : 'sign1', 'lnum' : 13, 'group' : 'g1', +! \ 'priority' : 10}, +! \ {'id' : 3, 'name' : 'sign1', 'lnum' : 13, 'group' : '', +! \ 'priority' : 10},] +! exe bufwinnr('Xsign1') . 'wincmd w' +! call cursor(13, 1) +! +! " Should remove only one sign in the global group +! call Place_signs_at_line_for_test() +! sign unplace +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! " Should remove the second sign in the global group +! sign unplace +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.group != ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! +! " Test for ':sign unplace group={group}' +! call Place_signs_at_line_for_test() +! " Should remove only one sign in group g1 +! sign unplace group=g1 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group != 'g1'}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! sign unplace group=g2 +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4 || val.group == ''}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! +! " Test for ':sign unplace group=*' +! call Place_signs_at_line_for_test() +! sign unplace group=* +! sign unplace group=* +! sign unplace group=* +! call assert_equal( +! \ filter(copy(signs1), +! \ {idx, val -> val.id != 4}), +! \ sign_getplaced('Xsign1', {'group' : '*'})[0].signs) +! sign unplace group=* +! sign unplace group=* +! sign unplace group=* +! call assert_equal([], sign_getplaced('Xsign1', {'group' : '*'})[0].signs) + + call sign_unplace('*') + call sign_undefine() + enew | only ++ call delete("Xsign1") ++ call delete("Xsign2") + endfunc + + " Tests for auto-generating the sign identifier +*************** +*** 762,768 **** + " Place three signs with different priority in the same line + call writefile(repeat(["Sun is shining"], 30), "Xsign") + edit Xsign +- let fname = fnamemodify('Xsign', ':p') + + call sign_place(1, 'g1', 'sign1', 'Xsign', + \ {'lnum' : 11, 'priority' : 50}) +--- 1066,1071 ---- +*** ../vim-8.1.0657/src/version.c 2018-12-29 13:09:43.242347695 +0100 +--- src/version.c 2018-12-29 18:51:45.504342343 +0100 +*************** +*** 801,802 **** +--- 801,804 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 658, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +76. Your ISP regards you as a business partner rather than as a customer. + + /// 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 /// |