annotate src/sign.c @ 17247:cbd0432cf8ff v8.1.1623

patch 8.1.1623: display wrong with signs in narrow number column commit https://github.com/vim/vim/commit/e4b407f536ba8bd007152649a347a95320d80fce Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 4 11:59:28 2019 +0200 patch 8.1.1623: display wrong with signs in narrow number column Problem: Display wrong with signs in narrow number column. Solution: Increase the numbercolumn width if needed. (Yegappan Lakshmanan, closes #4606)
author Bram Moolenaar <Bram@vim.org>
date Thu, 04 Jul 2019 12:00:09 +0200
parents 210c4c5f783d
children 82b5d981fe59
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2 *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4 *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
11 * sign.c: functions for managing signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
12 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
13
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14 #include "vim.h"
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
16 #if defined(FEAT_SIGNS) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
17
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
18 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
19 * Struct to hold the sign properties.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
20 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
21 typedef struct sign sign_T;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
22
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23 struct sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
24 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
25 sign_T *sn_next; // next sign in list
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
26 int sn_typenr; // type number of sign
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
27 char_u *sn_name; // name of sign
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
28 char_u *sn_icon; // name of pixmap
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
29 # ifdef FEAT_SIGN_ICONS
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
30 void *sn_image; // icon image
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
31 # endif
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
32 char_u *sn_text; // text used instead of pixmap
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
33 int sn_line_hl; // highlight ID for line
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
34 int sn_text_hl; // highlight ID for text
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
35 };
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
36
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
37 static sign_T *first_sign = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
38 static int next_sign_typenr = 1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
39
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
40 static void sign_list_defined(sign_T *sp);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
41 static void sign_undefine(sign_T *sp, sign_T *sp_prev);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
42
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
43 static char *cmds[] = {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
44 "define",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
45 # define SIGNCMD_DEFINE 0
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
46 "undefine",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
47 # define SIGNCMD_UNDEFINE 1
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
48 "list",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
49 # define SIGNCMD_LIST 2
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
50 "place",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
51 # define SIGNCMD_PLACE 3
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
52 "unplace",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
53 # define SIGNCMD_UNPLACE 4
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
54 "jump",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
55 # define SIGNCMD_JUMP 5
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
56 NULL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
57 # define SIGNCMD_LAST 6
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
58 };
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
59
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
60 static hashtab_T sg_table; // sign group (signgroup_T) hashtable
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
61 static int next_sign_id = 1; // next sign id in the global group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
62
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
63 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
64 * Initialize data needed for managing signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
65 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
66 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
67 init_signs(void)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
68 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
69 hash_init(&sg_table); // sign group hash table
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
70 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
71
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
72 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
73 * A new sign in group 'groupname' is added. If the group is not present,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
74 * create it. Otherwise reference the group.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
75 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
76 static signgroup_T *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
77 sign_group_ref(char_u *groupname)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
78 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
79 hash_T hash;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
80 hashitem_T *hi;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
81 signgroup_T *group;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
82
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
83 hash = hash_hash(groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
84 hi = hash_lookup(&sg_table, groupname, hash);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
85 if (HASHITEM_EMPTY(hi))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
86 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
87 // new group
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
88 group = alloc(sizeof(signgroup_T) + STRLEN(groupname));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
89 if (group == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
90 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
91 STRCPY(group->sg_name, groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
92 group->refcount = 1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
93 group->next_sign_id = 1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
94 hash_add_item(&sg_table, hi, group->sg_name, hash);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
95 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
96 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
97 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
98 // existing group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
99 group = HI2SG(hi);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
100 group->refcount++;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
102
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
103 return group;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
104 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
105
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
106 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
107 * A sign in group 'groupname' is removed. If all the signs in this group are
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
108 * removed, then remove the group.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
110 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
111 sign_group_unref(char_u *groupname)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
112 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
113 hashitem_T *hi;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
114 signgroup_T *group;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
115
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
116 hi = hash_find(&sg_table, groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 if (!HASHITEM_EMPTY(hi))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
119 group = HI2SG(hi);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
120 group->refcount--;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
121 if (group->refcount == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
122 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
123 // All the signs in this group are removed
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 hash_remove(&sg_table, hi);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
125 vim_free(group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
126 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
128 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
130 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
131 * Returns TRUE if 'sign' is in 'group'.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
132 * A sign can either be in the global group (sign->group == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
133 * or in a named group. If 'group' is '*', then the sign is part of the group.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
134 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
135 static int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
136 sign_in_group(signlist_T *sign, char_u *group)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
137 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
138 return ((group != NULL && STRCMP(group, "*") == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
139 || (group == NULL && sign->group == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
140 || (group != NULL && sign->group != NULL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
141 && STRCMP(group, sign->group->sg_name) == 0));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
142 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
143
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
144 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
145 * Get the next free sign identifier in the specified group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
146 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
147 static int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
148 sign_group_get_next_signid(buf_T *buf, char_u *groupname)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
150 int id = 1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
151 signgroup_T *group = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
152 signlist_T *sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 hashitem_T *hi;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
154 int found = FALSE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
155
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
156 if (groupname != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
157 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
158 hi = hash_find(&sg_table, groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159 if (HASHITEM_EMPTY(hi))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
160 return id;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161 group = HI2SG(hi);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163
15490
98c35d312987 patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents: 15484
diff changeset
164 // Search for the next usable sign identifier
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
165 while (!found)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
166 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
167 if (group == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168 id = next_sign_id++; // global group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 id = group->next_sign_id++;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172 // Check whether this sign is already placed in the buffer
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 found = TRUE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
175 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
176 if (id == sign->id && sign_in_group(sign, groupname))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178 found = FALSE; // sign identifier is in use
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
179 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
180 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
181 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
182 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
183
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
184 return id;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
185 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
186
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
187 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
188 * Insert a new sign into the signlist for buffer 'buf' between the 'prev' and
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
189 * 'next' signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
190 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
191 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
192 insert_sign(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
193 buf_T *buf, // buffer to store sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
194 signlist_T *prev, // previous sign entry
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
195 signlist_T *next, // next sign entry
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
196 int id, // sign ID
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
197 char_u *group, // sign group; NULL for global group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
198 int prio, // sign priority
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 linenr_T lnum, // line number which gets the mark
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
200 int typenr) // typenr of sign we are adding
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
201 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
202 signlist_T *newsign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
203
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
204 newsign = lalloc_id(sizeof(signlist_T), FALSE, aid_insert_sign);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
205 if (newsign != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
206 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
207 newsign->id = id;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
208 newsign->lnum = lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
209 newsign->typenr = typenr;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
210 if (group != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
211 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
212 newsign->group = sign_group_ref(group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
213 if (newsign->group == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
214 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
215 vim_free(newsign);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
216 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
217 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
218 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
219 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
220 newsign->group = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
221 newsign->priority = prio;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
222 newsign->next = next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 newsign->prev = prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
224 if (next != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
225 next->prev = newsign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
226
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
227 if (prev == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
228 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
229 // When adding first sign need to redraw the windows to create the
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
230 // column for signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
231 if (buf->b_signlist == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
232 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 redraw_buf_later(buf, NOT_VALID);
17105
811c5c2f5236 patch 8.1.1552: cursor position is wrong after sign column changes
Bram Moolenaar <Bram@vim.org>
parents: 16978
diff changeset
234 changed_line_abv_curs();
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
235 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
236
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
237 // first sign in signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
238 buf->b_signlist = newsign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
239 #ifdef FEAT_NETBEANS_INTG
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
240 if (netbeans_active())
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
241 buf->b_has_sign_column = TRUE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
242 #endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
243 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
244 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
245 prev->next = newsign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
246 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
247 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
248
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
249 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
250 * Insert a new sign sorted by line number and sign priority.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
251 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
252 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
253 insert_sign_by_lnum_prio(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
254 buf_T *buf, // buffer to store sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
255 signlist_T *prev, // previous sign entry
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
256 int id, // sign ID
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
257 char_u *group, // sign group; NULL for global group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
258 int prio, // sign priority
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
259 linenr_T lnum, // line number which gets the mark
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
260 int typenr) // typenr of sign we are adding
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
261 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
262 signlist_T *sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
263
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
264 // keep signs sorted by lnum and by priority: insert new sign at
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
265 // the proper position in the list for this lnum.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
266 while (prev != NULL && prev->lnum == lnum && prev->priority <= prio)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
267 prev = prev->prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
268 if (prev == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
269 sign = buf->b_signlist;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
270 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
271 sign = prev->next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
272
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
273 insert_sign(buf, prev, sign, id, group, prio, lnum, typenr);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
274 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
275
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
276 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
277 * Get the name of a sign by its typenr.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
278 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
279 static char_u *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
280 sign_typenr2name(int typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
281 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
282 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
283
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
284 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
285 if (sp->sn_typenr == typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
286 return sp->sn_name;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
287 return (char_u *)_("[Deleted]");
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
288 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
289
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
290 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
291 * Return information about a sign in a Dict
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
292 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
293 static dict_T *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
294 sign_get_info(signlist_T *sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
295 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
296 dict_T *d;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
297
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
298 if ((d = dict_alloc_id(aid_sign_getinfo)) == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
299 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
300 dict_add_number(d, "id", sign->id);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
301 dict_add_string(d, "group", (sign->group == NULL) ?
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
302 (char_u *)"" : sign->group->sg_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
303 dict_add_number(d, "lnum", sign->lnum);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
304 dict_add_string(d, "name", sign_typenr2name(sign->typenr));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
305 dict_add_number(d, "priority", sign->priority);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
306
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
307 return d;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
308 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
309
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
310 /*
16978
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
311 * Sort the signs placed on the same line as "sign" by priority. Invoked after
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
312 * changing the priority of an already placed sign. Assumes the signs in the
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
313 * buffer are sorted by line number and priority.
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
314 */
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
315 static void
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
316 sign_sort_by_prio_on_line(buf_T *buf, signlist_T *sign)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
317 {
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
318 signlist_T *p = NULL;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
319
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
320 // If there is only one sign in the buffer or only one sign on the line or
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
321 // the sign is already sorted by priority, then return.
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
322 if ((sign->prev == NULL
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
323 || sign->prev->lnum != sign->lnum
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
324 || sign->prev->priority > sign->priority)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
325 && (sign->next == NULL
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
326 || sign->next->lnum != sign->lnum
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
327 || sign->next->priority < sign->priority))
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
328 return;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
329
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
330 // One or more signs on the same line as 'sign'
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
331 // Find a sign after which 'sign' should be inserted
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
332
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
333 // First search backward for a sign with higher priority on the same line
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
334 p = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
335 while (p->prev != NULL && p->prev->lnum == sign->lnum
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
336 && p->prev->priority <= sign->priority)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
337 p = p->prev;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
338
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
339 if (p == sign)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
340 {
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
341 // Sign not found. Search forward for a sign with priority just before
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
342 // 'sign'.
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
343 p = sign->next;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
344 while (p->next != NULL && p->next->lnum == sign->lnum
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
345 && p->next->priority > sign->priority)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
346 p = p->next;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
347 }
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
348
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
349 // Remove 'sign' from the list
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
350 if (buf->b_signlist == sign)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
351 buf->b_signlist = sign->next;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
352 if (sign->prev != NULL)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
353 sign->prev->next = sign->next;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
354 if (sign->next != NULL)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
355 sign->next->prev = sign->prev;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
356 sign->prev = NULL;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
357 sign->next = NULL;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
358
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
359 // Re-insert 'sign' at the right place
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
360 if (p->priority <= sign->priority)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
361 {
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
362 // 'sign' has a higher priority and should be inserted before 'p'
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
363 sign->prev = p->prev;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
364 sign->next = p;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
365 p->prev = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
366 if (sign->prev != NULL)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
367 sign->prev->next = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
368 if (buf->b_signlist == p)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
369 buf->b_signlist = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
370 }
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
371 else
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
372 {
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
373 // 'sign' has a lower priority and should be inserted after 'p'
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
374 sign->prev = p;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
375 sign->next = p->next;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
376 p->next = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
377 if (sign->next != NULL)
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
378 sign->next->prev = sign;
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
379 }
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
380 }
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
381
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
382 /*
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
383 * Add the sign into the signlist. Find the right spot to do it though.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
384 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
385 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
386 buf_addsign(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
387 buf_T *buf, // buffer to store sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
388 int id, // sign ID
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
389 char_u *groupname, // sign group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
390 int prio, // sign priority
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
391 linenr_T lnum, // line number which gets the mark
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
392 int typenr) // typenr of sign we are adding
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
393 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
394 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
395 signlist_T *prev; // the previous sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
396
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
397 prev = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
398 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
399 {
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
400 if (lnum == sign->lnum && id == sign->id
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
401 && sign_in_group(sign, groupname))
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
402 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
403 // Update an existing sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
404 sign->typenr = typenr;
16930
1689b52cf297 patch 8.1.1466: not updating priority on existing sign
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
405 sign->priority = prio;
16978
15bc5a64bd50 patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents: 16930
diff changeset
406 sign_sort_by_prio_on_line(buf, sign);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
407 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
408 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
409 else if (lnum < sign->lnum)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
410 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
411 insert_sign_by_lnum_prio(buf, prev, id, groupname, prio,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
412 lnum, typenr);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
413 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
414 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
415 prev = sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
416 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
417
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
418 insert_sign_by_lnum_prio(buf, prev, id, groupname, prio, lnum, typenr);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
419 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
420 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
421
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
422 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
423 * For an existing, placed sign "markId" change the type to "typenr".
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
424 * Returns the line number of the sign, or zero if the sign is not found.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
425 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
426 static linenr_T
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
427 buf_change_sign_type(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
428 buf_T *buf, // buffer to store sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
429 int markId, // sign ID
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
430 char_u *group, // sign group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
431 int typenr) // typenr of sign we are adding
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
432 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
433 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
434
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
435 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
436 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
437 if (sign->id == markId && sign_in_group(sign, group))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
438 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
439 sign->typenr = typenr;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
440 return sign->lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
441 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
442 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
443
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
444 return (linenr_T)0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
445 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
446
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
447 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
448 * Return the type number of the sign at line number 'lnum' in buffer 'buf'
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
449 * which has the attribute specified by 'type'. Returns 0 if a sign is not
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
450 * found at the line number or it doesn't have the specified attribute.
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
451 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
452 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
453 buf_getsigntype(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
454 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
455 linenr_T lnum,
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
456 int type) // SIGN_ICON, SIGN_TEXT, SIGN_ANY, SIGN_LINEHL
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
457 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
458 signlist_T *sign; // a sign in a b_signlist
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
459
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
460 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
461 if (sign->lnum == lnum
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
462 && (type == SIGN_ANY
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
463 # ifdef FEAT_SIGN_ICONS
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
464 || (type == SIGN_ICON
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
465 && sign_get_image(sign->typenr) != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
466 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
467 || (type == SIGN_TEXT
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
468 && sign_get_text(sign->typenr) != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
469 || (type == SIGN_LINEHL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
470 && sign_get_attr(sign->typenr, TRUE) != 0)))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
471 return sign->typenr;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
472 return 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
473 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
474
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
475 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
476 * Delete sign 'id' in group 'group' from buffer 'buf'.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
477 * If 'id' is zero, then delete all the signs in group 'group'. Otherwise
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
478 * delete only the specified sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
479 * If 'group' is '*', then delete the sign in all the groups. If 'group' is
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
480 * NULL, then delete the sign in the global group. Otherwise delete the sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
481 * the specified group.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
482 * Returns the line number of the deleted sign. If multiple signs are deleted,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
483 * then returns the line number of the last sign deleted.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
484 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
485 linenr_T
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
486 buf_delsign(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
487 buf_T *buf, // buffer sign is stored in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
488 linenr_T atlnum, // sign at this line, 0 - at any line
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
489 int id, // sign id
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
490 char_u *group) // sign group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
491 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
492 signlist_T **lastp; // pointer to pointer to current sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
493 signlist_T *sign; // a sign in a b_signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
494 signlist_T *next; // the next sign in a b_signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
495 linenr_T lnum; // line number whose sign was deleted
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
496
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
497 lastp = &buf->b_signlist;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
498 lnum = 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
499 for (sign = buf->b_signlist; sign != NULL; sign = next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
500 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
501 next = sign->next;
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
502 if ((id == 0 || sign->id == id)
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
503 && (atlnum == 0 || sign->lnum == atlnum)
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
504 && sign_in_group(sign, group))
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
505
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
506 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
507 *lastp = next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
508 if (next != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
509 next->prev = sign->prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
510 lnum = sign->lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
511 if (sign->group != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
512 sign_group_unref(sign->group->sg_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
513 vim_free(sign);
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
514 redraw_buf_line_later(buf, lnum);
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
515
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
516 // Check whether only one sign needs to be deleted
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
517 // If deleting a sign with a specific identifier in a particular
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
518 // group or deleting any sign at a particular line number, delete
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
519 // only one sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
520 if (group == NULL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
521 || (*group != '*' && id != 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
522 || (*group == '*' && atlnum != 0))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
523 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
524 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
525 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
526 lastp = &sign->next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
527 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
528
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
529 // When deleting the last sign the cursor position may change, because the
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
530 // sign columns no longer shows. And the 'signcolumn' may be hidden.
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
531 if (buf->b_signlist == NULL)
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
532 {
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
533 redraw_buf_later(buf, NOT_VALID);
17105
811c5c2f5236 patch 8.1.1552: cursor position is wrong after sign column changes
Bram Moolenaar <Bram@vim.org>
parents: 16978
diff changeset
534 changed_line_abv_curs();
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
535 }
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
536
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
537 return lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
538 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
539
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
540
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
541 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
542 * Find the line number of the sign with the requested id in group 'group'. If
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
543 * the sign does not exist, return 0 as the line number. This will still let
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
544 * the correct file get loaded.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
545 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
546 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
547 buf_findsign(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
548 buf_T *buf, // buffer to store sign in
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
549 int id, // sign ID
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
550 char_u *group) // sign group
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
551 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
552 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
553
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
554 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
555 if (sign->id == id && sign_in_group(sign, group))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
556 return sign->lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
557
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
558 return 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
559 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
560
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
561 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
562 * Return the sign at line 'lnum' in buffer 'buf'. Returns NULL if a sign is
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
563 * not found at the line. If 'groupname' is NULL, searches in the global group.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
564 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
565 static signlist_T *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
566 buf_getsign_at_line(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
567 buf_T *buf, // buffer whose sign we are searching for
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
568 linenr_T lnum, // line number of sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
569 char_u *groupname) // sign group name
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
570 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
571 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
572
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
573 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
574 if (sign->lnum == lnum && sign_in_group(sign, groupname))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
575 return sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
576
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
577 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
578 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
579
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
580 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
581 * Return the identifier of the sign at line number 'lnum' in buffer 'buf'.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
582 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
583 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
584 buf_findsign_id(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
585 buf_T *buf, // buffer whose sign we are searching for
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
586 linenr_T lnum, // line number of sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
587 char_u *groupname) // sign group name
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
588 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
589 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
590
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
591 sign = buf_getsign_at_line(buf, lnum, groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
592 if (sign != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
593 return sign->id;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
594
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
595 return 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
596 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
597
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
598 # if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
599 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
600 * See if a given type of sign exists on a specific line.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
601 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
602 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
603 buf_findsigntype_id(
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
604 buf_T *buf, // buffer whose sign we are searching for
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
605 linenr_T lnum, // line number of sign
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
606 int typenr) // sign type number
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
607 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
608 signlist_T *sign; // a sign in the signlist
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
609
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
610 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
611 if (sign->lnum == lnum && sign->typenr == typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
612 return sign->id;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
613
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
614 return 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
615 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
616
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
617
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
618 # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
619 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
620 * Return the number of icons on the given line.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
621 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
622 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
623 buf_signcount(buf_T *buf, linenr_T lnum)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
624 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
625 signlist_T *sign; // a sign in the signlist
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
626 int count = 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
627
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
628 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
629 if (sign->lnum == lnum)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
630 if (sign_get_image(sign->typenr) != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
631 count++;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
632
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
633 return count;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
634 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
635 # endif /* FEAT_SIGN_ICONS */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
636 # endif /* FEAT_NETBEANS_INTG */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
637
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
638 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
639 * Delete signs in group 'group' in buffer "buf". If 'group' is '*', then
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
640 * delete all the signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
641 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
642 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
643 buf_delete_signs(buf_T *buf, char_u *group)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
644 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
645 signlist_T *sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
646 signlist_T **lastp; // pointer to pointer to current sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
647 signlist_T *next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
648
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
649 // When deleting the last sign need to redraw the windows to remove the
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
650 // sign column. Not when curwin is NULL (this means we're exiting).
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
651 if (buf->b_signlist != NULL && curwin != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
652 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
653 redraw_buf_later(buf, NOT_VALID);
17105
811c5c2f5236 patch 8.1.1552: cursor position is wrong after sign column changes
Bram Moolenaar <Bram@vim.org>
parents: 16978
diff changeset
654 changed_line_abv_curs();
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
655 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
656
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
657 lastp = &buf->b_signlist;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
658 for (sign = buf->b_signlist; sign != NULL; sign = next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
659 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
660 next = sign->next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
661 if (sign_in_group(sign, group))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
662 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
663 *lastp = next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
664 if (next != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
665 next->prev = sign->prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
666 if (sign->group != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
667 sign_group_unref(sign->group->sg_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
668 vim_free(sign);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
669 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
670 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
671 lastp = &sign->next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
672 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
673 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
674
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
675 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
676 * List placed signs for "rbuf". If "rbuf" is NULL do it for all buffers.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
677 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
678 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
679 sign_list_placed(buf_T *rbuf, char_u *sign_group)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
680 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
681 buf_T *buf;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
682 signlist_T *sign;
15386
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
683 char lbuf[MSG_BUF_LEN];
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
684 char group[MSG_BUF_LEN];
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
685
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
686 msg_puts_title(_("\n--- Signs ---"));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
687 msg_putchar('\n');
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
688 if (rbuf == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
689 buf = firstbuf;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
690 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
691 buf = rbuf;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
692 while (buf != NULL && !got_int)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
693 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
694 if (buf->b_signlist != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
695 {
15386
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
696 vim_snprintf(lbuf, MSG_BUF_LEN, _("Signs for %s:"), buf->b_fname);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
697 msg_puts_attr(lbuf, HL_ATTR(HLF_D));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
698 msg_putchar('\n');
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
699 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
700 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
701 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
702 if (got_int)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
703 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
704 if (!sign_in_group(sign, sign_group))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
705 continue;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
706 if (sign->group != NULL)
15386
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
707 vim_snprintf(group, MSG_BUF_LEN, _(" group=%s"),
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
708 sign->group->sg_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
709 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
710 group[0] = '\0';
15386
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
711 vim_snprintf(lbuf, MSG_BUF_LEN,
317846db300a patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents: 15378
diff changeset
712 _(" line=%ld id=%d%s name=%s priority=%d"),
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
713 (long)sign->lnum, sign->id, group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
714 sign_typenr2name(sign->typenr), sign->priority);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
715 msg_puts(lbuf);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
716 msg_putchar('\n');
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
717 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
718 if (rbuf != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
719 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
720 buf = buf->b_next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
721 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
722 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
723
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
724 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
725 * Adjust a placed sign for inserted/deleted lines.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
726 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
727 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
728 sign_mark_adjust(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
729 linenr_T line1,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
730 linenr_T line2,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
731 long amount,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
732 long amount_after)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
733 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
734 signlist_T *sign; // a sign in a b_signlist
15519
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
735 linenr_T new_lnum;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
736
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
737 FOR_ALL_SIGNS_IN_BUF(curbuf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
738 {
15519
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
739 // Ignore changes to lines after the sign
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
740 if (sign->lnum < line1)
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
741 continue;
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
742 new_lnum = sign->lnum;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
743 if (sign->lnum >= line1 && sign->lnum <= line2)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
744 {
15519
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
745 if (amount != MAXLNUM)
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
746 new_lnum += amount;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
747 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
748 else if (sign->lnum > line2)
15519
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
749 // Lines inserted or deleted before the sign
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
750 new_lnum += amount_after;
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
751
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
752 // If the new sign line number is past the last line in the buffer,
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
753 // then don't adjust the line number. Otherwise, it will always be past
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
754 // the last line and will not be visible.
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
755 if (new_lnum <= curbuf->b_ml.ml_line_count)
89e76a598b30 patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents: 15490
diff changeset
756 sign->lnum = new_lnum;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
757 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
758 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
759
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
760 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
761 * Find index of a ":sign" subcmd from its name.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
762 * "*end_cmd" must be writable.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
763 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
764 static int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
765 sign_cmd_idx(
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
766 char_u *begin_cmd, // begin of sign subcmd
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
767 char_u *end_cmd) // just after sign subcmd
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
768 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
769 int idx;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
770 char save = *end_cmd;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
771
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
772 *end_cmd = NUL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
773 for (idx = 0; ; ++idx)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
774 if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
775 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
776 *end_cmd = save;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
777 return idx;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
778 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
779
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
780 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
781 * Find a sign by name. Also returns pointer to the previous sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
782 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
783 static sign_T *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
784 sign_find(char_u *name, sign_T **sp_prev)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
785 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
786 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
787
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
788 if (sp_prev != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
789 *sp_prev = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
790 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
791 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
792 if (STRCMP(sp->sn_name, name) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
793 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
794 if (sp_prev != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
795 *sp_prev = sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
796 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
797
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
798 return sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
799 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
800
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
801 /*
15529
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
802 * Allocate a new sign
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
803 */
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
804 static sign_T *
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
805 alloc_new_sign(char_u *name)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
806 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
807 sign_T *sp;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
808 sign_T *lp;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
809 int start = next_sign_typenr;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
810
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
811 // Allocate a new sign.
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
812 sp = alloc_clear_id(sizeof(sign_T), aid_sign_define_by_name);
15529
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
813 if (sp == NULL)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
814 return NULL;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
815
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
816 // Check that next_sign_typenr is not already being used.
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
817 // This only happens after wrapping around. Hopefully
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
818 // another one got deleted and we can use its number.
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
819 for (lp = first_sign; lp != NULL; )
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
820 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
821 if (lp->sn_typenr == next_sign_typenr)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
822 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
823 ++next_sign_typenr;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
824 if (next_sign_typenr == MAX_TYPENR)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
825 next_sign_typenr = 1;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
826 if (next_sign_typenr == start)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
827 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
828 vim_free(sp);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
829 emsg(_("E612: Too many signs defined"));
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
830 return NULL;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
831 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
832 lp = first_sign; // start all over
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
833 continue;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
834 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
835 lp = lp->sn_next;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
836 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
837
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
838 sp->sn_typenr = next_sign_typenr;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
839 if (++next_sign_typenr == MAX_TYPENR)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
840 next_sign_typenr = 1; // wrap around
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
841
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
842 sp->sn_name = vim_strsave(name);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
843 if (sp->sn_name == NULL) // out of memory
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
844 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
845 vim_free(sp);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
846 return NULL;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
847 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
848
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
849 return sp;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
850 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
851
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
852 /*
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
853 * Initialize the icon information for a new sign
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
854 */
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
855 static void
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
856 sign_define_init_icon(sign_T *sp, char_u *icon)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
857 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
858 vim_free(sp->sn_icon);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
859 sp->sn_icon = vim_strsave(icon);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
860 backslash_halve(sp->sn_icon);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
861 # ifdef FEAT_SIGN_ICONS
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
862 if (gui.in_use)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
863 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
864 out_flush();
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
865 if (sp->sn_image != NULL)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
866 gui_mch_destroy_sign(sp->sn_image);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
867 sp->sn_image = gui_mch_register_sign(sp->sn_icon);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
868 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
869 # endif
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
870 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
871
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
872 /*
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
873 * Initialize the text for a new sign
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
874 */
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
875 static int
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
876 sign_define_init_text(sign_T *sp, char_u *text)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
877 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
878 char_u *s;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
879 char_u *endp;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
880 int cells;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
881 int len;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
882
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
883 endp = text + (int)STRLEN(text);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
884
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
885 // Remove backslashes so that it is possible to use a space.
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
886 for (s = text; s + 1 < endp; ++s)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
887 if (*s == '\\')
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
888 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
889 STRMOVE(s, s + 1);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
890 --endp;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
891 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
892
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
893 // Count cells and check for non-printable chars
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
894 if (has_mbyte)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
895 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
896 cells = 0;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
897 for (s = text; s < endp; s += (*mb_ptr2len)(s))
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
898 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
899 if (!vim_isprintc((*mb_ptr2char)(s)))
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
900 break;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
901 cells += (*mb_ptr2cells)(s);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
902 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
903 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
904 else
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
905 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
906 for (s = text; s < endp; ++s)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
907 if (!vim_isprintc(*s))
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
908 break;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
909 cells = (int)(s - text);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
910 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
911
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
912 // Currently sign text must be one or two display cells
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
913 if (s != endp || cells < 1 || cells > 2)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
914 {
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
915 semsg(_("E239: Invalid sign text: %s"), text);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
916 return FAIL;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
917 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
918
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
919 vim_free(sp->sn_text);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
920 // Allocate one byte more if we need to pad up
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
921 // with a space.
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
922 len = (int)(endp - text + ((cells == 1) ? 1 : 0));
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
923 sp->sn_text = vim_strnsave(text, len);
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
924
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
925 // For single character sign text, pad with a space.
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
926 if (sp->sn_text != NULL && cells == 1)
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
927 STRCPY(sp->sn_text + len - 1, " ");
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
928
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
929 return OK;
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
930 }
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
931
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
932 /*
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
933 * Define a new sign or update an existing sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
934 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
935 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
936 sign_define_by_name(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
937 char_u *name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
938 char_u *icon,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
939 char_u *linehl,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
940 char_u *text,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
941 char_u *texthl)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
942 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
943 sign_T *sp_prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
944 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
945
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
946 sp = sign_find(name, &sp_prev);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
947 if (sp == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
948 {
15529
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
949 sp = alloc_new_sign(name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
950 if (sp == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
951 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
952
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
953 // add the new sign to the list of signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
954 if (sp_prev == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
955 first_sign = sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
956 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
957 sp_prev->sn_next = sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
958 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
959
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
960 // set values for a defined sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
961 if (icon != NULL)
15529
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
962 sign_define_init_icon(sp, icon);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
963
15529
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
964 if (text != NULL && (sign_define_init_text(sp, text) == FAIL))
233e2c585e03 patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents: 15519
diff changeset
965 return FAIL;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
966
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
967 if (linehl != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
968 sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
969
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
970 if (texthl != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
971 sp->sn_text_hl = syn_check_group(texthl, (int)STRLEN(texthl));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
972
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
973 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
974 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
975
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
976 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
977 * Free the sign specified by 'name'.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
978 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
979 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
980 sign_undefine_by_name(char_u *name)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
981 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
982 sign_T *sp_prev;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
983 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
984
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
985 sp = sign_find(name, &sp_prev);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
986 if (sp == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
987 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
988 semsg(_("E155: Unknown sign: %s"), name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
989 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
990 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
991 sign_undefine(sp, sp_prev);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
992
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
993 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
994 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
995
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
996 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
997 * List the signs matching 'name'
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
998 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
999 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1000 sign_list_by_name(char_u *name)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1001 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1002 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1003
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1004 sp = sign_find(name, NULL);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1005 if (sp != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1006 sign_list_defined(sp);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1007 else
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1008 semsg(_("E155: Unknown sign: %s"), name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1009 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1010
17247
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1011 static void
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1012 may_force_numberwidth_recompute(buf_T *buf, int unplace)
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1013 {
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1014 tabpage_T *tp;
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1015 win_T *wp;
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1016
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1017 FOR_ALL_TAB_WINDOWS(tp, wp)
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1018 if (wp->w_buffer == buf
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1019 && (wp->w_p_nu || wp->w_p_rnu)
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1020 && (unplace || wp->w_nrwidth_width < 2)
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1021 && (*wp->w_p_scl == 'n' && *(wp->w_p_scl + 1) == 'u'))
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1022 wp->w_nrwidth_line_count = 0;
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1023 }
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1024
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1025 /*
15484
882bbbdc9c76 patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1026 * Place a sign at the specified file location or update a sign.
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1027 */
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
1028 static int
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1029 sign_place(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1030 int *sign_id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1031 char_u *sign_group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1032 char_u *sign_name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1033 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1034 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1035 int prio)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1036 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1037 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1038
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1039 // Check for reserved character '*' in group name
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1040 if (sign_group != NULL && (*sign_group == '*' || *sign_group == '\0'))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1041 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1042
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1043 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1044 if (STRCMP(sp->sn_name, sign_name) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1045 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1046 if (sp == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1047 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1048 semsg(_("E155: Unknown sign: %s"), sign_name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1049 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1050 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1051 if (*sign_id == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1052 *sign_id = sign_group_get_next_signid(buf, sign_group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1053
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1054 if (lnum > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1055 // ":sign place {id} line={lnum} name={name} file={fname}":
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1056 // place a sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1057 buf_addsign(buf, *sign_id, sign_group, prio, lnum, sp->sn_typenr);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1058 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1059 // ":sign place {id} file={fname}": change sign type
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1060 lnum = buf_change_sign_type(buf, *sign_id, sign_group, sp->sn_typenr);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1061 if (lnum > 0)
17247
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1062 {
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1063 redraw_buf_line_later(buf, lnum);
17247
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1064
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1065 // When displaying signs in the 'number' column, if the width of the
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1066 // number column is less than 2, then force recomputing the width.
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1067 may_force_numberwidth_recompute(buf, FALSE);
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1068 }
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1069 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1070 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1071 semsg(_("E885: Not possible to change sign %s"), sign_name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1072 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1073 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1074
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1075 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1076 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1077
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1078 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1079 * Unplace the specified sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1080 */
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
1081 static int
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1082 sign_unplace(int sign_id, char_u *sign_group, buf_T *buf, linenr_T atlnum)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1083 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1084 if (buf->b_signlist == NULL) // No signs in the buffer
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1085 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1086
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1087 if (sign_id == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1088 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1089 // Delete all the signs in the specified buffer
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1090 redraw_buf_later(buf, NOT_VALID);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1091 buf_delete_signs(buf, sign_group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1092 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1093 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1094 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1095 linenr_T lnum;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1096
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1097 // Delete only the specified signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1098 lnum = buf_delsign(buf, atlnum, sign_id, sign_group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1099 if (lnum == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1100 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1101 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1102
17247
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1103 // When all the signs in a buffer are removed, force recomputing the
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1104 // number column width (if enabled) in all the windows displaying the
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1105 // buffer if 'signcolumn' is set to 'number' in that window.
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1106 if (buf->b_signlist == NULL)
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1107 may_force_numberwidth_recompute(buf, TRUE);
cbd0432cf8ff patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents: 17218
diff changeset
1108
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1109 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1110 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1111
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1112 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1113 * Unplace the sign at the current cursor line.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1114 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1115 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1116 sign_unplace_at_cursor(char_u *groupname)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1117 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1118 int id = -1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1119
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1120 id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum, groupname);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1121 if (id > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1122 sign_unplace(id, groupname, curwin->w_buffer, curwin->w_cursor.lnum);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1123 else
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1124 emsg(_("E159: Missing sign number"));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1125 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1126
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1127 /*
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1128 * Jump to a sign.
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1129 */
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
1130 static linenr_T
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1131 sign_jump(int sign_id, char_u *sign_group, buf_T *buf)
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1132 {
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1133 linenr_T lnum;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1134
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1135 if ((lnum = buf_findsign(buf, sign_id, sign_group)) <= 0)
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1136 {
15490
98c35d312987 patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents: 15484
diff changeset
1137 semsg(_("E157: Invalid sign ID: %d"), sign_id);
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1138 return -1;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1139 }
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1140
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1141 // goto a sign ...
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1142 if (buf_jump_open_win(buf) != NULL)
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1143 { // ... in a current window
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1144 curwin->w_cursor.lnum = lnum;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1145 check_cursor_lnum();
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1146 beginline(BL_WHITE);
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1147 }
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1148 else
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1149 { // ... not currently in a window
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1150 char_u *cmd;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1151
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1152 if (buf->b_fname == NULL)
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1153 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1154 emsg(_("E934: Cannot jump to a buffer that does not have a name"));
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1155 return -1;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1156 }
16768
695d9ef00b03 patch 8.1.1386: unessesary type casts for lalloc()
Bram Moolenaar <Bram@vim.org>
parents: 15864
diff changeset
1157 cmd = alloc(STRLEN(buf->b_fname) + 25);
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1158 if (cmd == NULL)
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1159 return -1;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1160 sprintf((char *)cmd, "e +%ld %s", (long)lnum, buf->b_fname);
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1161 do_cmdline_cmd(cmd);
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1162 vim_free(cmd);
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1163 }
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1164 # ifdef FEAT_FOLDING
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1165 foldOpenCursor();
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1166 # endif
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1167
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1168 return lnum;
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1169 }
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1170
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1171 /*
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1172 * ":sign define {name} ..." command
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1173 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1174 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1175 sign_define_cmd(char_u *sign_name, char_u *cmdline)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1176 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1177 char_u *arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1178 char_u *p = cmdline;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1179 char_u *icon = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1180 char_u *text = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1181 char_u *linehl = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1182 char_u *texthl = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1183 int failed = FALSE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1184
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1185 // set values for a defined sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1186 for (;;)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1187 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1188 arg = skipwhite(p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1189 if (*arg == NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1190 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1191 p = skiptowhite_esc(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1192 if (STRNCMP(arg, "icon=", 5) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1193 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1194 arg += 5;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1195 icon = vim_strnsave(arg, (int)(p - arg));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1196 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1197 else if (STRNCMP(arg, "text=", 5) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1198 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1199 arg += 5;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1200 text = vim_strnsave(arg, (int)(p - arg));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1201 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1202 else if (STRNCMP(arg, "linehl=", 7) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1203 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1204 arg += 7;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1205 linehl = vim_strnsave(arg, (int)(p - arg));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1206 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1207 else if (STRNCMP(arg, "texthl=", 7) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1208 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1209 arg += 7;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1210 texthl = vim_strnsave(arg, (int)(p - arg));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1211 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1212 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1213 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1214 semsg(_(e_invarg2), arg);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1215 failed = TRUE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1216 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1217 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1218 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1219
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1220 if (!failed)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1221 sign_define_by_name(sign_name, icon, linehl, text, texthl);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1222
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1223 vim_free(icon);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1224 vim_free(text);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1225 vim_free(linehl);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1226 vim_free(texthl);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1227 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1228
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1229 /*
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1230 * ":sign place" command
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1231 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1232 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1233 sign_place_cmd(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1234 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1235 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1236 char_u *sign_name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1237 int id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1238 char_u *group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1239 int prio)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1240 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1241 if (id <= 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1242 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1243 // List signs placed in a file/buffer
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1244 // :sign place file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1245 // :sign place group={group} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1246 // :sign place group=* file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1247 // :sign place buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1248 // :sign place group={group} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1249 // :sign place group=* buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1250 // :sign place
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1251 // :sign place group={group}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1252 // :sign place group=*
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1253 if (lnum >= 0 || sign_name != NULL
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1254 || (group != NULL && *group == '\0'))
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1255 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1256 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1257 sign_list_placed(buf, group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1258 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1259 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1260 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1261 // Place a new sign
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1262 if (sign_name == NULL || buf == NULL
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1263 || (group != NULL && *group == '\0'))
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1264 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1265 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1266 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1267 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1268
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1269 sign_place(&id, group, sign_name, buf, lnum, prio);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1270 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1271 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1272
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1273 /*
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1274 * ":sign unplace" command
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1275 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1276 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1277 sign_unplace_cmd(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1278 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1279 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1280 char_u *sign_name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1281 int id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1282 char_u *group)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1283 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1284 if (lnum >= 0 || sign_name != NULL || (group != NULL && *group == '\0'))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1285 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1286 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1287 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1288 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1289
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1290 if (id == -2)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1291 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1292 if (buf != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1293 // :sign unplace * file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1294 // :sign unplace * group={group} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1295 // :sign unplace * group=* file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1296 // :sign unplace * buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1297 // :sign unplace * group={group} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1298 // :sign unplace * group=* buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1299 sign_unplace(0, group, buf, 0);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1300 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1301 // :sign unplace *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1302 // :sign unplace * group={group}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1303 // :sign unplace * group=*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1304 FOR_ALL_BUFFERS(buf)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1305 if (buf->b_signlist != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1306 buf_delete_signs(buf, group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1307 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1308 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1309 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1310 if (buf != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1311 // :sign unplace {id} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1312 // :sign unplace {id} group={group} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1313 // :sign unplace {id} group=* file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1314 // :sign unplace {id} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1315 // :sign unplace {id} group={group} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1316 // :sign unplace {id} group=* buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1317 sign_unplace(id, group, buf, 0);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1318 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1319 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1320 if (id == -1)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1321 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1322 // :sign unplace group={group}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1323 // :sign unplace group=*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1324 sign_unplace_at_cursor(group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1325 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1326 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1327 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1328 // :sign unplace {id}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1329 // :sign unplace {id} group={group}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1330 // :sign unplace {id} group=*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1331 FOR_ALL_BUFFERS(buf)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1332 sign_unplace(id, group, buf, 0);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1333 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1334 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1335 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1336 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1337
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1338 /*
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1339 * Jump to a placed sign commands:
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1340 * :sign jump {id} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1341 * :sign jump {id} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1342 * :sign jump {id} group={group} file={fname}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1343 * :sign jump {id} group={group} buffer={nr}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1344 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1345 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1346 sign_jump_cmd(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1347 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1348 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1349 char_u *sign_name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1350 int id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1351 char_u *group)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1352 {
15378
0d76dd701e49 patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents: 15330
diff changeset
1353 if (sign_name == NULL && group == NULL && id == -1)
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1354 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1355 emsg(_(e_argreq));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1356 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1357 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1358
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1359 if (buf == NULL || (group != NULL && *group == '\0')
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1360 || lnum >= 0 || sign_name != NULL)
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1361 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1362 // File or buffer is not specified or an empty group is used
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1363 // or a line number or a sign name is specified.
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1364 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1365 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1366 }
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1367 (void)sign_jump(id, group, buf);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1368 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1369
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1370 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1371 * Parse the command line arguments for the ":sign place", ":sign unplace" and
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1372 * ":sign jump" commands.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1373 * The supported arguments are: line={lnum} name={name} group={group}
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1374 * priority={prio} and file={fname} or buffer={nr}.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1375 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1376 static int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1377 parse_sign_cmd_args(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1378 int cmd,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1379 char_u *arg,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1380 char_u **sign_name,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1381 int *signid,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1382 char_u **group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1383 int *prio,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1384 buf_T **buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1385 linenr_T *lnum)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1386 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1387 char_u *arg1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1388 char_u *name;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1389 char_u *filename = NULL;
15388
7444fffa482d patch 8.1.0702: ":sign place" only uses the current buffer
Bram Moolenaar <Bram@vim.org>
parents: 15386
diff changeset
1390 int lnum_arg = FALSE;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1391
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1392 // first arg could be placed sign id
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1393 arg1 = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1394 if (VIM_ISDIGIT(*arg))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1395 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1396 *signid = getdigits(&arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1397 if (!VIM_ISWHITE(*arg) && *arg != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1398 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1399 *signid = -1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1400 arg = arg1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1401 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1402 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1403 arg = skipwhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1404 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1405
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1406 while (*arg != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1407 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1408 if (STRNCMP(arg, "line=", 5) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1409 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1410 arg += 5;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1411 *lnum = atoi((char *)arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1412 arg = skiptowhite(arg);
15388
7444fffa482d patch 8.1.0702: ":sign place" only uses the current buffer
Bram Moolenaar <Bram@vim.org>
parents: 15386
diff changeset
1413 lnum_arg = TRUE;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1414 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1415 else if (STRNCMP(arg, "*", 1) == 0 && cmd == SIGNCMD_UNPLACE)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1416 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1417 if (*signid != -1)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1418 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1419 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1420 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1421 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1422 *signid = -2;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1423 arg = skiptowhite(arg + 1);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1424 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1425 else if (STRNCMP(arg, "name=", 5) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1426 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1427 arg += 5;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1428 name = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1429 arg = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1430 if (*arg != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1431 *arg++ = NUL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1432 while (name[0] == '0' && name[1] != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1433 ++name;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1434 *sign_name = name;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1435 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1436 else if (STRNCMP(arg, "group=", 6) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1437 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1438 arg += 6;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1439 *group = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1440 arg = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1441 if (*arg != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1442 *arg++ = NUL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1443 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1444 else if (STRNCMP(arg, "priority=", 9) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1445 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1446 arg += 9;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1447 *prio = atoi((char *)arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1448 arg = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1449 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1450 else if (STRNCMP(arg, "file=", 5) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1451 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1452 arg += 5;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1453 filename = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1454 *buf = buflist_findname_exp(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1455 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1456 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1457 else if (STRNCMP(arg, "buffer=", 7) == 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1458 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1459 arg += 7;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1460 filename = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1461 *buf = buflist_findnr((int)getdigits(&arg));
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1462 if (*skipwhite(arg) != NUL)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1463 emsg(_(e_trailing));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1464 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1465 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1466 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1467 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1468 emsg(_(e_invarg));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1469 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1470 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1471 arg = skipwhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1472 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1473
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1474 if (filename != NULL && *buf == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1475 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1476 semsg(_("E158: Invalid buffer name: %s"), filename);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1477 return FAIL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1478 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1479
15378
0d76dd701e49 patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents: 15330
diff changeset
1480 // If the filename is not supplied for the sign place or the sign jump
0d76dd701e49 patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents: 15330
diff changeset
1481 // command, then use the current buffer.
15388
7444fffa482d patch 8.1.0702: ":sign place" only uses the current buffer
Bram Moolenaar <Bram@vim.org>
parents: 15386
diff changeset
1482 if (filename == NULL && ((cmd == SIGNCMD_PLACE && lnum_arg)
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1483 || cmd == SIGNCMD_JUMP))
15378
0d76dd701e49 patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents: 15330
diff changeset
1484 *buf = curwin->w_buffer;
0d76dd701e49 patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents: 15330
diff changeset
1485
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1486 return OK;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1487 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1488
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1489 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1490 * ":sign" command
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1491 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1492 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1493 ex_sign(exarg_T *eap)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1494 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1495 char_u *arg = eap->arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1496 char_u *p;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1497 int idx;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1498 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1499 buf_T *buf = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1500
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1501 // Parse the subcommand.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1502 p = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1503 idx = sign_cmd_idx(arg, p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1504 if (idx == SIGNCMD_LAST)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1505 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1506 semsg(_("E160: Unknown sign command: %s"), arg);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1507 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1508 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1509 arg = skipwhite(p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1510
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1511 if (idx <= SIGNCMD_LIST)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1512 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1513 // Define, undefine or list signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1514 if (idx == SIGNCMD_LIST && *arg == NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1515 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1516 // ":sign list": list all defined signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1517 for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1518 sign_list_defined(sp);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1519 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1520 else if (*arg == NUL)
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1521 emsg(_("E156: Missing sign name"));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1522 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1523 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1524 char_u *name;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1525
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1526 // Isolate the sign name. If it's a number skip leading zeroes,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1527 // so that "099" and "99" are the same sign. But keep "0".
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1528 p = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1529 if (*p != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1530 *p++ = NUL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1531 while (arg[0] == '0' && arg[1] != NUL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1532 ++arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1533 name = vim_strsave(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1534
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1535 if (idx == SIGNCMD_DEFINE)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1536 sign_define_cmd(name, p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1537 else if (idx == SIGNCMD_LIST)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1538 // ":sign list {name}"
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1539 sign_list_by_name(name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1540 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1541 // ":sign undefine {name}"
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1542 sign_undefine_by_name(name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1543
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1544 vim_free(name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1545 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1546 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1547 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1548 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1549 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1550 int id = -1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1551 linenr_T lnum = -1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1552 char_u *sign_name = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1553 char_u *group = NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1554 int prio = SIGN_DEF_PRIO;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1555
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1556 // Parse command line arguments
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1557 if (parse_sign_cmd_args(idx, arg, &sign_name, &id, &group, &prio,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1558 &buf, &lnum) == FAIL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1559 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1560
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1561 if (idx == SIGNCMD_PLACE)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1562 sign_place_cmd(buf, lnum, sign_name, id, group, prio);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1563 else if (idx == SIGNCMD_UNPLACE)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1564 sign_unplace_cmd(buf, lnum, sign_name, id, group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1565 else if (idx == SIGNCMD_JUMP)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1566 sign_jump_cmd(buf, lnum, sign_name, id, group);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1567 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1568 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1569
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1570 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1571 * Return information about a specified sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1572 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1573 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1574 sign_getinfo(sign_T *sp, dict_T *retdict)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1575 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1576 char_u *p;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1577
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1578 dict_add_string(retdict, "name", (char_u *)sp->sn_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1579 if (sp->sn_icon != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1580 dict_add_string(retdict, "icon", (char_u *)sp->sn_icon);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1581 if (sp->sn_text != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1582 dict_add_string(retdict, "text", (char_u *)sp->sn_text);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1583 if (sp->sn_line_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1584 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1585 p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1586 if (p == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1587 p = (char_u *)"NONE";
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1588 dict_add_string(retdict, "linehl", (char_u *)p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1589 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1590 if (sp->sn_text_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1591 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1592 p = get_highlight_name_ext(NULL, sp->sn_text_hl - 1, FALSE);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1593 if (p == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1594 p = (char_u *)"NONE";
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1595 dict_add_string(retdict, "texthl", (char_u *)p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1596 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1597 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1598
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1599 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1600 * If 'name' is NULL, return a list of all the defined signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1601 * Otherwise, return information about the specified sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1602 */
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
1603 static void
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1604 sign_getlist(char_u *name, list_T *retlist)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1605 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1606 sign_T *sp = first_sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1607 dict_T *dict;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1608
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1609 if (name != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1610 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1611 sp = sign_find(name, NULL);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1612 if (sp == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1613 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1614 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1615
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1616 for (; sp != NULL && !got_int; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1617 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1618 if ((dict = dict_alloc_id(aid_sign_getlist)) == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1619 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1620 if (list_append_dict(retlist, dict) == FAIL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1621 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1622 sign_getinfo(sp, dict);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1623
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1624 if (name != NULL) // handle only the specified sign
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1625 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1626 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1627 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1628
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1629 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1630 * Returns information about signs placed in a buffer as list of dicts.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1631 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1632 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1633 get_buffer_signs(buf_T *buf, list_T *l)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1634 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1635 signlist_T *sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1636 dict_T *d;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1637
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1638 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1639 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1640 if ((d = sign_get_info(sign)) != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1641 list_append_dict(l, d);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1642 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1643 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1644
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1645 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1646 * Return information about all the signs placed in a buffer
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1647 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1648 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1649 sign_get_placed_in_buf(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1650 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1651 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1652 int sign_id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1653 char_u *sign_group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1654 list_T *retlist)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1655 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1656 dict_T *d;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1657 list_T *l;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1658 signlist_T *sign;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1659 dict_T *sdict;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1660
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1661 if ((d = dict_alloc_id(aid_sign_getplaced_dict)) == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1662 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1663 list_append_dict(retlist, d);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1664
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1665 dict_add_number(d, "bufnr", (long)buf->b_fnum);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1666
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1667 if ((l = list_alloc_id(aid_sign_getplaced_list)) == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1668 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1669 dict_add_list(d, "signs", l);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1670
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1671 FOR_ALL_SIGNS_IN_BUF(buf, sign)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1672 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1673 if (!sign_in_group(sign, sign_group))
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1674 continue;
15402
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1675 if ((lnum == 0 && sign_id == 0)
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1676 || (sign_id == 0 && lnum == sign->lnum)
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1677 || (lnum == 0 && sign_id == sign->id)
c17b5e30a0af patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents: 15388
diff changeset
1678 || (lnum == sign->lnum && sign_id == sign->id))
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1679 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1680 if ((sdict = sign_get_info(sign)) != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1681 list_append_dict(l, sdict);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1682 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1683 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1684 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1685
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1686 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1687 * Get a list of signs placed in buffer 'buf'. If 'num' is non-zero, return the
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1688 * sign placed at the line number. If 'lnum' is zero, return all the signs
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1689 * placed in 'buf'. If 'buf' is NULL, return signs placed in all the buffers.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1690 */
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
1691 static void
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1692 sign_get_placed(
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1693 buf_T *buf,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1694 linenr_T lnum,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1695 int sign_id,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1696 char_u *sign_group,
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1697 list_T *retlist)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1698 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1699 if (buf != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1700 sign_get_placed_in_buf(buf, lnum, sign_id, sign_group, retlist);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1701 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1702 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1703 FOR_ALL_BUFFERS(buf)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1704 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1705 if (buf->b_signlist != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1706 sign_get_placed_in_buf(buf, 0, sign_id, sign_group, retlist);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1707 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1708 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1709 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1710
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1711 # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1712 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1713 * Allocate the icons. Called when the GUI has started. Allows defining
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1714 * signs before it starts.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1715 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1716 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1717 sign_gui_started(void)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1718 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1719 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1720
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1721 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1722 if (sp->sn_icon != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1723 sp->sn_image = gui_mch_register_sign(sp->sn_icon);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1724 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1725 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1726
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1727 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1728 * List one sign.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1729 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1730 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1731 sign_list_defined(sign_T *sp)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1732 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1733 char_u *p;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1734
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15418
diff changeset
1735 smsg("sign %s", sp->sn_name);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1736 if (sp->sn_icon != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1737 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1738 msg_puts(" icon=");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1739 msg_outtrans(sp->sn_icon);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1740 # ifdef FEAT_SIGN_ICONS
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1741 if (sp->sn_image == NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1742 msg_puts(_(" (NOT FOUND)"));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1743 # else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1744 msg_puts(_(" (not supported)"));
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1745 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1746 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1747 if (sp->sn_text != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1748 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1749 msg_puts(" text=");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1750 msg_outtrans(sp->sn_text);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1751 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1752 if (sp->sn_line_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1753 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1754 msg_puts(" linehl=");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1755 p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1756 if (p == NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1757 msg_puts("NONE");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1758 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1759 msg_puts((char *)p);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1760 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1761 if (sp->sn_text_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1762 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1763 msg_puts(" texthl=");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1764 p = get_highlight_name_ext(NULL, sp->sn_text_hl - 1, FALSE);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1765 if (p == NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1766 msg_puts("NONE");
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1767 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15529
diff changeset
1768 msg_puts((char *)p);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1769 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1770 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1771
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1772 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1773 * Undefine a sign and free its memory.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1774 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1775 static void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1776 sign_undefine(sign_T *sp, sign_T *sp_prev)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1777 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1778 vim_free(sp->sn_name);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1779 vim_free(sp->sn_icon);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1780 # ifdef FEAT_SIGN_ICONS
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1781 if (sp->sn_image != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1782 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1783 out_flush();
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1784 gui_mch_destroy_sign(sp->sn_image);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1785 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1786 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1787 vim_free(sp->sn_text);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1788 if (sp_prev == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1789 first_sign = sp->sn_next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1790 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1791 sp_prev->sn_next = sp->sn_next;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1792 vim_free(sp);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1793 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1794
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1795 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1796 * Get highlighting attribute for sign "typenr".
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1797 * If "line" is TRUE: line highl, if FALSE: text highl.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1798 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1799 int
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1800 sign_get_attr(int typenr, int line)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1801 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1802 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1803
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1804 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1805 if (sp->sn_typenr == typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1806 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1807 if (line)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1808 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1809 if (sp->sn_line_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1810 return syn_id2attr(sp->sn_line_hl);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1811 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1812 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1813 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1814 if (sp->sn_text_hl > 0)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1815 return syn_id2attr(sp->sn_text_hl);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1816 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1817 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1818 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1819 return 0;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1820 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1821
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1822 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1823 * Get text mark for sign "typenr".
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1824 * Returns NULL if there isn't one.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1825 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1826 char_u *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1827 sign_get_text(int typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1828 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1829 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1830
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1831 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1832 if (sp->sn_typenr == typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1833 return sp->sn_text;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1834 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1835 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1836
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1837 # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1838 void *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1839 sign_get_image(
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1840 int typenr) // the attribute which may have a sign
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1841 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1842 sign_T *sp;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1843
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1844 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1845 if (sp->sn_typenr == typenr)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1846 return sp->sn_image;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1847 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1848 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1849 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1850
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1851 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1852 * Undefine/free all signs.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1853 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1854 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1855 free_signs(void)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1856 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1857 while (first_sign != NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1858 sign_undefine(first_sign, NULL);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1859 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1860
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1861 # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1862 static enum
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1863 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1864 EXP_SUBCMD, // expand :sign sub-commands
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1865 EXP_DEFINE, // expand :sign define {name} args
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1866 EXP_PLACE, // expand :sign place {id} args
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1867 EXP_LIST, // expand :sign place args
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1868 EXP_UNPLACE, // expand :sign unplace"
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1869 EXP_SIGN_NAMES, // expand with name of placed signs
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1870 EXP_SIGN_GROUPS // expand with name of placed sign groups
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1871 } expand_what;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1872
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1873 /*
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1874 * Return the n'th sign name (used for command line completion)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1875 */
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1876 static char_u *
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1877 get_nth_sign_name(int idx)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1878 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1879 int current_idx;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1880 sign_T *sp;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1881
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1882 // Complete with name of signs already defined
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1883 current_idx = 0;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1884 for (sp = first_sign; sp != NULL; sp = sp->sn_next)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1885 if (current_idx++ == idx)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1886 return sp->sn_name;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1887 return NULL;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1888 }
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1889
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1890 /*
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1891 * Return the n'th sign group name (used for command line completion)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1892 */
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1893 static char_u *
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1894 get_nth_sign_group_name(int idx)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1895 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1896 int current_idx;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1897 int todo;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1898 hashitem_T *hi;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1899 signgroup_T *group;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1900
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1901 // Complete with name of sign groups already defined
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1902 current_idx = 0;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1903 todo = (int)sg_table.ht_used;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1904 for (hi = sg_table.ht_array; todo > 0; ++hi)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1905 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1906 if (!HASHITEM_EMPTY(hi))
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1907 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1908 --todo;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1909 if (current_idx++ == idx)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1910 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1911 group = HI2SG(hi);
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1912 return group->sg_name;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1913 }
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1914 }
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1915 }
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1916 return NULL;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1917 }
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1918
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1919 /*
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1920 * Function given to ExpandGeneric() to obtain the sign command
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1921 * expansion.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1922 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1923 char_u *
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1924 get_sign_name(expand_T *xp UNUSED, int idx)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1925 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1926 switch (expand_what)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1927 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1928 case EXP_SUBCMD:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1929 return (char_u *)cmds[idx];
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1930 case EXP_DEFINE:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1931 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1932 char *define_arg[] =
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1933 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1934 "icon=", "linehl=", "text=", "texthl=", NULL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1935 };
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1936 return (char_u *)define_arg[idx];
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1937 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1938 case EXP_PLACE:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1939 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1940 char *place_arg[] =
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1941 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1942 "line=", "name=", "group=", "priority=", "file=",
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1943 "buffer=", NULL
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1944 };
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1945 return (char_u *)place_arg[idx];
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1946 }
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1947 case EXP_LIST:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1948 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1949 char *list_arg[] =
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1950 {
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1951 "group=", "file=", "buffer=", NULL
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1952 };
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1953 return (char_u *)list_arg[idx];
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1954 }
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1955 case EXP_UNPLACE:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1956 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1957 char *unplace_arg[] = { "group=", "file=", "buffer=", NULL };
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1958 return (char_u *)unplace_arg[idx];
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1959 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1960 case EXP_SIGN_NAMES:
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1961 return get_nth_sign_name(idx);
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1962 case EXP_SIGN_GROUPS:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
1963 return get_nth_sign_group_name(idx);
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1964 default:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1965 return NULL;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1966 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1967 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1968
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1969 /*
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1970 * Handle command line completion for :sign command.
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1971 */
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1972 void
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1973 set_context_in_sign_cmd(expand_T *xp, char_u *arg)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1974 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1975 char_u *p;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1976 char_u *end_subcmd;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1977 char_u *last;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1978 int cmd_idx;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1979 char_u *begin_subcmd_args;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1980
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1981 // Default: expand subcommands.
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1982 xp->xp_context = EXPAND_SIGN;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1983 expand_what = EXP_SUBCMD;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1984 xp->xp_pattern = arg;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1985
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1986 end_subcmd = skiptowhite(arg);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1987 if (*end_subcmd == NUL)
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1988 // expand subcmd name
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1989 // :sign {subcmd}<CTRL-D>
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1990 return;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1991
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1992 cmd_idx = sign_cmd_idx(arg, end_subcmd);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1993
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1994 // :sign {subcmd} {subcmd_args}
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1995 // |
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1996 // begin_subcmd_args
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1997 begin_subcmd_args = skipwhite(end_subcmd);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1998
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
1999 // expand last argument of subcmd
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2000
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2001 // :sign define {name} {args}...
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2002 // |
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2003 // p
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2004
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2005 // Loop until reaching last argument.
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2006 p = begin_subcmd_args;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2007 do
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2008 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2009 p = skipwhite(p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2010 last = p;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2011 p = skiptowhite(p);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2012 } while (*p != NUL);
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2013
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2014 p = vim_strchr(last, '=');
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2015
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2016 // :sign define {name} {args}... {last}=
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2017 // | |
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2018 // last p
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2019 if (p == NULL)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2020 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2021 // Expand last argument name (before equal sign).
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2022 xp->xp_pattern = last;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2023 switch (cmd_idx)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2024 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2025 case SIGNCMD_DEFINE:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2026 expand_what = EXP_DEFINE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2027 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2028 case SIGNCMD_PLACE:
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2029 // List placed signs
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2030 if (VIM_ISDIGIT(*begin_subcmd_args))
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2031 // :sign place {id} {args}...
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2032 expand_what = EXP_PLACE;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2033 else
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2034 // :sign place {args}...
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2035 expand_what = EXP_LIST;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2036 break;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2037 case SIGNCMD_LIST:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2038 case SIGNCMD_UNDEFINE:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2039 // :sign list <CTRL-D>
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2040 // :sign undefine <CTRL-D>
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2041 expand_what = EXP_SIGN_NAMES;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2042 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2043 case SIGNCMD_JUMP:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2044 case SIGNCMD_UNPLACE:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2045 expand_what = EXP_UNPLACE;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2046 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2047 default:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2048 xp->xp_context = EXPAND_NOTHING;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2049 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2050 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2051 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2052 {
15418
51b3c36b0523 patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents: 15402
diff changeset
2053 // Expand last argument value (after equal sign).
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2054 xp->xp_pattern = p + 1;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2055 switch (cmd_idx)
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2056 {
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2057 case SIGNCMD_DEFINE:
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2058 if (STRNCMP(last, "texthl", 6) == 0
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2059 || STRNCMP(last, "linehl", 6) == 0)
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2060 xp->xp_context = EXPAND_HIGHLIGHT;
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2061 else if (STRNCMP(last, "icon", 4) == 0)
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2062 xp->xp_context = EXPAND_FILES;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2063 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2064 xp->xp_context = EXPAND_NOTHING;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2065 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2066 case SIGNCMD_PLACE:
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2067 if (STRNCMP(last, "name", 4) == 0)
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2068 expand_what = EXP_SIGN_NAMES;
15864
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2069 else if (STRNCMP(last, "group", 5) == 0)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2070 expand_what = EXP_SIGN_GROUPS;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2071 else if (STRNCMP(last, "file", 4) == 0)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2072 xp->xp_context = EXPAND_BUFFERS;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2073 else
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2074 xp->xp_context = EXPAND_NOTHING;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2075 break;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2076 case SIGNCMD_UNPLACE:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2077 case SIGNCMD_JUMP:
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2078 if (STRNCMP(last, "group", 5) == 0)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2079 expand_what = EXP_SIGN_GROUPS;
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2080 else if (STRNCMP(last, "file", 4) == 0)
9e0154efac3a patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents: 15605
diff changeset
2081 xp->xp_context = EXPAND_BUFFERS;
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2082 else
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2083 xp->xp_context = EXPAND_NOTHING;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2084 break;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2085 default:
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2086 xp->xp_context = EXPAND_NOTHING;
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2087 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2088 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2089 }
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2090 # endif
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2091
17218
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2092 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2093 * "sign_define()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2094 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2095 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2096 f_sign_define(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2097 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2098 char_u *name;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2099 dict_T *dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2100 char_u *icon = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2101 char_u *linehl = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2102 char_u *text = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2103 char_u *texthl = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2104
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2105 rettv->vval.v_number = -1;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2106
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2107 name = tv_get_string_chk(&argvars[0]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2108 if (name == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2109 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2110
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2111 if (argvars[1].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2112 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2113 if (argvars[1].v_type != VAR_DICT)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2114 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2115 emsg(_(e_dictreq));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2116 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2117 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2118
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2119 // sign attributes
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2120 dict = argvars[1].vval.v_dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2121 if (dict_find(dict, (char_u *)"icon", -1) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2122 icon = dict_get_string(dict, (char_u *)"icon", TRUE);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2123 if (dict_find(dict, (char_u *)"linehl", -1) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2124 linehl = dict_get_string(dict, (char_u *)"linehl", TRUE);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2125 if (dict_find(dict, (char_u *)"text", -1) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2126 text = dict_get_string(dict, (char_u *)"text", TRUE);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2127 if (dict_find(dict, (char_u *)"texthl", -1) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2128 texthl = dict_get_string(dict, (char_u *)"texthl", TRUE);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2129 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2130
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2131 if (sign_define_by_name(name, icon, linehl, text, texthl) == OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2132 rettv->vval.v_number = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2133
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2134 vim_free(icon);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2135 vim_free(linehl);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2136 vim_free(text);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2137 vim_free(texthl);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2138 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2139
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2140 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2141 * "sign_getdefined()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2142 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2143 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2144 f_sign_getdefined(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2145 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2146 char_u *name = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2147
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2148 if (rettv_list_alloc_id(rettv, aid_sign_getdefined) != OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2149 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2150
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2151 if (argvars[0].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2152 name = tv_get_string(&argvars[0]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2153
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2154 sign_getlist(name, rettv->vval.v_list);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2155 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2156
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2157 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2158 * "sign_getplaced()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2159 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2160 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2161 f_sign_getplaced(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2162 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2163 buf_T *buf = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2164 dict_T *dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2165 dictitem_T *di;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2166 linenr_T lnum = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2167 int sign_id = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2168 char_u *group = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2169 int notanum = FALSE;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2170
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2171 if (rettv_list_alloc_id(rettv, aid_sign_getplaced) != OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2172 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2173
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2174 if (argvars[0].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2175 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2176 // get signs placed in the specified buffer
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2177 buf = get_buf_arg(&argvars[0]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2178 if (buf == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2179 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2180
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2181 if (argvars[1].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2182 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2183 if (argvars[1].v_type != VAR_DICT ||
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2184 ((dict = argvars[1].vval.v_dict) == NULL))
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2185 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2186 emsg(_(e_dictreq));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2187 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2188 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2189 if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2190 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2191 // get signs placed at this line
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2192 (void)tv_get_number_chk(&di->di_tv, &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2193 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2194 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2195 lnum = tv_get_lnum(&di->di_tv);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2196 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2197 if ((di = dict_find(dict, (char_u *)"id", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2198 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2199 // get sign placed with this identifier
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2200 sign_id = (int)tv_get_number_chk(&di->di_tv, &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2201 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2202 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2203 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2204 if ((di = dict_find(dict, (char_u *)"group", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2205 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2206 group = tv_get_string_chk(&di->di_tv);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2207 if (group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2208 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2209 if (*group == '\0') // empty string means global group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2210 group = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2211 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2212 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2213 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2214
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2215 sign_get_placed(buf, lnum, sign_id, group, rettv->vval.v_list);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2216 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2217
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2218 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2219 * "sign_jump()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2220 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2221 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2222 f_sign_jump(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2223 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2224 int sign_id;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2225 char_u *sign_group = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2226 buf_T *buf;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2227 int notanum = FALSE;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2228
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2229 rettv->vval.v_number = -1;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2230
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2231 // Sign identifier
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2232 sign_id = (int)tv_get_number_chk(&argvars[0], &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2233 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2234 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2235 if (sign_id <= 0)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2236 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2237 emsg(_(e_invarg));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2238 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2239 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2240
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2241 // Sign group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2242 sign_group = tv_get_string_chk(&argvars[1]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2243 if (sign_group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2244 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2245 if (sign_group[0] == '\0')
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2246 sign_group = NULL; // global sign group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2247 else
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2248 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2249 sign_group = vim_strsave(sign_group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2250 if (sign_group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2251 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2252 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2253
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2254 // Buffer to place the sign
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2255 buf = get_buf_arg(&argvars[2]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2256 if (buf == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2257 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2258
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2259 rettv->vval.v_number = sign_jump(sign_id, sign_group, buf);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2260
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2261 cleanup:
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2262 vim_free(sign_group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2263 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2264
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2265 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2266 * "sign_place()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2267 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2268 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2269 f_sign_place(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2270 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2271 int sign_id;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2272 char_u *group = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2273 char_u *sign_name;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2274 buf_T *buf;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2275 dict_T *dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2276 dictitem_T *di;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2277 linenr_T lnum = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2278 int prio = SIGN_DEF_PRIO;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2279 int notanum = FALSE;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2280
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2281 rettv->vval.v_number = -1;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2282
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2283 // Sign identifier
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2284 sign_id = (int)tv_get_number_chk(&argvars[0], &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2285 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2286 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2287 if (sign_id < 0)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2288 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2289 emsg(_(e_invarg));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2290 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2291 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2292
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2293 // Sign group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2294 group = tv_get_string_chk(&argvars[1]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2295 if (group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2296 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2297 if (group[0] == '\0')
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2298 group = NULL; // global sign group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2299 else
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2300 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2301 group = vim_strsave(group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2302 if (group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2303 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2304 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2305
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2306 // Sign name
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2307 sign_name = tv_get_string_chk(&argvars[2]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2308 if (sign_name == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2309 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2310
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2311 // Buffer to place the sign
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2312 buf = get_buf_arg(&argvars[3]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2313 if (buf == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2314 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2315
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2316 if (argvars[4].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2317 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2318 if (argvars[4].v_type != VAR_DICT ||
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2319 ((dict = argvars[4].vval.v_dict) == NULL))
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2320 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2321 emsg(_(e_dictreq));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2322 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2323 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2324
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2325 // Line number where the sign is to be placed
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2326 if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2327 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2328 (void)tv_get_number_chk(&di->di_tv, &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2329 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2330 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2331 lnum = tv_get_lnum(&di->di_tv);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2332 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2333 if ((di = dict_find(dict, (char_u *)"priority", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2334 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2335 // Sign priority
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2336 prio = (int)tv_get_number_chk(&di->di_tv, &notanum);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2337 if (notanum)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2338 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2339 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2340 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2341
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2342 if (sign_place(&sign_id, group, sign_name, buf, lnum, prio) == OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2343 rettv->vval.v_number = sign_id;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2344
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2345 cleanup:
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2346 vim_free(group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2347 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2348
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2349 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2350 * "sign_undefine()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2351 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2352 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2353 f_sign_undefine(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2354 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2355 char_u *name;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2356
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2357 rettv->vval.v_number = -1;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2358
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2359 if (argvars[0].v_type == VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2360 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2361 // Free all the signs
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2362 free_signs();
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2363 rettv->vval.v_number = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2364 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2365 else
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2366 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2367 // Free only the specified sign
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2368 name = tv_get_string_chk(&argvars[0]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2369 if (name == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2370 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2371
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2372 if (sign_undefine_by_name(name) == OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2373 rettv->vval.v_number = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2374 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2375 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2376
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2377 /*
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2378 * "sign_unplace()" function
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2379 */
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2380 void
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2381 f_sign_unplace(typval_T *argvars, typval_T *rettv)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2382 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2383 dict_T *dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2384 dictitem_T *di;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2385 int sign_id = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2386 buf_T *buf = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2387 char_u *group = NULL;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2388
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2389 rettv->vval.v_number = -1;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2390
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2391 if (argvars[0].v_type != VAR_STRING)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2392 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2393 emsg(_(e_invarg));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2394 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2395 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2396
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2397 group = tv_get_string(&argvars[0]);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2398 if (group[0] == '\0')
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2399 group = NULL; // global sign group
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2400 else
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2401 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2402 group = vim_strsave(group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2403 if (group == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2404 return;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2405 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2406
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2407 if (argvars[1].v_type != VAR_UNKNOWN)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2408 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2409 if (argvars[1].v_type != VAR_DICT)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2410 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2411 emsg(_(e_dictreq));
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2412 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2413 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2414 dict = argvars[1].vval.v_dict;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2415
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2416 if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2417 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2418 buf = get_buf_arg(&di->di_tv);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2419 if (buf == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2420 goto cleanup;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2421 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2422 if (dict_find(dict, (char_u *)"id", -1) != NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2423 sign_id = dict_get_number(dict, (char_u *)"id");
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2424 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2425
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2426 if (buf == NULL)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2427 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2428 // Delete the sign in all the buffers
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2429 FOR_ALL_BUFFERS(buf)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2430 if (sign_unplace(sign_id, group, buf, 0) == OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2431 rettv->vval.v_number = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2432 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2433 else
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2434 {
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2435 if (sign_unplace(sign_id, group, buf, 0) == OK)
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2436 rettv->vval.v_number = 0;
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2437 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2438
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2439 cleanup:
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2440 vim_free(group);
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2441 }
210c4c5f783d patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents: 17105
diff changeset
2442
15330
a6330a49e036 patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2443 #endif /* FEAT_SIGNS */