Mercurial > vim
annotate src/sign.c @ 20322:a3e78893a90b v8.2.0716
patch 8.2.0716: Vim9: another memory leak
Commit: https://github.com/vim/vim/commit/5c2fe644430efabf9dadfb89a9f1e82367eaf28d
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu May 7 23:20:21 2020 +0200
patch 8.2.0716: Vim9: another memory leak
Problem: Vim9: another memory leak.
Solution: Clear typval when failing.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 07 May 2020 23:30:04 +0200 |
parents | aadd1cae2ff5 |
children | 9064044fd4f6 |
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 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
60 #define FOR_ALL_SIGNS(sp) \ |
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
61 for ((sp) = first_sign; (sp) != NULL; (sp) = (sp)->sn_next) |
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
62 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
63 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
|
64 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
|
65 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
66 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
67 * 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
|
68 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
69 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
70 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
|
71 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
72 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
|
73 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
74 |
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 * 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
|
77 * 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
|
78 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
79 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
|
80 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
|
81 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 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
|
83 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
|
84 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
|
85 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
86 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
|
87 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
|
88 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
|
89 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
90 // 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
|
91 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
|
92 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
|
93 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
94 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
|
95 group->sg_refcount = 1; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
96 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
|
97 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
|
98 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
99 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
100 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
101 // existing group |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
102 group = HI2SG(hi); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
103 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
|
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 return group; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
107 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
108 |
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 * 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
|
111 * 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
|
112 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
113 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
114 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
|
115 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
116 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
|
117 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
|
118 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
119 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
|
120 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
|
121 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
122 group = HI2SG(hi); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
123 group->sg_refcount--; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
124 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
|
125 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
126 // 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
|
127 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
|
128 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
|
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
132 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
133 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
134 * 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
|
135 * 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
|
136 * 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
|
137 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
138 static int |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
139 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
|
140 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
141 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
|
142 || (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
|
143 || (group != NULL && sign->se_group != NULL |
18744
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
144 && STRCMP(group, sign->se_group->sg_name) == 0)); |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
145 } |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
146 |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
147 /* |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
148 * Return TRUE if "sign" is to be displayed in window "wp". |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
149 * If the group name starts with "PopUp" it only shows in a popup window. |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
150 */ |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
151 static int |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
152 sign_group_for_window(sign_entry_T *sign, win_T *wp) |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
153 { |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
154 int for_popup = sign->se_group != NULL |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
155 && STRNCMP("PopUp", sign->se_group->sg_name, 5) == 0; |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
156 |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
157 return WIN_IS_POPUP(wp) ? for_popup : !for_popup; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
158 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
159 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
160 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
161 * 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
|
162 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
163 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
164 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
|
165 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
166 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
|
167 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
|
168 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
|
169 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
|
170 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
|
171 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
172 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
|
173 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
174 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
|
175 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
|
176 return id; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
177 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
|
178 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 |
15490
98c35d312987
patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents:
15484
diff
changeset
|
180 // 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
|
181 while (!found) |
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 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
|
184 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
|
185 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
186 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
|
187 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 // 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
|
189 found = TRUE; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 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
|
191 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
192 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
|
193 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
194 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
|
195 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 return id; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
204 * 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
|
205 * 'next' signs. |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
207 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 insert_sign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
218 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
|
219 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
220 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
|
221 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
|
222 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
223 newsign->se_id = id; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
224 newsign->se_lnum = lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
225 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
|
226 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
|
227 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
228 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
|
229 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
|
230 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 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
|
232 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
233 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
234 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
235 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
236 newsign->se_group = NULL; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
237 newsign->se_priority = prio; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
238 newsign->se_next = next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
239 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
|
240 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
241 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
|
242 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 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
|
244 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 // 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
|
246 // 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
|
247 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
|
248 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
249 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
|
250 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
|
251 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 // 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
|
254 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
|
255 #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
|
256 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
|
257 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
|
258 #endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
261 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
|
262 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 * 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
|
267 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 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
|
273 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
|
274 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
|
275 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
|
276 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
|
277 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
278 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
|
279 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 // 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
|
281 // 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
287 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
|
288 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 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
|
290 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
293 * 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
|
294 */ |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
295 static sign_T * |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
296 find_sign_by_typenr(int typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
297 { |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
298 sign_T *sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
299 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
300 FOR_ALL_SIGNS(sp) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
301 if (sp->sn_typenr == typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
302 return sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
303 return NULL; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
304 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
305 |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
306 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 * 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
|
308 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 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
|
310 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
|
311 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 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
|
313 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
314 FOR_ALL_SIGNS(sp) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 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
|
316 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
|
317 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
|
318 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 |
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 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
|
322 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 static dict_T * |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
324 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
|
325 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
326 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
|
327 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 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
|
329 return NULL; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
330 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
|
331 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
|
332 (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
|
333 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
|
334 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
|
335 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
|
336 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
337 return d; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
338 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 /* |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
341 * 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
|
342 * 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
|
343 * 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
|
344 */ |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
345 static void |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
346 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
|
347 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
348 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
|
349 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
350 // 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
|
351 // 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
|
352 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
|
353 || 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
|
354 || 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
|
355 && (sign->se_next == NULL |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
356 || 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
|
357 || 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
|
358 return; |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
359 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
360 // 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
|
361 // 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
|
362 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
363 // 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
|
364 p = sign; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
365 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
|
366 && 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
|
367 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
|
368 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
369 if (p == sign) |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
370 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
371 // 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
|
372 // 'sign'. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
373 p = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
374 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
|
375 && 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
|
376 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
|
377 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
378 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
379 // 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
|
380 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
|
381 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
|
382 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
|
383 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
|
384 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
|
385 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
|
386 sign->se_prev = NULL; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
387 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
|
388 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
389 // 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
|
390 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
|
391 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
392 // '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
|
393 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
|
394 sign->se_next = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
395 p->se_prev = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
396 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
|
397 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
|
398 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
|
399 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
|
400 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
401 else |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
402 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
403 // '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
|
404 sign->se_prev = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
405 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
|
406 p->se_next = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
407 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
|
408 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
|
409 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
410 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
411 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
412 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
413 * 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
|
414 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
416 buf_addsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 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
|
423 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
424 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
|
425 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
|
426 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 prev = NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
428 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
|
429 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
430 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
|
431 && 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
|
432 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
433 // 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
|
434 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
435 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
|
436 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
|
437 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
438 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
439 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
|
440 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
441 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
|
442 lnum, typenr); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 prev = sign; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
446 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 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
|
449 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
451 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
452 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
453 * 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
|
454 * 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
|
455 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 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
|
457 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
|
458 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
|
459 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
|
460 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
|
461 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
|
462 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
|
463 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
464 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
|
465 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
466 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
|
467 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
468 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
|
469 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
470 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
471 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
|
472 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
|
473 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
|
474 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
475 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
476 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 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
|
478 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
479 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
480 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
481 * 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
|
482 * '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
|
483 * '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
|
484 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
485 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
|
486 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
|
487 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
488 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
489 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
|
490 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
|
491 |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
492 CLEAR_POINTER(sattr); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
493 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 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
|
495 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
496 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
497 // 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
|
498 // 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
|
499 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
500 |
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
|
501 if (sign->se_lnum == lnum |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18744
diff
changeset
|
502 # ifdef FEAT_PROP_POPUP |
18744
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
503 && sign_group_for_window(sign, wp) |
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
|
504 # 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
|
505 ) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
506 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
507 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
|
508 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
|
509 if (sp == NULL) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
510 return FALSE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
511 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 # 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
|
513 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
|
514 # endif |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
515 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
|
516 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
|
517 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
|
518 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
|
519 sattr->sat_linehl = syn_id2attr(sp->sn_line_hl); |
19447
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
520 |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
521 // If there is another sign next with the same priority, may |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
522 // combine the text and the line highlighting. |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
523 if (sign->se_next != NULL |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
524 && sign->se_next->se_priority == sign->se_priority |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
525 && sign->se_next->se_lnum == sign->se_lnum) |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
526 { |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
527 sign_T *next_sp = find_sign_by_typenr(sign->se_next->se_typenr); |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
528 |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
529 if (next_sp != NULL) |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
530 { |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
531 if (sattr->sat_icon == NULL && sattr->sat_text == NULL) |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
532 { |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
533 # ifdef FEAT_SIGN_ICONS |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
534 sattr->sat_icon = next_sp->sn_image; |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
535 # endif |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
536 sattr->sat_text = next_sp->sn_text; |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
537 } |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
538 if (sp->sn_text_hl <= 0 && next_sp->sn_text_hl > 0) |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
539 sattr->sat_texthl = syn_id2attr(next_sp->sn_text_hl); |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
540 if (sp->sn_line_hl <= 0 && next_sp->sn_line_hl > 0) |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
541 sattr->sat_linehl = syn_id2attr(next_sp->sn_line_hl); |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
542 } |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
543 } |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
544 return TRUE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
545 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
546 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
547 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
|
548 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
549 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
550 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
551 * 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
|
552 * 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
|
553 * 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
|
554 * 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
|
555 * 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
|
556 * 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
|
557 * 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
|
558 * 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
|
559 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 linenr_T |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
561 buf_delsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 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
|
563 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
|
564 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
|
565 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
|
566 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
567 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
|
568 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
|
569 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
|
570 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
|
571 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 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
|
573 lnum = 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 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
|
575 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
576 next = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
577 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
|
578 && (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
|
579 && 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
|
580 |
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 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
584 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
|
585 lnum = sign->se_lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
586 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
|
587 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
|
588 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
|
589 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
|
590 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
591 // 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
|
592 // 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
|
593 // 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
|
594 // 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
|
595 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
|
596 || (*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
|
597 || (*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
|
598 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
599 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
600 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
601 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
|
602 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
603 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
604 // 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
|
605 // 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
|
606 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
|
607 { |
882bbbdc9c76
patch 8.1.0750: when the last sign is deleted the signcolumn may remain
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
608 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
|
609 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
|
610 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
611 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
612 return lnum; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
613 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
616 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 * 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
|
618 * 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
|
619 * 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
|
620 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 buf_findsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 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
|
624 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
|
625 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
|
626 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
627 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
|
628 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
629 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
|
630 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
|
631 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
|
632 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
636 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
637 * 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
|
638 * 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
|
639 */ |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
640 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
|
641 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
|
642 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
|
643 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
|
644 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
|
645 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
646 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
|
647 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
648 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
|
649 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
650 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
651 // 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
|
652 // 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
|
653 break; |
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 && 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
|
656 return sign; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
657 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
658 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
660 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
661 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
662 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 * 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
|
664 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 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
|
667 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
|
668 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
|
669 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
|
670 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
671 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
|
672 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 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
|
674 if (sign != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
675 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
|
676 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
677 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
679 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
680 # 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
|
681 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 * 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
|
683 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
685 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
|
686 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
|
687 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
|
688 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
|
689 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
690 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
|
691 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 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
|
693 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
694 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
695 // 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
|
696 // 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
|
697 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
698 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
699 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
|
700 return sign->se_id; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
701 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
702 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
704 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
707 # 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
|
708 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
709 * 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
|
710 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
711 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
712 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
|
713 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
714 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
|
715 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
|
716 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
717 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
|
718 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
719 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
720 // 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
|
721 // 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
|
722 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
723 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
724 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
|
725 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
|
726 count++; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
727 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
728 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
729 return count; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
730 } |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
731 # endif // FEAT_SIGN_ICONS |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
732 # endif // FEAT_NETBEANS_INTG |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 |
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 * 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
|
736 * 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
|
737 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
738 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
739 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
|
740 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
741 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
742 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
|
743 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
|
744 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
745 // 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
|
746 // 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
|
747 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
|
748 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 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
|
750 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
|
751 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
752 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
753 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
|
754 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
|
755 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
756 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
|
757 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
|
758 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
759 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
760 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
761 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
|
762 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
|
763 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
|
764 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
|
765 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
767 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
|
768 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
769 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
771 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
772 * 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
|
773 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 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
|
776 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
777 buf_T *buf; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
778 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
779 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
|
780 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
|
781 |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
782 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
|
783 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
|
784 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
|
785 buf = firstbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
787 buf = rbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
788 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
|
789 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
790 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
|
791 { |
15386
317846db300a
patch 8.1.0701: sign message not translated and inconsistent spacing
Bram Moolenaar <Bram@vim.org>
parents:
15378
diff
changeset
|
792 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
|
793 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
|
794 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
|
795 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
796 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
|
797 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
798 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
|
799 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
800 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
|
801 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
802 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
|
803 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
|
804 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
|
805 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
806 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
|
807 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
|
808 _(" 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
|
809 (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
|
810 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
|
811 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
|
812 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
|
813 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 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
|
815 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 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
|
817 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
818 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
819 |
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 * 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
|
822 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
824 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
|
825 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
|
826 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
|
827 long amount, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 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
|
829 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
830 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
|
831 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
|
832 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 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
|
834 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
835 // 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
|
836 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
|
837 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
838 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
|
839 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
|
840 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
841 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
|
842 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
|
843 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
844 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
|
845 // 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
|
846 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
|
847 |
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
848 // 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
|
849 // 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
|
850 // 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
|
851 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
|
852 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
|
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 |
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 * 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
|
858 * "*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
|
859 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
860 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
861 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
|
862 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
|
863 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
|
864 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
865 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
866 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
|
867 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
868 *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
|
869 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
|
870 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
|
871 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
872 *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
|
873 return idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
874 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
875 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
876 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 * 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
|
878 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
879 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
|
880 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
|
881 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
882 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
|
883 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
884 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
|
885 *sp_prev = NULL; |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
886 FOR_ALL_SIGNS(sp) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
887 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
888 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
|
889 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 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
|
891 *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
|
892 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
894 return sp; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
895 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
896 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
897 /* |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
898 * 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
|
899 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
900 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
|
901 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
|
902 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
903 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
|
904 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
|
905 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
|
906 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
907 // 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
|
908 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
|
909 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
|
910 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
|
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 // 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
|
913 // 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
|
914 // 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
|
915 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
|
916 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
917 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
|
918 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
919 ++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
|
920 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
|
921 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
|
922 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
|
923 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
924 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
|
925 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
|
926 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
|
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 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
|
929 continue; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
930 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
931 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
|
932 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
933 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
934 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
|
935 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
|
936 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
|
937 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
938 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
|
939 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
|
940 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
941 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
|
942 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
|
943 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
944 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
945 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
|
946 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
947 |
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 * 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
|
950 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
951 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
|
952 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
|
953 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
954 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
|
955 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
|
956 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
|
957 # 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
|
958 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
|
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 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
|
961 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
|
962 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
|
963 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
|
964 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
965 # endif |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
966 } |
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 * 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
|
970 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
971 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
|
972 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
|
973 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
974 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
|
975 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
|
976 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
|
977 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
|
978 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
979 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
|
980 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
981 // 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
|
982 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
|
983 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
|
984 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
985 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
|
986 --endp; |
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 // 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
|
990 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
|
991 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
992 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
|
993 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
|
994 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
995 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
|
996 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
997 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
|
998 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
999 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1000 else |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1001 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1002 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
|
1003 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
|
1004 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1005 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
|
1006 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1007 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1008 // 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
|
1009 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
|
1010 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1011 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
|
1012 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
|
1013 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1014 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1015 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
|
1016 // 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
|
1017 // 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
|
1018 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
|
1019 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
|
1020 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1021 // 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
|
1022 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
|
1023 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
|
1024 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1025 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
|
1026 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1027 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1028 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 * 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
|
1030 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 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
|
1033 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
|
1034 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
|
1035 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
|
1036 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
|
1037 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
|
1038 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 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
|
1040 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
|
1041 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 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
|
1043 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
|
1044 { |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1045 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
|
1046 if (sp == NULL) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 // 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
|
1050 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
|
1051 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
|
1052 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 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
|
1054 } |
19095
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1055 else |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1056 { |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1057 win_T *wp; |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1058 |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1059 // Signs may already exist, a redraw is needed in windows with a |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1060 // non-empty sign list. |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1061 FOR_ALL_WINDOWS(wp) |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1062 if (wp->w_buffer->b_signlist != NULL) |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1063 redraw_buf_later(wp->w_buffer, NOT_VALID); |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1064 } |
15330
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 // 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
|
1067 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
|
1068 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
|
1069 |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1070 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
|
1071 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
|
1072 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1073 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
|
1074 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
|
1075 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1076 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
|
1077 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
|
1078 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1079 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1080 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1081 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 /* |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1083 * 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
|
1084 */ |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1085 int |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1086 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
|
1087 { |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1088 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
|
1089 } |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1090 |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
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 * 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
|
1093 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 int |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1095 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
|
1096 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 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
|
1098 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
|
1099 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 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
|
1101 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
|
1102 { |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1103 if (give_error) |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1104 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
|
1105 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1106 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1107 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
|
1108 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1111 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 * 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
|
1114 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1115 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1116 sign_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
|
1117 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 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
|
1119 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1120 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
|
1121 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
|
1122 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
|
1123 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1124 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
|
1125 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1126 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1127 static void |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1128 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
|
1129 { |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1130 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
|
1131 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
|
1132 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1133 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
|
1134 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
|
1135 && (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
|
1136 && (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
|
1137 && (*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
|
1138 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
|
1139 } |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1140 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 /* |
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
|
1142 * 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
|
1143 */ |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1144 int |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 sign_place( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 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
|
1147 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
|
1148 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
|
1149 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
|
1150 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
|
1151 int prio) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 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
|
1154 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 // 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
|
1156 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
|
1157 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1159 FOR_ALL_SIGNS(sp) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 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
|
1161 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 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
|
1163 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1164 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
|
1165 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1166 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1167 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
|
1168 *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
|
1169 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 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
|
1171 // ":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
|
1172 // 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
|
1173 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
|
1174 else |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
1175 // ":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
|
1176 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
|
1177 prio); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 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
|
1179 { |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1180 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
|
1181 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1182 // 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
|
1183 // 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
|
1184 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
|
1185 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1188 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
|
1189 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 return OK; |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 * 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
|
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 int |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 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
|
1200 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 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
|
1202 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 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
|
1205 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1206 // 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
|
1207 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
|
1208 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
|
1209 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1210 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1211 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 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
|
1213 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 // 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
|
1215 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
|
1216 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
|
1217 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1220 // 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
|
1221 // 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
|
1222 // 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
|
1223 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
|
1224 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
|
1225 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1227 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 * 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
|
1231 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 sign_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
|
1234 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 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
|
1236 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 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
|
1238 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
|
1239 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
|
1240 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1241 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
|
1242 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1245 * 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
|
1246 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1247 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
|
1248 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
|
1249 { |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1250 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
|
1251 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1252 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
|
1253 { |
15490
98c35d312987
patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents:
15484
diff
changeset
|
1254 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
|
1255 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
|
1256 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1257 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1258 // 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
|
1259 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
|
1260 { // ... 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
|
1261 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
|
1262 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
|
1263 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
|
1264 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1265 else |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1266 { // ... 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
|
1267 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
|
1268 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1269 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
|
1270 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1271 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
|
1272 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
|
1273 } |
16768
695d9ef00b03
patch 8.1.1386: unessesary type casts for lalloc()
Bram Moolenaar <Bram@vim.org>
parents:
15864
diff
changeset
|
1274 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
|
1275 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
|
1276 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
|
1277 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
|
1278 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
|
1279 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
|
1280 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1281 # 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
|
1282 foldOpenCursor(); |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1283 # endif |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1284 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1285 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
|
1286 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1287 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1288 /* |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1289 * ":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
|
1290 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 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
|
1293 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 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
|
1295 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
|
1296 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
|
1297 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
|
1298 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
|
1299 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
|
1300 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
|
1301 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 // 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
|
1303 for (;;) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 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
|
1306 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
|
1307 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 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
|
1309 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
|
1310 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 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
|
1313 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 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
|
1315 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 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
|
1318 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 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
|
1320 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 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
|
1323 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 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
|
1325 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 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
|
1328 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1331 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
|
1332 failed = TRUE; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1334 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 if (!failed) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 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
|
1339 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 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
|
1341 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
|
1342 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
|
1343 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
|
1344 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1346 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1347 * ":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
|
1348 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 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
|
1351 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
|
1352 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
|
1353 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
|
1354 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 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
|
1356 int prio) |
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 <= 0) |
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 // 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
|
1361 // :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
|
1362 // :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
|
1363 // :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
|
1364 // :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
|
1365 // :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
|
1366 // :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
|
1367 // :sign place |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 // :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
|
1369 // :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
|
1370 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
|
1371 || (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
|
1372 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
|
1373 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 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
|
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 // 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
|
1379 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
|
1380 || (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
|
1381 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1382 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
|
1383 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 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
|
1387 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 } |
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 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1391 * ":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
|
1392 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 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
|
1395 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
|
1396 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
|
1397 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
|
1398 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 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
|
1400 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 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
|
1402 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1403 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
|
1404 return; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 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
|
1408 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 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
|
1410 // :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
|
1411 // :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
|
1412 // :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
|
1413 // :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
|
1414 // :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
|
1415 // :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
|
1416 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
|
1417 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 // :sign unplace * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 // :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
|
1420 // :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
|
1421 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
|
1422 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
|
1423 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
|
1424 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 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
|
1428 // :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
|
1429 // :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
|
1430 // :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
|
1431 // :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
|
1432 // :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
|
1433 // :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
|
1434 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
|
1435 else |
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 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
|
1438 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 // :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
|
1440 // :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
|
1441 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
|
1442 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 // :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
|
1446 // :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
|
1447 // :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
|
1448 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
|
1449 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
|
1450 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1451 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1453 } |
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 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1456 * 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
|
1457 * :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
|
1458 * :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
|
1459 * :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
|
1460 * :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
|
1461 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1462 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1463 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
|
1464 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
|
1465 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
|
1466 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
|
1467 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 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
|
1469 { |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1470 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
|
1471 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1472 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
|
1473 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1474 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1475 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1476 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
|
1477 || 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
|
1478 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 // 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
|
1480 // 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
|
1481 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
|
1482 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1483 } |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1484 (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
|
1485 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1487 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1488 * 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
|
1489 * ":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
|
1490 * 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
|
1491 * 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
|
1492 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1493 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 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
|
1495 int cmd, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 char_u *arg, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 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
|
1498 int *signid, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 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
|
1500 int *prio, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 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
|
1502 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
|
1503 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 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
|
1505 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
|
1506 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
|
1507 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
|
1508 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 // 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
|
1510 arg1 = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 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
|
1512 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1513 *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
|
1514 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
|
1515 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 *signid = -1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1517 arg = arg1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1519 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1520 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
|
1521 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1522 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1523 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
|
1524 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 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
|
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 += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 *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
|
1529 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
|
1530 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
|
1531 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1532 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
|
1533 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1534 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
|
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 *signid = -2; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1540 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
|
1541 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1542 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
|
1543 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1544 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1545 name = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 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
|
1547 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
|
1548 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1549 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
|
1550 ++name; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1551 *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
|
1552 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 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
|
1554 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1555 arg += 6; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1556 *group = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 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
|
1558 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
|
1559 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1560 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1561 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
|
1562 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1563 arg += 9; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1564 *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
|
1565 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
|
1566 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1567 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
|
1568 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1570 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1571 *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
|
1572 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1573 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1574 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
|
1575 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1576 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1578 *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
|
1579 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
|
1580 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
|
1581 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1582 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1583 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1584 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1585 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
|
1586 return FAIL; |
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 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
|
1589 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1591 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
|
1592 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1593 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
|
1594 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1596 |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1597 // 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
|
1598 // 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
|
1599 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
|
1600 || cmd == SIGNCMD_JUMP)) |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1601 *buf = curwin->w_buffer; |
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1602 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1605 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1606 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1607 * ":sign" command |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1608 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1610 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
|
1611 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 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
|
1613 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
|
1614 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1615 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
|
1616 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
|
1617 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1618 // 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
|
1619 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
|
1620 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
|
1621 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
|
1622 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1623 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
|
1624 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1625 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1626 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
|
1627 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1628 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
|
1629 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1630 // 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
|
1631 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
|
1632 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1633 // ":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
|
1634 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
|
1635 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
|
1636 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1637 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
|
1638 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
|
1639 else |
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 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
|
1642 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1643 // 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
|
1644 // 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
|
1645 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
|
1646 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
|
1647 *p++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 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
|
1649 ++arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1650 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
|
1651 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1652 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
|
1653 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
|
1654 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
|
1655 // ":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
|
1656 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
|
1657 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 // ":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
|
1659 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
|
1660 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1661 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
|
1662 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1663 } |
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 else |
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 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
|
1668 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
|
1669 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
|
1670 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
|
1671 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
|
1672 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1673 // 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
|
1674 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
|
1675 &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
|
1676 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1678 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
|
1679 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
|
1680 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
|
1681 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
|
1682 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
|
1683 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
|
1684 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1685 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1687 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 * 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
|
1689 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1691 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
|
1692 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1693 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
|
1694 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1695 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
|
1696 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
|
1697 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
|
1698 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
|
1699 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
|
1700 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
|
1701 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1702 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
|
1703 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
|
1704 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
|
1705 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
|
1706 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1707 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
|
1708 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1709 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
|
1710 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
|
1711 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
|
1712 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
|
1713 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1714 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1717 * 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
|
1718 * 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
|
1719 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1720 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
|
1721 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
|
1722 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1723 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
|
1724 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
|
1725 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1726 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
|
1727 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1728 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
|
1729 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
|
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 } |
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 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
|
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 ((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
|
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 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
|
1738 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 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
|
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 (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
|
1742 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1743 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1744 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1745 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1746 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 * 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
|
1748 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1749 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1750 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
|
1751 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1752 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1753 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
|
1754 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 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
|
1756 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1757 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
|
1758 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
|
1759 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1760 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1761 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1762 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1763 * 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
|
1764 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1765 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1766 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
|
1767 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
|
1768 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
|
1769 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
|
1770 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
|
1771 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
|
1772 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1773 dict_T *d; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1774 list_T *l; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1775 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1776 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
|
1777 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1778 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
|
1779 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1780 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
|
1781 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1782 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
|
1783 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1784 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
|
1785 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1786 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
|
1787 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1788 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
|
1789 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1790 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
|
1791 continue; |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1792 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
|
1793 || (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
|
1794 || (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
|
1795 || (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
|
1796 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1797 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
|
1798 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
|
1799 } |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1802 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1803 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1804 * 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
|
1805 * 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
|
1806 * 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
|
1807 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1808 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
|
1809 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
|
1810 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
|
1811 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
|
1812 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
|
1813 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
|
1814 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
|
1815 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1816 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
|
1817 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
|
1818 else |
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 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
|
1821 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
|
1822 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
|
1823 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1824 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1825 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1826 # 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
|
1827 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1828 * 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
|
1829 * 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
|
1830 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1831 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1832 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
|
1833 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1834 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
|
1835 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1836 FOR_ALL_SIGNS(sp) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1837 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
|
1838 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
|
1839 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1840 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1841 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1842 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1843 * 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
|
1844 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1846 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
|
1847 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1848 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
|
1849 |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1850 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
|
1851 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
|
1852 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1853 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
|
1854 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
|
1855 # 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
|
1856 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
|
1857 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
|
1858 # else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1859 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
|
1860 # endif |
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 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
|
1863 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1864 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
|
1865 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
|
1866 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1867 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
|
1868 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1869 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
|
1870 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
|
1871 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1872 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
|
1873 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1874 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
|
1875 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1876 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
|
1877 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1878 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
|
1879 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
|
1880 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1881 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
|
1882 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1883 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
|
1884 } |
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 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1888 * 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
|
1889 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1890 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1891 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
|
1892 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1893 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
|
1894 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
|
1895 # 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
|
1896 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
|
1897 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1898 out_flush(); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1899 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
|
1900 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1901 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1902 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
|
1903 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
|
1904 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
|
1905 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1906 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
|
1907 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
|
1908 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1909 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1910 # 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
|
1911 void * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 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
|
1913 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
|
1914 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1915 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
|
1916 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1917 FOR_ALL_SIGNS(sp) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1918 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
|
1919 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
|
1920 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1921 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1922 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1923 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1924 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1925 * 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
|
1926 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1927 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1928 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
|
1929 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1930 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
|
1931 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
|
1932 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1933 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1934 static enum |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1935 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1936 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
|
1937 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
|
1938 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
|
1939 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
|
1940 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
|
1941 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
|
1942 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
|
1943 } expand_what; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1944 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1945 /* |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1946 * 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
|
1947 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1948 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1949 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
|
1950 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1951 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1952 sign_T *sp; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1953 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1954 // 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
|
1955 current_idx = 0; |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1956 FOR_ALL_SIGNS(sp) |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1957 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1958 return sp->sn_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1959 return NULL; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1960 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1961 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1962 /* |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1963 * 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
|
1964 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1965 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1966 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
|
1967 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1968 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1969 int todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1970 hashitem_T *hi; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1971 signgroup_T *group; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1972 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1973 // 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
|
1974 current_idx = 0; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1975 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
|
1976 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
|
1977 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1978 if (!HASHITEM_EMPTY(hi)) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1979 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1980 --todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1981 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1982 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1983 group = HI2SG(hi); |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1984 return group->sg_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1985 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1986 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1987 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1988 return NULL; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1989 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1990 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
1991 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1992 * 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
|
1993 * expansion. |
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 char_u * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1996 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
|
1997 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1998 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
|
1999 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2000 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
|
2001 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
|
2002 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
|
2003 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2004 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
|
2005 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2006 "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
|
2007 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2008 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
|
2009 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2010 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
|
2011 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2012 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
|
2013 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2014 "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
|
2015 "buffer=", NULL |
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 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
|
2018 } |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2019 case EXP_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2020 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2021 char *list_arg[] = |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2022 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2023 "group=", "file=", "buffer=", NULL |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2024 }; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2025 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
|
2026 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2027 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
|
2028 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2029 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
|
2030 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
|
2031 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2032 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
|
2033 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
|
2034 case EXP_SIGN_GROUPS: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2035 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
|
2036 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2037 return NULL; |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2040 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2041 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2042 * 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
|
2043 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2044 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2045 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
|
2046 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2047 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
|
2048 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
|
2049 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
|
2050 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
|
2051 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
|
2052 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2053 // 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
|
2054 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
|
2055 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
|
2056 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
|
2057 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2058 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
|
2059 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
|
2060 // 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
|
2061 // :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
|
2062 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2063 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2064 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
|
2065 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2066 // :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
|
2067 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2068 // 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
|
2069 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
|
2070 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2071 // 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
|
2072 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2073 // :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
|
2074 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2075 // p |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2076 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2077 // 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
|
2078 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
|
2079 do |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2080 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2081 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
|
2082 last = p; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2083 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
|
2084 } 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
|
2085 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2086 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
|
2087 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2088 // :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
|
2089 // | | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2090 // 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
|
2091 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
|
2092 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2093 // 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
|
2094 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
|
2095 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
|
2096 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2097 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
|
2098 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
|
2099 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2100 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2101 // List placed signs |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2102 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
|
2103 // :sign place {id} {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2104 expand_what = EXP_PLACE; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2105 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2106 // :sign place {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2107 expand_what = EXP_LIST; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2108 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2109 case SIGNCMD_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2110 case SIGNCMD_UNDEFINE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2111 // :sign list <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2112 // :sign undefine <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2113 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
|
2114 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2115 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
|
2116 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
|
2117 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
|
2118 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2119 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2120 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
|
2121 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2122 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2123 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2124 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2125 // 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
|
2126 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
|
2127 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
|
2128 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2129 case SIGNCMD_DEFINE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2130 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
|
2131 || 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
|
2132 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
|
2133 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
|
2134 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
|
2135 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2136 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
|
2137 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2138 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2139 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
|
2140 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
|
2141 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
|
2142 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
|
2143 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
|
2144 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
|
2145 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2146 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
|
2147 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2148 case SIGNCMD_UNPLACE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2149 case SIGNCMD_JUMP: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2150 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
|
2151 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
|
2152 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
|
2153 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
|
2154 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2155 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
|
2156 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2157 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2158 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
|
2159 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2160 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2161 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2162 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2163 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2164 * 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
|
2165 * failure. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2166 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2167 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2168 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
|
2169 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2170 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
|
2171 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
|
2172 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
|
2173 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
|
2174 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
|
2175 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
|
2176 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2177 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
|
2178 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2179 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
|
2180 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2181 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
|
2182 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2183 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2184 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
|
2185 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
|
2186 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2187 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
|
2188 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2189 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
|
2190 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
|
2191 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
|
2192 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
|
2193 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2194 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2195 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
|
2196 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2197 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2198 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2199 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
|
2200 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
|
2201 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
|
2202 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
|
2203 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
|
2204 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2205 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2206 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2207 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2208 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2209 * 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
|
2210 * 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
|
2211 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2212 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2213 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
|
2214 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2215 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
|
2216 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2217 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2218 FOR_ALL_LIST_ITEMS(l, li) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2219 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2220 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2221 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
|
2222 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
|
2223 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2224 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
|
2225 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
|
2226 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2227 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2228 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2229 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2230 * "sign_define()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2231 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2232 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2233 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
|
2234 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2235 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2236 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2237 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
|
2238 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2239 // 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
|
2240 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
|
2241 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2242 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2243 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
|
2244 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2245 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2246 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2247 // 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
|
2248 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
|
2249 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2250 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
|
2251 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2252 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2253 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2254 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
|
2255 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2256 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
|
2257 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2258 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2259 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2260 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
|
2261 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
|
2262 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2263 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2264 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2265 * "sign_getdefined()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2266 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2267 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2268 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
|
2269 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2270 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
|
2271 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2272 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
|
2273 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2274 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2275 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
|
2276 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
|
2277 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2278 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
|
2279 } |
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 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2282 * "sign_getplaced()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2283 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2284 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2285 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
|
2286 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2287 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
|
2288 dict_T *dict; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2289 dictitem_T *di; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2290 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
|
2291 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
|
2292 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
|
2293 int notanum = FALSE; |
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 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
|
2296 return; |
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 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
|
2299 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2300 // 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
|
2301 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
|
2302 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2303 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2304 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2305 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
|
2306 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2307 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
|
2308 ((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
|
2309 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2310 emsg(_(e_dictreq)); |
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 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2313 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
|
2314 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2315 // 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
|
2316 (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
|
2317 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2318 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2319 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
|
2320 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2321 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
|
2322 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2323 // 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
|
2324 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
|
2325 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2326 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2327 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2328 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
|
2329 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2330 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
|
2331 if (group == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2332 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2333 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
|
2334 group = NULL; |
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 } |
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 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2339 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
|
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 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2343 * "sign_jump()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2344 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2345 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2346 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
|
2347 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2348 int sign_id; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2349 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
|
2350 buf_T *buf; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2351 int notanum = FALSE; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2352 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2353 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
|
2354 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2355 // Sign identifier |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2356 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
|
2357 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2358 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2359 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
|
2360 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2361 emsg(_(e_invarg)); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2362 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2363 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2364 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2365 // Sign group |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2366 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
|
2367 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
|
2368 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2369 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
|
2370 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
|
2371 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2372 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2373 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
|
2374 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
|
2375 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2376 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2377 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2378 // 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
|
2379 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
|
2380 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2381 goto cleanup; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2382 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2383 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
|
2384 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2385 cleanup: |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2386 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
|
2387 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2388 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2389 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2390 * 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
|
2391 * 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
|
2392 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2393 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2394 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
|
2395 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
|
2396 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
|
2397 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
|
2398 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
|
2399 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
|
2400 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2401 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
|
2402 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
|
2403 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
|
2404 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
|
2405 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
|
2406 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
|
2407 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
|
2408 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
|
2409 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
|
2410 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2411 // sign identifier |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2412 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
|
2413 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2414 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
|
2415 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
|
2416 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
|
2417 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2418 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
|
2419 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
|
2420 else |
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 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
|
2423 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2424 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2425 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
|
2426 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2427 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
|
2428 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2429 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2430 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2431 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2432 // sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2433 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
|
2434 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2435 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
|
2436 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
|
2437 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
|
2438 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2439 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
|
2440 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
|
2441 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2442 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2443 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
|
2444 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
|
2445 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2446 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
|
2447 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2448 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2449 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2450 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
|
2451 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
|
2452 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2453 } |
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 // sign name |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2457 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
|
2458 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2459 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
|
2460 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
|
2461 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
|
2462 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2463 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
|
2464 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2465 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
|
2466 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
|
2467 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2468 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2469 // 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
|
2470 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
|
2471 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2472 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
|
2473 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
|
2474 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
|
2475 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2476 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
|
2477 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2478 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
|
2479 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
|
2480 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2481 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2482 // 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
|
2483 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
|
2484 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
|
2485 { |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2486 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
|
2487 if (lnum <= 0) |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2488 { |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2489 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
|
2490 goto cleanup; |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2491 } |
17366
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 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2494 // sign priority |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2495 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
|
2496 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
|
2497 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2498 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
|
2499 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2500 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2501 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2502 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2503 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
|
2504 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
|
2505 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2506 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2507 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
|
2508 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2509 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
|
2510 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2511 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2512 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2513 * "sign_place()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2514 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2515 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2516 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
|
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 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
|
2519 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2520 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
|
2521 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2522 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
|
2523 && (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
|
2524 || ((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
|
2525 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2526 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
|
2527 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2528 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2529 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2530 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
|
2531 &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
|
2532 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2533 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2534 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2535 * "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
|
2536 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2537 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2538 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
|
2539 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2540 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
|
2541 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
|
2542 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2543 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
|
2544 return; |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2545 |
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) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2547 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2548 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
|
2549 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2550 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2551 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2552 // Process the List of sign attributes |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2553 FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2554 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2555 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
|
2556 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
|
2557 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
|
2558 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
|
2559 else |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2560 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
|
2561 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
|
2562 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2563 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2564 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2565 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2566 * 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
|
2567 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2568 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2569 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
|
2570 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2571 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
|
2572 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
|
2573 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2574 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2575 FOR_ALL_LIST_ITEMS(l, li) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2576 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2577 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2578 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
|
2579 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
|
2580 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2581 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
|
2582 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2583 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2584 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2585 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2586 * "sign_undefine()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2587 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2588 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2589 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
|
2590 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2591 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2592 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2593 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
|
2594 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2595 // 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
|
2596 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
|
2597 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2598 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2599 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
|
2600 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2601 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2602 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2603 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
|
2604 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2605 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
|
2606 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2607 // 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
|
2608 free_signs(); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2609 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
|
2610 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2611 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2612 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2613 // 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
|
2614 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
|
2615 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2616 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2617 |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
2618 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
|
2619 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
|
2620 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2621 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2622 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2623 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2624 * 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
|
2625 * 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
|
2626 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2627 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2628 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
|
2629 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2630 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
|
2631 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
|
2632 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
|
2633 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
|
2634 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
|
2635 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2636 // sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2637 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
|
2638 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
|
2639 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2640 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
|
2641 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
|
2642 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2643 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
|
2644 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2645 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2646 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2647 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
|
2648 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
|
2649 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2650 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2651 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2652 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2653 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
|
2654 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2655 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
|
2656 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2657 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
|
2658 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
|
2659 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2660 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2661 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
|
2662 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2663 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
|
2664 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
|
2665 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2666 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
|
2667 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2668 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2669 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2670 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2671 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2672 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
|
2673 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2674 // 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
|
2675 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2676 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
|
2677 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
|
2678 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2679 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2680 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
|
2681 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2682 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2683 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2684 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
|
2685 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2686 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2687 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2688 |
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
|
2689 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
|
2690 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
|
2691 { |
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
|
2692 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
|
2693 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18744
diff
changeset
|
2694 # ifdef FEAT_PROP_POPUP |
18744
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
2695 while (sign != NULL && !sign_group_for_window(sign, wp)) |
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
|
2696 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
|
2697 # 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
|
2698 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
|
2699 } |
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
|
2700 |
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
|
2701 /* |
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
|
2702 * 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
|
2703 */ |
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
|
2704 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
|
2705 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
|
2706 { |
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
|
2707 // 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
|
2708 // 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
|
2709 // 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
|
2710 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
|
2711 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
|
2712 |
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
|
2713 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
|
2714 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
|
2715 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
|
2716 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
|
2717 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
|
2718 # 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
|
2719 || 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
|
2720 # 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
|
2721 ); |
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
|
2722 } |
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
|
2723 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2724 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2725 * "sign_unplace()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2726 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2727 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2728 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
|
2729 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2730 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
|
2731 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2732 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
|
2733 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2734 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
|
2735 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2736 emsg(_(e_invarg)); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2737 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2738 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2739 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2740 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
|
2741 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2742 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
|
2743 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2744 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
|
2745 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2746 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2747 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
|
2748 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2749 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2750 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
|
2751 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2752 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2753 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2754 * "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
|
2755 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2756 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2757 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
|
2758 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2759 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
|
2760 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2761 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2762 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
|
2763 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2764 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2765 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
|
2766 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2767 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
|
2768 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2769 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2770 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2771 FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2772 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2773 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2774 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
|
2775 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
|
2776 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2777 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
|
2778 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
|
2779 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2780 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2781 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
2782 #endif // FEAT_SIGNS |