Mercurial > vim
annotate src/sign.c @ 18603:f249b44039e0 v8.1.2295
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Commit: https://github.com/vim/vim/commit/4eb7dae255abc271cf313d4c75839577f1424183
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Nov 12 22:33:45 2019 +0100
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Problem: If buffer of popup is in another window cursorline sign shows.
Solution: Check the group of the sign.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 12 Nov 2019 22:45:05 +0100 |
parents | 1848b3e07266 |
children | b29d8a06e72c |
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 |
17659
121bdff812b4
patch 8.1.1827: allocating more memory than needed for extended structs
Bram Moolenaar <Bram@vim.org>
parents:
17440
diff
changeset
|
88 group = alloc(offsetof(signgroup_T, sg_name) + STRLEN(groupname) + 1); |
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); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
92 group->sg_refcount = 1; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
93 group->sg_next_sign_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
|
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); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
100 group->sg_refcount++; |
15330
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); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
120 group->sg_refcount--; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
121 if (group->sg_refcount == 0) |
15330
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'. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
132 * A sign can either be in the global group (sign->se_group == NULL) |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
136 sign_in_group(sign_entry_T *sign, char_u *group) |
15330
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) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
139 || (group == NULL && sign->se_group == NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
140 || (group != NULL && sign->se_group != NULL |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
141 && STRCMP(group, sign->se_group->sg_name) == 0)); |
15330
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; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
152 sign_entry_T *sign; |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
170 id = group->sg_next_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
|
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 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
176 if (id == sign->se_id && 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
|
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
194 sign_entry_T *prev, // previous sign entry |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
195 sign_entry_T *next, // next sign entry |
15330
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 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
202 sign_entry_T *newsign; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
204 newsign = lalloc_id(sizeof(sign_entry_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 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
207 newsign->se_id = id; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
208 newsign->se_lnum = lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
209 newsign->se_typenr = typenr; |
15330
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 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
212 newsign->se_group = sign_group_ref(group); |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
213 if (newsign->se_group == NULL) |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
220 newsign->se_group = NULL; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
221 newsign->se_priority = prio; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
222 newsign->se_next = next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
223 newsign->se_prev = prev; |
15330
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) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
225 next->se_prev = newsign; |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
245 prev->se_next = newsign; |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
255 sign_entry_T *prev, // previous sign entry |
15330
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 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
262 sign_entry_T *sign; |
15330
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. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
266 while (prev != NULL && prev->se_lnum == lnum && prev->se_priority <= prio) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
267 prev = prev->se_prev; |
15330
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 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
271 sign = prev->se_next; |
15330
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 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
277 * Lookup a sign by typenr. Returns NULL if sign is not found. |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
278 */ |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
279 static sign_T * |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
280 find_sign_by_typenr(int typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
281 { |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
282 sign_T *sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
283 |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
284 for (sp = first_sign; sp != NULL; sp = sp->sn_next) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
285 if (sp->sn_typenr == typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
286 return sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
287 return NULL; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
288 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
289 |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
290 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 * 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
|
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 char_u * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 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
|
295 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 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
|
297 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 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
|
299 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
|
300 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
|
301 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
|
302 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
303 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
304 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 * 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
|
306 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 static dict_T * |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
308 sign_get_info(sign_entry_T *sign) |
15330
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 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
|
311 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 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
|
313 return NULL; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
314 dict_add_number(d, "id", sign->se_id); |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
315 dict_add_string(d, "group", (sign->se_group == NULL) ? |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
316 (char_u *)"" : sign->se_group->sg_name); |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
317 dict_add_number(d, "lnum", sign->se_lnum); |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
318 dict_add_string(d, "name", sign_typenr2name(sign->se_typenr)); |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
319 dict_add_number(d, "priority", sign->se_priority); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 return d; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
322 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
324 /* |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
325 * 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
|
326 * 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
|
327 * 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
|
328 */ |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
329 static void |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
330 sign_sort_by_prio_on_line(buf_T *buf, sign_entry_T *sign) |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
331 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
332 sign_entry_T *p = NULL; |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
333 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
334 // 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
|
335 // the sign is already sorted by priority, then return. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
336 if ((sign->se_prev == NULL |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
337 || sign->se_prev->se_lnum != sign->se_lnum |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
338 || sign->se_prev->se_priority > sign->se_priority) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
339 && (sign->se_next == NULL |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
340 || sign->se_next->se_lnum != sign->se_lnum |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
341 || sign->se_next->se_priority < sign->se_priority)) |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
342 return; |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
343 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
344 // 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
|
345 // 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
|
346 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
347 // 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
|
348 p = sign; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
349 while (p->se_prev != NULL && p->se_prev->se_lnum == sign->se_lnum |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
350 && p->se_prev->se_priority <= sign->se_priority) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
351 p = p->se_prev; |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
352 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
353 if (p == sign) |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
354 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
355 // 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
|
356 // 'sign'. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
357 p = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
358 while (p->se_next != NULL && p->se_next->se_lnum == sign->se_lnum |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
359 && p->se_next->se_priority > sign->se_priority) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
360 p = p->se_next; |
16978
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 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
363 // 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
|
364 if (buf->b_signlist == sign) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
365 buf->b_signlist = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
366 if (sign->se_prev != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
367 sign->se_prev->se_next = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
368 if (sign->se_next != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
369 sign->se_next->se_prev = sign->se_prev; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
370 sign->se_prev = NULL; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
371 sign->se_next = NULL; |
16978
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 // Re-insert 'sign' at the right place |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
374 if (p->se_priority <= sign->se_priority) |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
375 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
376 // 'sign' has a higher priority and should be inserted before 'p' |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
377 sign->se_prev = p->se_prev; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
378 sign->se_next = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
379 p->se_prev = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
380 if (sign->se_prev != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
381 sign->se_prev->se_next = sign; |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
382 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
|
383 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
|
384 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
385 else |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
386 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
387 // 'sign' has a lower priority and should be inserted after 'p' |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
388 sign->se_prev = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
389 sign->se_next = p->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
390 p->se_next = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
391 if (sign->se_next != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
392 sign->se_next->se_prev = sign; |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
393 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
394 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
395 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
396 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 * 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
|
398 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
400 buf_addsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
408 sign_entry_T *sign; // a sign in the signlist |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
409 sign_entry_T *prev; // the previous sign |
15330
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 prev = NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
412 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
|
413 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
414 if (lnum == sign->se_lnum && id == sign->se_id |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
415 && 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
|
416 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 // Update an existing sign |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
418 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
419 sign->se_priority = prio; |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
420 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
|
421 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
422 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
423 else if (lnum < sign->se_lnum) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
424 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
425 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
|
426 lnum, typenr); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
428 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
429 prev = sign; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
431 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
432 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
|
433 return; |
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 |
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 * 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
|
438 * 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
|
439 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 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
|
444 char_u *group, // sign group |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
445 int typenr, // typenr of sign we are adding |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
446 int prio) // sign priority |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
448 sign_entry_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
|
449 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 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
|
451 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
452 if (sign->se_id == markId && 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
|
453 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
454 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
455 sign->se_priority = prio; |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
456 sign_sort_by_prio_on_line(buf, sign); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
457 return sign->se_lnum; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
461 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
|
462 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
463 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
465 * Return the attributes of the first sign placed on line 'lnum' in buffer |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
466 * 'buf'. Used when refreshing the screen. Returns TRUE if a sign is found on |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
467 * 'lnum', FALSE otherwise. |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 int |
18603
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
470 buf_get_signattrs(win_T *wp, linenr_T lnum, sign_attrs_T *sattr) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
471 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
472 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
473 sign_T *sp; |
18603
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
474 buf_T *buf = wp->w_buffer; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
475 |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
476 vim_memset(sattr, 0, sizeof(sign_attrs_T)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 FOR_ALL_SIGNS_IN_BUF(buf, sign) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
479 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
480 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
481 // Signs are sorted by line number in the buffer. No need to check |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
482 // for signs after the specified line number 'lnum'. |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
483 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
484 |
18603
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
485 if (sign->se_lnum == lnum |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
486 # ifdef FEAT_TEXT_PROP |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
487 && sign_in_group(sign, (char_u *)"popupmenu") |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
488 == (WIN_IS_POPUP(wp) ? TRUE : FALSE) |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
489 # endif |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
490 ) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
491 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
492 sattr->sat_typenr = sign->se_typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
493 sp = find_sign_by_typenr(sign->se_typenr); |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
494 if (sp == NULL) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
495 return FALSE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
496 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
497 # ifdef FEAT_SIGN_ICONS |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
498 sattr->sat_icon = sp->sn_image; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
499 # endif |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
500 sattr->sat_text = sp->sn_text; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
501 if (sattr->sat_text != NULL && sp->sn_text_hl > 0) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
502 sattr->sat_texthl = syn_id2attr(sp->sn_text_hl); |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
503 if (sp->sn_line_hl > 0) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
504 sattr->sat_linehl = syn_id2attr(sp->sn_line_hl); |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
505 return TRUE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
506 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
507 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
508 return FALSE; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
509 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
510 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
511 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 * 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
|
513 * 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
|
514 * 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
|
515 * 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
|
516 * 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
|
517 * 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
|
518 * 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
|
519 * 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
|
520 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
521 linenr_T |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
522 buf_delsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
523 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
|
524 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
|
525 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
|
526 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
|
527 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
528 sign_entry_T **lastp; // pointer to pointer to current sign |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
529 sign_entry_T *sign; // a sign in a b_signlist |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
530 sign_entry_T *next; // the next sign in a b_signlist |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
531 linenr_T lnum; // line number whose sign was deleted |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
532 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
533 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
|
534 lnum = 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
535 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
|
536 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
537 next = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
538 if ((id == 0 || sign->se_id == id) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
539 && (atlnum == 0 || sign->se_lnum == atlnum) |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
540 && 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
|
541 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
542 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
543 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
544 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
545 next->se_prev = sign->se_prev; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
546 lnum = sign->se_lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
547 if (sign->se_group != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
548 sign_group_unref(sign->se_group->sg_name); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
549 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
|
550 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
|
551 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
552 // 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
|
553 // 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
|
554 // 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
|
555 // 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
|
556 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
|
557 || (*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
|
558 || (*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
|
559 break; |
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 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
562 lastp = &sign->se_next; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
563 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
564 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
565 // 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
|
566 // 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
|
567 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
|
568 { |
882bbbdc9c76
patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
569 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
|
570 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
|
571 } |
15330
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 return lnum; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
578 * 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
|
579 * 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
|
580 * 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
|
581 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 buf_findsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 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
|
585 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
|
586 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
|
587 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
588 sign_entry_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
|
589 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 FOR_ALL_SIGNS_IN_BUF(buf, sign) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
591 if (sign->se_id == id && sign_in_group(sign, group)) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
592 return sign->se_lnum; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
595 } |
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 * 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
|
599 * 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
|
600 */ |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
601 static sign_entry_T * |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 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
|
606 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
607 sign_entry_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
|
608 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
609 FOR_ALL_SIGNS_IN_BUF(buf, sign) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
610 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
611 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
612 // Signs are sorted by line number in the buffer. No need to check |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
613 // for signs after the specified line number 'lnum'. |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
614 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
615 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
616 if (sign->se_lnum == lnum && 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
|
617 return sign; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
618 } |
15330
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 NULL; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 * 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
|
625 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
626 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
627 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
|
628 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
|
629 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
|
630 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
|
631 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
632 sign_entry_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
|
633 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 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
|
635 if (sign != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
636 return sign->se_id; |
15330
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 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
640 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 # 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
|
642 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
643 * 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
|
644 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 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
|
647 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
|
648 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
|
649 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
|
650 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
651 sign_entry_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
|
652 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 FOR_ALL_SIGNS_IN_BUF(buf, sign) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
654 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
655 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
656 // Signs are sorted by line number in the buffer. No need to check |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
657 // for signs after the specified line number 'lnum'. |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
658 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
659 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
660 if (sign->se_lnum == lnum && sign->se_typenr == typenr) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
661 return sign->se_id; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
662 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
664 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
667 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 # 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
|
669 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 * 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
|
671 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 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
|
674 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
675 sign_entry_T *sign; // a sign in the signlist |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
676 int count = 0; |
15330
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 FOR_ALL_SIGNS_IN_BUF(buf, sign) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
679 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
680 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
681 // Signs are sorted by line number in the buffer. No need to check |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
682 // for signs after the specified line number 'lnum'. |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
683 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
684 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
685 if (sign->se_lnum == lnum) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
686 if (sign_get_image(sign->se_typenr) != NULL) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
687 count++; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
688 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
689 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 return count; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
691 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 # 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
|
693 # 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
|
694 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
696 * 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
|
697 * 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
|
698 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
699 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
700 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
|
701 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
702 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
703 sign_entry_T **lastp; // pointer to pointer to current sign |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
704 sign_entry_T *next; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
705 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
706 // 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
|
707 // 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
|
708 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
|
709 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
710 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
|
711 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
|
712 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
713 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
714 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
|
715 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
|
716 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
717 next = sign->se_next; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 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
|
719 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
720 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
721 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
722 next->se_prev = sign->se_prev; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
723 if (sign->se_group != NULL) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
724 sign_group_unref(sign->se_group->sg_name); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
725 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
|
726 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
727 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
728 lastp = &sign->se_next; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
729 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
730 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
731 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
732 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 * 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
|
734 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
735 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
736 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
|
737 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
738 buf_T *buf; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
739 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
740 char lbuf[MSG_BUF_LEN]; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
741 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
|
742 |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
743 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
|
744 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
|
745 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
|
746 buf = firstbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
747 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
748 buf = rbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 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
|
750 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
751 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
|
752 { |
15386
317846db300a
patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents:
15378
diff
changeset
|
753 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
|
754 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
|
755 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
|
756 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
757 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
|
758 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
759 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
|
760 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
761 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
|
762 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
763 if (sign->se_group != NULL) |
15386
317846db300a
patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents:
15378
diff
changeset
|
764 vim_snprintf(group, MSG_BUF_LEN, _(" group=%s"), |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
765 sign->se_group->sg_name); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 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
|
768 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
|
769 _(" line=%ld id=%d%s name=%s priority=%d"), |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
770 (long)sign->se_lnum, sign->se_id, group, |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
771 sign_typenr2name(sign->se_typenr), sign->se_priority); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
772 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
|
773 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
|
774 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 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
|
776 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 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
|
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 * 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
|
783 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
784 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 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
|
786 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
|
787 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
|
788 long amount, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
789 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
|
790 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
791 sign_entry_T *sign; // a sign in a b_signlist |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
792 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
|
793 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
794 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
|
795 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
796 // Ignore changes to lines after the sign |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
797 if (sign->se_lnum < line1) |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
798 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
799 new_lnum = sign->se_lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
800 if (sign->se_lnum >= line1 && sign->se_lnum <= line2) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
801 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
802 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
|
803 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
|
804 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
805 else if (sign->se_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
|
806 // 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
|
807 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
|
808 |
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
809 // 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
|
810 // 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
|
811 // 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
|
812 if (new_lnum <= curbuf->b_ml.ml_line_count) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
813 sign->se_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
|
814 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
815 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
818 * 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
|
819 * "*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
|
820 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
821 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 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
|
823 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
|
824 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
|
825 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
826 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 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
|
828 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 *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
|
830 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
|
831 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
|
832 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 *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
|
834 return idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
835 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
836 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
837 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
838 * 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
|
839 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
840 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
|
841 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
|
842 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
843 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
|
844 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
845 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
|
846 *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
|
847 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
|
848 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
849 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
|
850 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
851 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
|
852 *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
|
853 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
854 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
855 return sp; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
857 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
858 /* |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
859 * 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
|
860 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
861 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
|
862 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
|
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 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
|
865 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
|
866 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
|
867 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
868 // 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
|
869 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
|
870 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
|
871 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
|
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 // 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
|
874 // 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
|
875 // 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
|
876 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
|
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 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
|
879 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
880 ++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
|
881 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
|
882 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
|
883 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
|
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 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
|
886 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
|
887 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
|
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 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
|
890 continue; |
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 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
|
893 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
894 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
895 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
|
896 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
|
897 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
|
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 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
|
900 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
|
901 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
902 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
|
903 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
|
904 } |
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 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
|
907 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
908 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
909 /* |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
910 * 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
|
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 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
|
913 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
|
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 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
|
916 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
|
917 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
|
918 # 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
|
919 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
|
920 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
921 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
|
922 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
|
923 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
|
924 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
|
925 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
926 # endif |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
927 } |
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 /* |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
930 * 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
|
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 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
|
933 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
|
934 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
935 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
|
936 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
|
937 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
|
938 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
|
939 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
940 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
|
941 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
942 // 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
|
943 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
|
944 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
|
945 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
946 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
|
947 --endp; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
948 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
949 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
950 // 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
|
951 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
|
952 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
953 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
|
954 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
|
955 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
956 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
|
957 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
958 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
|
959 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
960 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
961 else |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
962 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
963 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
|
964 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
|
965 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
966 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
|
967 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
968 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
969 // 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
|
970 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
|
971 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
972 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
|
973 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
|
974 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
975 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
976 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
|
977 // 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
|
978 // 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
|
979 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
|
980 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
|
981 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
982 // 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
|
983 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
|
984 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
|
985 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
986 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
|
987 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
988 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
989 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
990 * 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
|
991 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 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
|
994 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
|
995 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
|
996 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
|
997 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
|
998 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
|
999 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 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
|
1001 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
|
1002 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 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
|
1004 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
|
1005 { |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1006 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
|
1007 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
|
1008 return FAIL; |
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 // 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
|
1011 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
|
1012 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
|
1013 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 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
|
1015 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 // 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
|
1018 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
|
1019 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
|
1020 |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1021 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
|
1022 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
|
1023 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 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
|
1025 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
|
1026 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 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
|
1028 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
|
1029 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 /* |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1034 * Return TRUE if sign "name" exists. |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1035 */ |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1036 int |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1037 sign_exists_by_name(char_u *name) |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1038 { |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1039 return sign_find(name, NULL) != NULL; |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1040 } |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1041 |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1042 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 * 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
|
1044 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 int |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1046 sign_undefine_by_name(char_u *name, int give_error) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 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
|
1049 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
|
1050 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 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
|
1052 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
|
1053 { |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1054 if (give_error) |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1055 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
|
1056 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 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
|
1059 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1064 * 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
|
1065 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 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
|
1068 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 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
|
1070 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 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
|
1072 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
|
1073 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
|
1074 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1075 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
|
1076 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1077 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1078 static void |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1079 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
|
1080 { |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1081 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
|
1082 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
|
1083 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1084 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
|
1085 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
|
1086 && (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
|
1087 && (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
|
1088 && (*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
|
1089 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
|
1090 } |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1091 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 /* |
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
|
1093 * 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
|
1094 */ |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1095 int |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 sign_place( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 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
|
1098 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
|
1099 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
|
1100 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
|
1101 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
|
1102 int prio) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1103 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 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
|
1105 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1106 // 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
|
1107 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
|
1108 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 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
|
1111 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
|
1112 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 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
|
1114 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1115 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
|
1116 return FAIL; |
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 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
|
1119 *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
|
1120 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 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
|
1122 // ":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
|
1123 // 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
|
1124 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
|
1125 else |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
1126 // ":sign place {id} file={fname}": change sign type and/or priority |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
1127 lnum = buf_change_sign_type(buf, *sign_id, sign_group, sp->sn_typenr, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
1128 prio); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 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
|
1130 { |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1131 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
|
1132 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1133 // 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
|
1134 // 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
|
1135 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
|
1136 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1138 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1139 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
|
1140 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1142 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1143 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 * 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
|
1148 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1149 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
|
1150 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
|
1151 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 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
|
1153 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 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
|
1156 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 // 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
|
1158 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
|
1159 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
|
1160 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 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
|
1164 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 // 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
|
1166 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
|
1167 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
|
1168 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1171 // 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
|
1172 // 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
|
1173 // 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
|
1174 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
|
1175 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
|
1176 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 * 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
|
1182 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1183 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 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
|
1185 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 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
|
1187 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 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
|
1189 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
|
1190 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
|
1191 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1192 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
|
1193 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1196 * 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
|
1197 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1198 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
|
1199 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
|
1200 { |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1201 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
|
1202 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1203 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
|
1204 { |
15490
98c35d312987
patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents:
15484
diff
changeset
|
1205 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
|
1206 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
|
1207 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1208 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1209 // 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
|
1210 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
|
1211 { // ... 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
|
1212 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
|
1213 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
|
1214 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
|
1215 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1216 else |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1217 { // ... 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
|
1218 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
|
1219 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1220 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
|
1221 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1222 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
|
1223 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
|
1224 } |
16768
695d9ef00b03
patch 8.1.1386: unessesary type casts for lalloc()
Bram Moolenaar <Bram@vim.org>
parents:
15864
diff
changeset
|
1225 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
|
1226 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
|
1227 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
|
1228 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
|
1229 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
|
1230 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
|
1231 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1232 # 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
|
1233 foldOpenCursor(); |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1234 # endif |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1235 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1236 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
|
1237 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1238 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1239 /* |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1240 * ":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
|
1241 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 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
|
1244 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 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
|
1246 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
|
1247 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
|
1248 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
|
1249 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
|
1250 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
|
1251 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
|
1252 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 // 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
|
1254 for (;;) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 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
|
1257 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
|
1258 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 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
|
1260 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
|
1261 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 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
|
1264 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1265 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
|
1266 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 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
|
1269 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 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
|
1271 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 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
|
1274 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 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
|
1276 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 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
|
1279 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1282 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
|
1283 failed = TRUE; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1287 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 if (!failed) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 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
|
1290 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 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
|
1292 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
|
1293 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
|
1294 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
|
1295 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1298 * ":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
|
1299 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1300 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 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
|
1302 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
|
1303 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
|
1304 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
|
1305 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 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
|
1307 int prio) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 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
|
1310 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 // 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
|
1312 // :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
|
1313 // :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
|
1314 // :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
|
1315 // :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
|
1316 // :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
|
1317 // :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
|
1318 // :sign place |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 // :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
|
1320 // :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
|
1321 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
|
1322 || (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
|
1323 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
|
1324 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 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
|
1326 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 // 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
|
1330 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
|
1331 || (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
|
1332 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1333 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
|
1334 return; |
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 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
|
1338 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1342 * ":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
|
1343 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 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
|
1346 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
|
1347 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
|
1348 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
|
1349 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 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
|
1351 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 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
|
1353 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1354 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
|
1355 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 } |
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 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
|
1359 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 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
|
1361 // :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
|
1362 // :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
|
1363 // :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
|
1364 // :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
|
1365 // :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
|
1366 // :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
|
1367 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
|
1368 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 // :sign unplace * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 // :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
|
1371 // :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
|
1372 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
|
1373 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
|
1374 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
|
1375 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 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
|
1379 // :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
|
1380 // :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
|
1381 // :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
|
1382 // :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
|
1383 // :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
|
1384 // :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
|
1385 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
|
1386 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 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
|
1389 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 // :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
|
1391 // :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
|
1392 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
|
1393 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 else |
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 // :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
|
1397 // :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
|
1398 // :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
|
1399 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
|
1400 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
|
1401 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 } |
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 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1407 * 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
|
1408 * :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
|
1409 * :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
|
1410 * :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
|
1411 * :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
|
1412 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 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
|
1415 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
|
1416 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
|
1417 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
|
1418 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 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
|
1420 { |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1421 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
|
1422 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1423 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
|
1424 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1427 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
|
1428 || 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
|
1429 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 // 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
|
1431 // 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
|
1432 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
|
1433 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1434 } |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1435 (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
|
1436 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 * 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
|
1440 * ":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
|
1441 * 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
|
1442 * 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
|
1443 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 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
|
1446 int cmd, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1447 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
|
1448 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
|
1449 int *signid, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1450 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
|
1451 int *prio, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 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
|
1453 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
|
1454 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 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
|
1456 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
|
1457 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
|
1458 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
|
1459 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1460 // 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
|
1461 arg1 = 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 (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
|
1463 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1464 *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
|
1465 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
|
1466 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1467 *signid = -1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 arg = arg1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1469 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1470 else |
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 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
|
1475 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1476 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
|
1477 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 *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
|
1480 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
|
1481 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
|
1482 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1483 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
|
1484 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1485 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
|
1486 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1487 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
|
1488 return FAIL; |
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 *signid = -2; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 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
|
1492 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1493 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
|
1494 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1495 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 name = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 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
|
1498 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
|
1499 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1500 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
|
1501 ++name; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1502 *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
|
1503 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 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
|
1505 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 arg += 6; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1507 *group = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1508 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
|
1509 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
|
1510 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1512 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
|
1513 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1514 arg += 9; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 *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
|
1516 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
|
1517 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 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
|
1519 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1520 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1522 *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
|
1523 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1524 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 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
|
1526 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1527 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1529 *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
|
1530 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
|
1531 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
|
1532 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1533 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1534 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1535 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1536 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
|
1537 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1538 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1539 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
|
1540 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1541 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1542 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
|
1543 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1544 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
|
1545 return FAIL; |
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 |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1548 // 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
|
1549 // 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
|
1550 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
|
1551 || cmd == SIGNCMD_JUMP)) |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1552 *buf = curwin->w_buffer; |
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1553 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1554 return OK; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1558 * ":sign" command |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1559 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1560 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1561 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
|
1562 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1563 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
|
1564 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
|
1565 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1566 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
|
1567 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
|
1568 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 // 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
|
1570 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
|
1571 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
|
1572 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
|
1573 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1574 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
|
1575 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1576 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 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
|
1578 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1579 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
|
1580 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1581 // 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
|
1582 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
|
1583 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1584 // ":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
|
1585 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
|
1586 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
|
1587 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1588 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
|
1589 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
|
1590 else |
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 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
|
1593 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1594 // 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
|
1595 // 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
|
1596 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
|
1597 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
|
1598 *p++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 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
|
1600 ++arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1601 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
|
1602 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 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
|
1604 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
|
1605 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
|
1606 // ":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
|
1607 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
|
1608 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 // ":sign undefine {name}" |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1610 sign_undefine_by_name(name, TRUE); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1611 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 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
|
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 else |
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 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
|
1619 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
|
1620 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
|
1621 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
|
1622 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
|
1623 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1624 // 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
|
1625 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
|
1626 &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
|
1627 return; |
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 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
|
1630 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
|
1631 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
|
1632 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
|
1633 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
|
1634 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
|
1635 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1636 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1639 * 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
|
1640 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1641 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1642 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
|
1643 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1644 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
|
1645 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1646 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
|
1647 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
|
1648 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
|
1649 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
|
1650 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
|
1651 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
|
1652 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1653 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
|
1654 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
|
1655 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
|
1656 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
|
1657 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 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
|
1659 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1660 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
|
1661 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
|
1662 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
|
1663 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
|
1664 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1665 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 * 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
|
1669 * 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
|
1670 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1671 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
|
1672 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
|
1673 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1674 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
|
1675 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
|
1676 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 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
|
1678 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 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
|
1680 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
|
1681 return; |
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 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
|
1685 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 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
|
1687 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 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
|
1689 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 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
|
1691 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1692 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
|
1693 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1694 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1695 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1696 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1697 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1698 * 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
|
1699 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1700 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1701 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
|
1702 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1703 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1704 dict_T *d; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1705 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1706 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
|
1707 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1708 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
|
1709 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
|
1710 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1714 * 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
|
1715 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1716 static 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_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
|
1718 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
|
1719 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
|
1720 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
|
1721 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
|
1722 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
|
1723 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1724 dict_T *d; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1725 list_T *l; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1726 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1727 dict_T *sdict; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1728 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1729 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
|
1730 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 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
|
1732 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1733 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
|
1734 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1735 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
|
1736 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1737 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
|
1738 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 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
|
1740 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1741 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
|
1742 continue; |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1743 if ((lnum == 0 && sign_id == 0) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1744 || (sign_id == 0 && lnum == sign->se_lnum) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1745 || (lnum == 0 && sign_id == sign->se_id) |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1746 || (lnum == sign->se_lnum && sign_id == sign->se_id)) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1748 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
|
1749 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
|
1750 } |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1754 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 * 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
|
1756 * 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
|
1757 * 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
|
1758 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1759 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
|
1760 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
|
1761 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
|
1762 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
|
1763 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
|
1764 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
|
1765 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
|
1766 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1767 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
|
1768 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
|
1769 else |
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 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
|
1772 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1773 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
|
1774 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
|
1775 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1776 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1779 # 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
|
1780 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1781 * 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
|
1782 * 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
|
1783 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1784 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1785 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
|
1786 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1787 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
|
1788 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1789 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
|
1790 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
|
1791 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
|
1792 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 # endif |
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 * 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
|
1797 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1798 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1799 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
|
1800 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1801 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
|
1802 |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1803 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
|
1804 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
|
1805 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1806 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
|
1807 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
|
1808 # 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
|
1809 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
|
1810 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
|
1811 # else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1812 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
|
1813 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1814 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1815 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
|
1816 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1817 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
|
1818 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
|
1819 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1820 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
|
1821 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1822 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
|
1823 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
|
1824 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1825 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
|
1826 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1827 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
|
1828 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1829 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
|
1830 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1831 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
|
1832 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
|
1833 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1834 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
|
1835 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1836 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
|
1837 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1838 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1839 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1840 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1841 * 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
|
1842 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1843 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1844 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
|
1845 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1846 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
|
1847 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
|
1848 # 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
|
1849 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
|
1850 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1851 out_flush(); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1852 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
|
1853 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1854 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1855 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
|
1856 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
|
1857 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
|
1858 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1859 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
|
1860 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
|
1861 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1862 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1863 # 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
|
1864 void * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1865 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
|
1866 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
|
1867 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1868 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
|
1869 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1870 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
|
1871 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
|
1872 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
|
1873 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1874 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1875 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1876 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1877 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1878 * 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
|
1879 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1880 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1881 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
|
1882 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1883 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
|
1884 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
|
1885 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1886 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1887 static enum |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1888 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1889 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
|
1890 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
|
1891 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
|
1892 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
|
1893 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
|
1894 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
|
1895 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
|
1896 } expand_what; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1897 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1898 /* |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1899 * 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
|
1900 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1901 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1902 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
|
1903 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1904 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1905 sign_T *sp; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1906 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1907 // 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
|
1908 current_idx = 0; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1909 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
|
1910 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1911 return sp->sn_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1912 return NULL; |
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 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
|
1917 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1918 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1919 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
|
1920 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1921 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1922 int todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1923 hashitem_T *hi; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1924 signgroup_T *group; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1925 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1926 // 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
|
1927 current_idx = 0; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1928 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
|
1929 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
|
1930 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1931 if (!HASHITEM_EMPTY(hi)) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1932 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1933 --todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1934 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1935 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1936 group = HI2SG(hi); |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1937 return group->sg_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1938 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1939 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1940 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1941 return NULL; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1942 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1943 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1944 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1945 * 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
|
1946 * expansion. |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1947 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1948 char_u * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1949 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
|
1950 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1951 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
|
1952 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1953 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
|
1954 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
|
1955 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
|
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 *define_arg[] = |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1958 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1959 "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
|
1960 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1961 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
|
1962 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1963 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
|
1964 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1965 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
|
1966 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1967 "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
|
1968 "buffer=", NULL |
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 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
|
1971 } |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1972 case EXP_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1973 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1974 char *list_arg[] = |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1975 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1976 "group=", "file=", "buffer=", NULL |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1977 }; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1978 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
|
1979 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1980 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
|
1981 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1982 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
|
1983 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
|
1984 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1985 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
|
1986 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
|
1987 case EXP_SIGN_GROUPS: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1988 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
|
1989 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1990 return NULL; |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1993 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1994 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1995 * 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
|
1996 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1997 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1998 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
|
1999 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2000 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
|
2001 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
|
2002 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
|
2003 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
|
2004 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
|
2005 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2006 // 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
|
2007 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
|
2008 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
|
2009 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
|
2010 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2011 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
|
2012 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
|
2013 // 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
|
2014 // :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
|
2015 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2016 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2017 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
|
2018 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2019 // :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
|
2020 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2021 // 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
|
2022 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
|
2023 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2024 // 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
|
2025 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2026 // :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
|
2027 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2028 // p |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2029 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2030 // 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
|
2031 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
|
2032 do |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2033 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2034 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
|
2035 last = p; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2036 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
|
2037 } 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
|
2038 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2039 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
|
2040 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2041 // :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
|
2042 // | | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2043 // 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
|
2044 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
|
2045 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2046 // 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
|
2047 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
|
2048 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
|
2049 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2050 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
|
2051 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
|
2052 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2053 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2054 // List placed signs |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2055 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
|
2056 // :sign place {id} {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2057 expand_what = EXP_PLACE; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2058 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2059 // :sign place {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2060 expand_what = EXP_LIST; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2061 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2062 case SIGNCMD_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2063 case SIGNCMD_UNDEFINE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2064 // :sign list <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2065 // :sign undefine <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2066 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
|
2067 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2068 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
|
2069 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
|
2070 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
|
2071 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2072 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2073 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
|
2074 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2075 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2076 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2077 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2078 // 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
|
2079 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
|
2080 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
|
2081 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2082 case SIGNCMD_DEFINE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2083 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
|
2084 || 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
|
2085 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
|
2086 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
|
2087 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
|
2088 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2089 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
|
2090 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2091 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2092 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
|
2093 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
|
2094 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
|
2095 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
|
2096 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
|
2097 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
|
2098 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2099 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
|
2100 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2101 case SIGNCMD_UNPLACE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2102 case SIGNCMD_JUMP: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2103 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
|
2104 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
|
2105 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
|
2106 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
|
2107 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2108 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
|
2109 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2110 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2111 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
|
2112 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2113 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2114 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2115 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2116 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2117 * Define a sign using the attributes in 'dict'. Returns 0 on success and -1 on |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2118 * failure. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2119 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2120 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2121 sign_define_from_dict(char_u *name_arg, dict_T *dict) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2122 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2123 char_u *name = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2124 char_u *icon = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2125 char_u *linehl = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2126 char_u *text = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2127 char_u *texthl = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2128 int retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2129 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2130 if (name_arg == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2131 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2132 if (dict == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2133 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2134 name = dict_get_string(dict, (char_u *)"name", TRUE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2135 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2136 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2137 name = vim_strsave(name_arg); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2138 if (name == NULL || name[0] == NUL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2139 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2140 if (dict != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2141 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2142 icon = dict_get_string(dict, (char_u *)"icon", TRUE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2143 linehl = dict_get_string(dict, (char_u *)"linehl", TRUE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2144 text = dict_get_string(dict, (char_u *)"text", TRUE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2145 texthl = dict_get_string(dict, (char_u *)"texthl", TRUE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2146 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2147 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2148 if (sign_define_by_name(name, icon, linehl, text, texthl) == OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2149 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2150 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2151 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2152 vim_free(name); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2153 vim_free(icon); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2154 vim_free(linehl); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2155 vim_free(text); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2156 vim_free(texthl); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2157 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2158 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2159 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2160 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2161 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2162 * Define multiple signs using attributes from list 'l' and store the return |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2163 * values in 'retlist'. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2164 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2165 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2166 sign_define_multiple(list_T *l, list_T *retlist) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2167 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2168 listitem_T *li; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2169 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2170 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2171 for (li = l->lv_first; li != NULL; li = li->li_next) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2172 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2173 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2174 if (li->li_tv.v_type == VAR_DICT) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2175 retval = sign_define_from_dict(NULL, li->li_tv.vval.v_dict); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2176 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2177 emsg(_(e_dictreq)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2178 list_append_number(retlist, retval); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2179 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2180 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2181 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2182 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2183 * "sign_define()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2184 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2185 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2186 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
|
2187 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2188 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2189 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2190 if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_UNKNOWN) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2191 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2192 // Define multiple signs |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2193 if (rettv_list_alloc(rettv) != OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2194 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2195 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2196 sign_define_multiple(argvars[0].vval.v_list, rettv->vval.v_list); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2197 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2198 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2199 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2200 // Define a single sign |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2201 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
|
2202 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2203 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
|
2204 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2205 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2206 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2207 if (argvars[1].v_type != VAR_UNKNOWN && argvars[1].v_type != VAR_DICT) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2208 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2209 emsg(_(e_dictreq)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2210 return; |
17218
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 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2213 rettv->vval.v_number = sign_define_from_dict(name, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2214 argvars[1].v_type == VAR_DICT ? argvars[1].vval.v_dict : NULL); |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2215 } |
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 * "sign_getdefined()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2219 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2220 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2221 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
|
2222 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2223 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
|
2224 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2225 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
|
2226 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2227 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2228 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
|
2229 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
|
2230 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2231 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
|
2232 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2233 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2234 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2235 * "sign_getplaced()" function |
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 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2238 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
|
2239 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2240 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
|
2241 dict_T *dict; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2242 dictitem_T *di; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2243 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
|
2244 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
|
2245 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
|
2246 int notanum = FALSE; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2247 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2248 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
|
2249 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2250 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2251 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
|
2252 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2253 // 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
|
2254 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
|
2255 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2256 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2257 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2258 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
|
2259 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2260 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
|
2261 ((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
|
2262 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2263 emsg(_(e_dictreq)); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2264 return; |
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 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
|
2267 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2268 // 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
|
2269 (void)tv_get_number_chk(&di->di_tv, ¬anum); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2270 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2271 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2272 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
|
2273 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2274 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
|
2275 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2276 // 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
|
2277 sign_id = (int)tv_get_number_chk(&di->di_tv, ¬anum); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2278 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2279 return; |
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 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
|
2282 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2283 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
|
2284 if (group == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2285 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2286 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
|
2287 group = NULL; |
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 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2290 } |
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 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
|
2293 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2294 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2295 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2296 * "sign_jump()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2297 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2298 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2299 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
|
2300 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2301 int sign_id; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2302 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
|
2303 buf_T *buf; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2304 int notanum = FALSE; |
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 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
|
2307 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2308 // Sign identifier |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2309 sign_id = (int)tv_get_number_chk(&argvars[0], ¬anum); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2310 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2311 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2312 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
|
2313 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2314 emsg(_(e_invarg)); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2315 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2316 } |
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 // Sign group |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2319 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
|
2320 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
|
2321 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2322 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
|
2323 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
|
2324 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2325 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2326 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
|
2327 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
|
2328 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2329 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2330 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2331 // 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
|
2332 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
|
2333 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2334 goto cleanup; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2335 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2336 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
|
2337 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2338 cleanup: |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2339 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
|
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 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2343 * Place a new sign using the values specified in dict 'dict'. Returns the sign |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2344 * identifier if successfully placed, otherwise returns 0. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2345 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2346 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2347 sign_place_from_dict( |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2348 typval_T *id_tv, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2349 typval_T *group_tv, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2350 typval_T *name_tv, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2351 typval_T *buf_tv, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2352 dict_T *dict) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2353 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2354 int sign_id = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2355 char_u *group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2356 char_u *sign_name = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2357 buf_T *buf = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2358 dictitem_T *di; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2359 linenr_T lnum = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2360 int prio = SIGN_DEF_PRIO; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2361 int notanum = FALSE; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2362 int ret_sign_id = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2363 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2364 // sign identifier |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2365 if (id_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2366 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2367 di = dict_find(dict, (char_u *)"id", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2368 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2369 id_tv = &di->di_tv; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2370 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2371 if (id_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2372 sign_id = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2373 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2374 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2375 sign_id = tv_get_number_chk(id_tv, ¬anum); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2376 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2377 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2378 if (sign_id < 0) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2379 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2380 emsg(_(e_invarg)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2381 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2382 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2383 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2384 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2385 // sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2386 if (group_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2387 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2388 di = dict_find(dict, (char_u *)"group", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2389 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2390 group_tv = &di->di_tv; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2391 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2392 if (group_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2393 group = NULL; // global group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2394 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2395 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2396 group = tv_get_string_chk(group_tv); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2397 if (group == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2398 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2399 if (group[0] == '\0') // global sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2400 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2401 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2402 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2403 group = vim_strsave(group); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2404 if (group == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2405 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2406 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2407 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2408 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2409 // sign name |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2410 if (name_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2411 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2412 di = dict_find(dict, (char_u *)"name", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2413 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2414 name_tv = &di->di_tv; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2415 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2416 if (name_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2417 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2418 sign_name = tv_get_string_chk(name_tv); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2419 if (sign_name == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2420 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2421 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2422 // buffer to place the sign |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2423 if (buf_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2424 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2425 di = dict_find(dict, (char_u *)"buffer", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2426 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2427 buf_tv = &di->di_tv; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2428 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2429 if (buf_tv == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2430 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2431 buf = get_buf_arg(buf_tv); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2432 if (buf == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2433 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2434 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2435 // line number of the sign |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2436 di = dict_find(dict, (char_u *)"lnum", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2437 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2438 { |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2439 lnum = tv_get_lnum(&di->di_tv); |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2440 if (lnum <= 0) |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2441 { |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2442 emsg(_(e_invarg)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2443 goto cleanup; |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2444 } |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2445 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2446 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2447 // sign priority |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2448 di = dict_find(dict, (char_u *)"priority", -1); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2449 if (di != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2450 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2451 prio = (int)tv_get_number_chk(&di->di_tv, ¬anum); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2452 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2453 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2454 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2455 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2456 if (sign_place(&sign_id, group, sign_name, buf, lnum, prio) == OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2457 ret_sign_id = sign_id; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2458 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2459 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2460 vim_free(group); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2461 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2462 return ret_sign_id; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2463 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2464 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2465 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2466 * "sign_place()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2467 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2468 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2469 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
|
2470 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2471 dict_T *dict = NULL; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2472 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2473 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
|
2474 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2475 if (argvars[4].v_type != VAR_UNKNOWN |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2476 && (argvars[4].v_type != VAR_DICT |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2477 || ((dict = argvars[4].vval.v_dict) == NULL))) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2478 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2479 emsg(_(e_dictreq)); |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2480 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2481 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2482 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2483 rettv->vval.v_number = sign_place_from_dict(&argvars[0], &argvars[1], |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2484 &argvars[2], &argvars[3], dict); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2485 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2486 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2487 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2488 * "sign_placelist()" function. Place multiple signs. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2489 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2490 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2491 f_sign_placelist(typval_T *argvars, typval_T *rettv) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2492 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2493 listitem_T *li; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2494 int sign_id; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2495 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2496 if (rettv_list_alloc(rettv) != OK) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2497 return; |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2498 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2499 if (argvars[0].v_type != VAR_LIST) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2500 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2501 emsg(_(e_listreq)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2502 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2503 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2504 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2505 // Process the List of sign attributes |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2506 for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2507 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2508 sign_id = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2509 if (li->li_tv.v_type == VAR_DICT) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2510 sign_id = sign_place_from_dict(NULL, NULL, NULL, NULL, |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2511 li->li_tv.vval.v_dict); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2512 else |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2513 emsg(_(e_dictreq)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2514 list_append_number(rettv->vval.v_list, sign_id); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2515 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2516 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2517 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2518 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2519 * Undefine multiple signs |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2520 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2521 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2522 sign_undefine_multiple(list_T *l, list_T *retlist) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2523 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2524 char_u *name; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2525 listitem_T *li; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2526 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2527 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2528 for (li = l->lv_first; li != NULL; li = li->li_next) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2529 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2530 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2531 name = tv_get_string_chk(&li->li_tv); |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
2532 if (name != NULL && (sign_undefine_by_name(name, TRUE) == OK)) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2533 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2534 list_append_number(retlist, retval); |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2535 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2536 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2537 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2538 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2539 * "sign_undefine()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2540 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2541 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2542 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
|
2543 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2544 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2545 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2546 if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_UNKNOWN) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2547 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2548 // Undefine multiple signs |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2549 if (rettv_list_alloc(rettv) != OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2550 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2551 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2552 sign_undefine_multiple(argvars[0].vval.v_list, rettv->vval.v_list); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2553 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2554 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2555 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2556 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
|
2557 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2558 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
|
2559 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2560 // 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
|
2561 free_signs(); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2562 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
|
2563 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2564 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2565 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2566 // 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
|
2567 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
|
2568 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2569 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2570 |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
2571 if (sign_undefine_by_name(name, TRUE) == OK) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2572 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
|
2573 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2574 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2575 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2576 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2577 * Unplace the sign with attributes specified in 'dict'. Returns 0 on success |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2578 * and -1 on failure. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2579 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2580 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2581 sign_unplace_from_dict(typval_T *group_tv, dict_T *dict) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2582 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2583 dictitem_T *di; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2584 int sign_id = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2585 buf_T *buf = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2586 char_u *group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2587 int retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2588 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2589 // sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2590 if (group_tv != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2591 group = tv_get_string(group_tv); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2592 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2593 group = dict_get_string(dict, (char_u *)"group", FALSE); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2594 if (group != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2595 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2596 if (group[0] == '\0') // global sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2597 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2598 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2599 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2600 group = vim_strsave(group); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2601 if (group == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2602 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2603 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2604 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2605 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2606 if (dict != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2607 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2608 if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2609 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2610 buf = get_buf_arg(&di->di_tv); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2611 if (buf == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2612 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2613 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2614 if (dict_find(dict, (char_u *)"id", -1) != NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2615 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2616 sign_id = dict_get_number(dict, (char_u *)"id"); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2617 if (sign_id <= 0) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2618 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2619 emsg(_(e_invarg)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2620 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2621 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2622 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2623 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2624 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2625 if (buf == NULL) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2626 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2627 // Delete the sign in all the buffers |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2628 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2629 FOR_ALL_BUFFERS(buf) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2630 if (sign_unplace(sign_id, group, buf, 0) != OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2631 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2632 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2633 else if (sign_unplace(sign_id, group, buf, 0) == OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2634 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2635 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2636 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2637 vim_free(group); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2638 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2639 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2640 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2641 |
18603
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2642 sign_entry_T * |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2643 get_first_valid_sign(win_T *wp) |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2644 { |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2645 sign_entry_T *sign = wp->w_buffer->b_signlist; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2646 |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2647 # ifdef FEAT_TEXT_PROP |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2648 while (sign != NULL && sign_in_group(sign, (char_u *)"popupmenu") |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2649 == (WIN_IS_POPUP(wp) ? FALSE : TRUE)) |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2650 sign = sign->se_next; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2651 # endif |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2652 return sign; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2653 } |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2654 |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2655 /* |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2656 * Return TRUE when window "wp" has a column to draw signs in. |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2657 */ |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2658 int |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2659 signcolumn_on(win_T *wp) |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2660 { |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2661 // If 'signcolumn' is set to 'number', signs are displayed in the 'number' |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2662 // column (if present). Otherwise signs are to be displayed in the sign |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2663 // column. |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2664 if (*wp->w_p_scl == 'n' && *(wp->w_p_scl + 1) == 'u') |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2665 return get_first_valid_sign(wp) != NULL && !wp->w_p_nu && !wp->w_p_rnu; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2666 |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2667 if (*wp->w_p_scl == 'n') |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2668 return FALSE; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2669 if (*wp->w_p_scl == 'y') |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2670 return TRUE; |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2671 return (get_first_valid_sign(wp) != NULL |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2672 # ifdef FEAT_NETBEANS_INTG |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2673 || wp->w_buffer->b_has_sign_column |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2674 # endif |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2675 ); |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2676 } |
f249b44039e0
patch 8.1.2295: if buffer of popup is in another window cursorline sign shows
Bram Moolenaar <Bram@vim.org>
parents:
18422
diff
changeset
|
2677 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2678 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2679 * "sign_unplace()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2680 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2681 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2682 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
|
2683 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2684 dict_T *dict = NULL; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2685 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2686 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
|
2687 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2688 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
|
2689 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2690 emsg(_(e_invarg)); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2691 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2692 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2693 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2694 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
|
2695 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2696 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
|
2697 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2698 emsg(_(e_dictreq)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2699 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2700 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2701 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
|
2702 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2703 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2704 rettv->vval.v_number = sign_unplace_from_dict(&argvars[0], dict); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2705 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2706 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2707 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2708 * "sign_unplacelist()" function |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2709 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2710 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2711 f_sign_unplacelist(typval_T *argvars, typval_T *rettv) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2712 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2713 listitem_T *li; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2714 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2715 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2716 if (rettv_list_alloc(rettv) != OK) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2717 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2718 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2719 if (argvars[0].v_type != VAR_LIST) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2720 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2721 emsg(_(e_listreq)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2722 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2723 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2724 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2725 for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2726 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2727 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2728 if (li->li_tv.v_type == VAR_DICT) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2729 retval = sign_unplace_from_dict(NULL, li->li_tv.vval.v_dict); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2730 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2731 emsg(_(e_dictreq)); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2732 list_append_number(rettv->vval.v_list, retval); |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2733 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2734 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2735 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2736 #endif /* FEAT_SIGNS */ |