Mercurial > vim
annotate src/sign.c @ 33811:06219b3bdaf3 v9.0.2121
patch 9.0.2121: [security]: use-after-free in ex_substitute
Commit: https://github.com/vim/vim/commit/26c11c56888d01e298cd8044caf860f3c26f57bb
Author: Christian Brabandt <cb@256bit.org>
Date: Wed Nov 22 21:26:41 2023 +0100
patch 9.0.2121: [security]: use-after-free in ex_substitute
Problem: [security]: use-after-free in ex_substitute
Solution: always allocate memory
closes: #13552
A recursive :substitute command could cause a heap-use-after free in Vim
(CVE-2023-48706).
The whole reproducible test is a bit tricky, I can only reproduce this
reliably when no previous substitution command has been used yet
(which is the reason, the test needs to run as first one in the
test_substitute.vim file) and as a combination of the `:~` command
together with a :s command that contains the special substitution atom `~\=`
which will make use of a sub-replace special atom and calls a vim script
function.
There was a comment in the existing :s code, that already makes the
`sub` variable allocate memory so that a recursive :s call won't be able
to cause any issues here, so this was known as a potential problem
already. But for the current test-case that one does not work, because
the substitution does not start with `\=` but with `~\=` (and since
there does not yet exist a previous substitution atom, Vim will simply
increment the `sub` pointer (which then was not allocated dynamically)
and later one happily use a sub-replace special expression (which could
then free the `sub` var).
The following commit fixes this, by making the sub var always using
allocated memory, which also means we need to free the pointer whenever
we leave the function. Since sub is now always an allocated variable,
we also do no longer need the sub_copy variable anymore, since this one
was used to indicated when sub pointed to allocated memory (and had
therefore to be freed on exit) and when not.
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-c8qm-x72m-q53q
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 22 Nov 2023 22:15:05 +0100 |
parents | 04d9dff67d99 |
children | fff85588c140 |
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 |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
35 int sn_cul_hl; // highlight ID for text on current line when 'cursorline' is set |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
36 int sn_num_hl; // highlight ID for line number |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
37 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
38 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
39 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
|
40 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
|
41 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
42 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
|
43 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
|
44 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
45 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
|
46 "define", |
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_DEFINE 0 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
48 "undefine", |
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_UNDEFINE 1 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
50 "list", |
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_LIST 2 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
52 "place", |
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_PLACE 3 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
54 "unplace", |
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_UNPLACE 4 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
56 "jump", |
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_JUMP 5 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
58 NULL |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
59 # 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
|
60 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
61 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
62 #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
|
63 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
|
64 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
65 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
|
66 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
|
67 |
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 * 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
|
70 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
71 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
72 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
|
73 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
74 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
|
75 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
76 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
77 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
78 * 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
|
79 * 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
|
80 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
81 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
|
82 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
|
83 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 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
|
85 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
|
86 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
|
87 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
92 // 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
|
93 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
|
94 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
|
95 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
96 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
|
97 group->sg_refcount = 1; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
98 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
|
99 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
|
100 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
101 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
102 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
103 // existing group |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
104 group = HI2SG(hi); |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
105 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
|
106 } |
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 return group; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
109 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
110 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
111 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
112 * 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
|
113 * 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
|
114 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
115 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
116 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
|
117 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
118 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
|
119 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
|
120 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
121 hi = hash_find(&sg_table, groupname); |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
122 if (HASHITEM_EMPTY(hi)) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
123 return; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
124 |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
125 group = HI2SG(hi); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
126 group->sg_refcount--; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
127 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
|
128 { |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
129 // All the signs in this group are removed |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
130 hash_remove(&sg_table, hi, "sign remove"); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
131 vim_free(group); |
15330
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
135 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
136 * 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
|
137 * 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
|
138 * 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
|
139 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
140 static int |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
141 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
|
142 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
143 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
|
144 || (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
|
145 || (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
|
146 && 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
|
147 } |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
148 |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
149 /* |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
150 * 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
|
151 * 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
|
152 */ |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
153 static int |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
154 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
|
155 { |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
156 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
|
157 && 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
|
158 |
b29d8a06e72c
patch 8.1.2362: cannot place signs in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
18603
diff
changeset
|
159 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
|
160 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
161 |
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 * 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
|
164 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
165 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
166 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
|
167 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
174 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
|
175 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
176 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
|
177 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
|
178 return id; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 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
|
180 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 |
15490
98c35d312987
patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents:
15484
diff
changeset
|
182 // 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
|
183 while (!found) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 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
|
186 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
|
187 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
188 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
|
189 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 // 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
|
191 found = TRUE; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 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
|
193 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
194 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
|
195 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 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
|
197 break; |
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 } |
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 return id; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 * 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
|
207 * 'next' signs. |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
210 insert_sign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 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
|
219 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
220 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
|
221 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
222 newsign = lalloc_id(sizeof(sign_entry_T), FALSE, aid_insert_sign); |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
223 if (newsign == NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
224 return; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
225 |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
226 newsign->se_id = id; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
227 newsign->se_lnum = lnum; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
228 newsign->se_typenr = typenr; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
229 if (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 { |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
231 newsign->se_group = sign_group_ref(group); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
232 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
|
233 { |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
234 vim_free(newsign); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
235 return; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
236 } |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
237 } |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
238 else |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
239 newsign->se_group = NULL; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
240 newsign->se_priority = prio; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
241 newsign->se_next = next; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
242 newsign->se_prev = prev; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
243 if (next != NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
244 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
|
245 |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
246 if (prev == NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
247 { |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
248 // When adding first sign need to redraw the windows to create the |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
249 // column for signs. |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
250 if (buf->b_signlist == NULL) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 { |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
252 redraw_buf_later(buf, UPD_NOT_VALID); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
253 changed_line_abv_curs(); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
254 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
255 |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
256 // first sign in signlist |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
257 buf->b_signlist = newsign; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 #ifdef FEAT_NETBEANS_INTG |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
259 if (netbeans_active()) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
260 buf->b_has_sign_column = TRUE; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 #endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 } |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
263 else |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
31231
diff
changeset
|
264 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
|
265 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 |
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 * 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
|
269 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 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
|
272 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
|
273 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
|
274 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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
280 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
|
281 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 // 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
|
283 // 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
289 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
|
290 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 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
|
292 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
295 * 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
|
296 */ |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
297 static sign_T * |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
298 find_sign_by_typenr(int typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
299 { |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
300 sign_T *sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
301 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
302 FOR_ALL_SIGNS(sp) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
303 if (sp->sn_typenr == typenr) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
304 return sp; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
305 return NULL; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
306 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
307 |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
308 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 * 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
|
310 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 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
|
312 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
|
313 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
314 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
|
315 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
316 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
|
317 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
|
318 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
|
319 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
|
320 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 |
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 * 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
|
324 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
325 static dict_T * |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
326 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
|
327 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 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
|
329 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
330 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
|
331 return NULL; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
332 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
|
333 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
|
334 (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
|
335 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
|
336 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
|
337 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
|
338 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 return d; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
341 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
342 /* |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
343 * 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
|
344 * 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
|
345 * 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
|
346 */ |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
347 static void |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
348 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
|
349 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
350 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
|
351 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
352 // 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
|
353 // 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
|
354 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
|
355 || 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
|
356 || 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
|
357 && (sign->se_next == NULL |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
358 || 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
|
359 || 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
|
360 return; |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
361 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
362 // 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
|
363 // 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
|
364 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
365 // 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
|
366 p = sign; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
367 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
|
368 && 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
|
369 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
|
370 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
371 if (p == sign) |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
372 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
373 // Sign 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
|
374 // 'sign'. |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
375 p = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
376 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
|
377 && 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
|
378 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
|
379 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
380 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
381 // 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
|
382 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
|
383 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
|
384 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
|
385 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
|
386 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
|
387 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
|
388 sign->se_prev = NULL; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
389 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
|
390 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
391 // 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
|
392 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
|
393 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
394 // '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
|
395 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
|
396 sign->se_next = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
397 p->se_prev = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
398 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
|
399 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
|
400 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
|
401 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
|
402 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
403 else |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
404 { |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
405 // '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
|
406 sign->se_prev = p; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
407 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
|
408 p->se_next = sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
409 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
|
410 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
|
411 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
412 } |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
413 |
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16930
diff
changeset
|
414 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 * 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
|
416 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
418 buf_addsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
419 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
|
420 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
426 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
|
427 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
|
428 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
429 prev = NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 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
|
431 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
432 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
|
433 && 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
|
434 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
435 // 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
|
436 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
437 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
|
438 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
|
439 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
441 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
|
442 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 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
|
444 lnum, typenr); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 return; |
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 prev = sign; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
449 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 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
|
451 return; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
454 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
455 * 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
|
456 * 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
|
457 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 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
|
459 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
|
460 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
|
461 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
|
462 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
|
463 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
|
464 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
|
465 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
466 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
|
467 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 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
|
469 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
470 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
|
471 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
472 sign->se_typenr = typenr; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
473 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
|
474 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
|
475 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
|
476 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
479 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
|
480 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
481 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
482 /* |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
483 * 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
|
484 * '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
|
485 * '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
|
486 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 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
|
488 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
|
489 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
490 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
491 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
|
492 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
|
493 |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
494 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
|
495 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
496 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
|
497 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
498 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
499 // 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
|
500 // 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
|
501 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
502 |
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
|
503 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
|
504 # 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
|
505 && 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
|
506 # 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
|
507 ) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
508 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
509 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
|
510 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
|
511 if (sp == NULL) |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
512 return FALSE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
513 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
514 # 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
|
515 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
|
516 # endif |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
517 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
|
518 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
|
519 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
|
520 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
|
521 sattr->sat_linehl = syn_id2attr(sp->sn_line_hl); |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
522 if (sp->sn_cul_hl > 0) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
523 sattr->sat_culhl = syn_id2attr(sp->sn_cul_hl); |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
524 if (sp->sn_num_hl > 0) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
525 sattr->sat_numhl = syn_id2attr(sp->sn_num_hl); |
22017
2794a2666769
patch 8.2.1558: signs test fails
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
526 sattr->sat_priority = sign->se_priority; |
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
|
527 |
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 // 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
|
529 // 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
|
530 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
|
531 && 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
|
532 && 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
|
533 { |
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 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
|
535 |
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 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
|
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 (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
|
539 { |
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 # 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
|
541 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
|
542 # 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
|
543 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
|
544 } |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
545 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
|
546 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
|
547 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
|
548 sattr->sat_linehl = syn_id2attr(next_sp->sn_line_hl); |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
549 if (sp->sn_cul_hl <= 0 && next_sp->sn_cul_hl > 0) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
550 sattr->sat_culhl = syn_id2attr(next_sp->sn_cul_hl); |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
551 if (sp->sn_num_hl <= 0 && next_sp->sn_num_hl > 0) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
552 sattr->sat_numhl = syn_id2attr(next_sp->sn_num_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
|
553 } |
5b82f041dbbb
patch 8.2.0281: two placed signs in the same line are not combined
Bram Moolenaar <Bram@vim.org>
parents:
19095
diff
changeset
|
554 } |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
555 return TRUE; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
556 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
557 } |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
558 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
|
559 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
561 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 * 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
|
563 * 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
|
564 * 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
|
565 * 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
|
566 * 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
|
567 * 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
|
568 * 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
|
569 * 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
|
570 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
571 linenr_T |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 buf_delsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
573 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
|
574 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
|
575 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
|
576 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
|
577 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
578 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
|
579 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
|
580 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
|
581 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
|
582 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 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
|
584 lnum = 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 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
|
586 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
587 next = sign->se_next; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
588 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
|
589 && (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
|
590 && 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
|
591 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
592 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
595 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
|
596 lnum = sign->se_lnum; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
597 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
|
598 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
|
599 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
|
600 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
|
601 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
602 // 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
|
603 // 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
|
604 // 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
|
605 // 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
|
606 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
|
607 || (*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
|
608 || (*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
|
609 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
610 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
611 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
612 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
|
613 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
615 // 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
|
616 // 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
|
617 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
|
618 { |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
619 redraw_buf_later(buf, UPD_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
|
620 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
|
621 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 return lnum; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
625 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
626 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
627 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
628 * 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
|
629 * 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
|
630 * 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
|
631 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
632 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 buf_findsign( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 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
|
635 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
|
636 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
|
637 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
638 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
|
639 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
640 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
|
641 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
|
642 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
|
643 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 |
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 * 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
|
649 * 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
|
650 */ |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
651 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
|
652 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
|
653 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
|
654 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
|
655 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
|
656 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
657 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
|
658 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 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
|
660 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
661 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
662 // 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
|
663 // 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
|
664 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
665 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
666 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
|
667 return sign; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
668 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
669 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
671 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
674 * 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
|
675 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
677 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
|
678 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
|
679 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
|
680 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
|
681 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
682 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
|
683 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 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
|
685 if (sign != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
686 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
|
687 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
688 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
689 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
691 # 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
|
692 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
693 * 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
|
694 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
696 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
|
697 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
|
698 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
|
699 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
|
700 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
701 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
|
702 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 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
|
704 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
705 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
706 // 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
|
707 // 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
|
708 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
709 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
710 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
|
711 return sign->se_id; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
712 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
713 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
714 return 0; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
715 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 # 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
|
719 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
720 * 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
|
721 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
722 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 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
|
724 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
725 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
|
726 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
|
727 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
728 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
|
729 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
730 if (sign->se_lnum > lnum) |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
731 // 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
|
732 // 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
|
733 break; |
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
734 |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
735 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
|
736 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
|
737 count++; |
17264
82b5d981fe59
patch 8.1.1631: displaying signs is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
17247
diff
changeset
|
738 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
739 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
740 return count; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
741 } |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
742 # endif // FEAT_SIGN_ICONS |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
743 # 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
|
744 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
745 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
746 * 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
|
747 * 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
|
748 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
750 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
|
751 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
752 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
753 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
|
754 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
|
755 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
756 // 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
|
757 // 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
|
758 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
|
759 { |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
760 redraw_buf_later(buf, UPD_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
|
761 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
|
762 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
763 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
764 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
|
765 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
|
766 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
767 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
|
768 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
|
769 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 *lastp = next; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
771 if (next != NULL) |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
772 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
|
773 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
|
774 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
|
775 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
|
776 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 else |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
778 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
|
779 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
780 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
781 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 * 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
|
784 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 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
|
787 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
788 buf_T *buf; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
789 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
790 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
|
791 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
|
792 |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
793 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
|
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 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
|
796 buf = firstbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
797 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
798 buf = rbuf; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
799 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
|
800 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
801 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
|
802 { |
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(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
|
804 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
|
805 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
|
806 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 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
|
808 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
809 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
|
810 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
811 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
|
812 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
813 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
|
814 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
|
815 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
|
816 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 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
|
818 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
|
819 _(" 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
|
820 (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
|
821 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
|
822 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
|
823 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
|
824 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
825 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
|
826 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 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
|
828 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
830 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
832 * 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
|
833 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
834 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
835 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
|
836 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
|
837 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
|
838 long amount, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
839 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
|
840 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
841 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
|
842 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
|
843 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
844 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
|
845 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
846 // 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
|
847 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
|
848 continue; |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
849 new_lnum = sign->se_lnum; |
28169
bef82285dda0
patch 8.2.4610: some conditions are always true
Bram Moolenaar <Bram@vim.org>
parents:
27426
diff
changeset
|
850 if (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
|
851 { |
15519
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
852 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
|
853 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
|
854 } |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
855 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
|
856 // 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
|
857 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
|
858 |
89e76a598b30
patch 8.1.0767: when deleting lines at the bottom signs are misplaced
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
859 // 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
|
860 // 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
|
861 // 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
|
862 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
|
863 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
|
864 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
865 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
866 |
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 * 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
|
869 * "*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
|
870 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
871 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
872 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
|
873 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
|
874 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
|
875 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
876 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 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
|
878 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
879 *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
|
880 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
|
881 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
|
882 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
883 *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
|
884 return idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
885 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 |
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 * 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
|
889 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 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
|
891 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
|
892 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 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
|
894 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
895 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
|
896 *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
|
897 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
|
898 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
899 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
|
900 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 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
|
902 *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
|
903 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
904 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 return sp; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
906 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
907 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
908 /* |
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 * 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
|
910 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
911 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
|
912 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
|
913 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
914 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
|
915 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
|
916 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
|
917 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
918 // 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
|
919 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
|
920 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
|
921 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
|
922 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
923 // 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
|
924 // 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
|
925 // 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
|
926 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
|
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 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
|
929 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
930 ++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
|
931 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
|
932 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
|
933 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
|
934 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
935 vim_free(sp); |
26948
51ddf6740ac6
patch 8.2.4003: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26893
diff
changeset
|
936 emsg(_(e_too_many_signs_defined)); |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
937 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
|
938 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
939 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
|
940 continue; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
941 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
942 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
|
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 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
|
946 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
|
947 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
|
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 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
|
950 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
|
951 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
952 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
|
953 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
|
954 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
955 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
956 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
|
957 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
958 |
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 * 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
|
961 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
962 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
|
963 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
|
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 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
|
966 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
|
967 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
|
968 # 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
|
969 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
|
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 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
|
972 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
|
973 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
|
974 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
|
975 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
976 # endif |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
977 } |
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 /* |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
980 * 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
|
981 */ |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
982 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
|
983 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
|
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 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
|
986 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
|
987 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
|
988 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
|
989 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
990 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
|
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 // 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
|
993 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
|
994 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
|
995 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
996 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
|
997 --endp; |
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 // 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
|
1001 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
|
1002 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1003 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
|
1004 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
|
1005 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1006 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
|
1007 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1008 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
|
1009 } |
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 else |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1012 { |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1013 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
|
1014 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
|
1015 break; |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1016 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
|
1017 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1018 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1019 // 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
|
1020 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
|
1021 { |
26893
79c76ca2c53c
patch 8.2.3975: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
1022 semsg(_(e_invalid_sign_text_str), text); |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1023 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
|
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 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1026 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
|
1027 // 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
|
1028 // 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
|
1029 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
|
1030 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
|
1031 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1032 // 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
|
1033 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
|
1034 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
|
1035 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1036 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
|
1037 } |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1038 |
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1039 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 * 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
|
1041 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 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
|
1044 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
|
1045 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
|
1046 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
|
1047 char_u *text, |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1048 char_u *texthl, |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1049 char_u *culhl, |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1050 char_u *numhl) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 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
|
1053 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
|
1054 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 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
|
1056 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
|
1057 { |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1058 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
|
1059 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
|
1060 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 // 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
|
1063 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
|
1064 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
|
1065 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 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
|
1067 } |
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
|
1068 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
|
1069 { |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1070 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
|
1071 |
5cd0986ab02e
patch 8.2.0108: when sign text is changed a manual redraw is needed
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
1072 // 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
|
1073 // 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
|
1074 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
|
1075 if (wp->w_buffer->b_signlist != NULL) |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
1076 redraw_buf_later(wp->w_buffer, UPD_NOT_VALID); |
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
|
1077 } |
15330
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 // 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
|
1080 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
|
1081 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
|
1082 |
15529
233e2c585e03
patch 8.1.0772: the sign_define_by_name() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
15519
diff
changeset
|
1083 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
|
1084 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
|
1085 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1086 if (linehl != NULL) |
26432
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1087 { |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1088 if (*linehl == NUL) |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1089 sp->sn_line_hl = 0; |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1090 else |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1091 sp->sn_line_hl = syn_check_group(linehl, (int)STRLEN(linehl)); |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1092 } |
15330
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 if (texthl != NULL) |
26432
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1095 { |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1096 if (*texthl == NUL) |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1097 sp->sn_text_hl = 0; |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1098 else |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1099 sp->sn_text_hl = syn_check_group(texthl, (int)STRLEN(texthl)); |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1100 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1102 if (culhl != NULL) |
26432
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1103 { |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1104 if (*culhl == NUL) |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1105 sp->sn_cul_hl = 0; |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1106 else |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1107 sp->sn_cul_hl = syn_check_group(culhl, (int)STRLEN(culhl)); |
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1108 } |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1109 |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1110 if (numhl != NULL) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1111 { |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1112 if (*numhl == NUL) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1113 sp->sn_num_hl = 0; |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1114 else |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1115 sp->sn_num_hl = syn_check_group(numhl, (int)STRLEN(numhl)); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1116 } |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1117 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 return OK; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 /* |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1122 * 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
|
1123 */ |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1124 int |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1125 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
|
1126 { |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1127 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
|
1128 } |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1129 |
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1130 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1131 * 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
|
1132 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1133 int |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1134 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
|
1135 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1136 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
|
1137 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
|
1138 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 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
|
1140 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
|
1141 { |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1142 if (give_error) |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1143 semsg(_(e_unknown_sign_str), name); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 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
|
1147 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 * 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
|
1153 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 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
|
1156 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 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
|
1158 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 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
|
1160 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
|
1161 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
|
1162 else |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1163 semsg(_(e_unknown_sign_str), name); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1166 static void |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1167 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
|
1168 { |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1169 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
|
1170 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
|
1171 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1172 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
|
1173 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
|
1174 && (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
|
1175 && (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
|
1176 && (*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
|
1177 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
|
1178 } |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1179 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 /* |
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
|
1181 * 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
|
1182 */ |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
1183 int |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 sign_place( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 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
|
1186 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
|
1187 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
|
1188 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
|
1189 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
|
1190 int prio) |
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 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
|
1193 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 // 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
|
1195 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
|
1196 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1198 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
|
1199 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
|
1200 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 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
|
1202 { |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1203 semsg(_(e_unknown_sign_str), 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
|
1204 return FAIL; |
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 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
|
1207 *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
|
1208 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1209 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
|
1210 // ":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
|
1211 // 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
|
1212 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
|
1213 else |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
1214 // ":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
|
1215 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
|
1216 prio); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1217 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
|
1218 { |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1219 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
|
1220 |
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1221 // 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
|
1222 // 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
|
1223 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
|
1224 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 { |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1227 semsg(_(e_not_possible_to_change_sign_str), 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
|
1228 return FAIL; |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 |
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 * 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
|
1236 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1237 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
|
1238 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
|
1239 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 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
|
1241 return OK; |
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 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
|
1244 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 // Delete all the signs in the specified buffer |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
1246 redraw_buf_later(buf, UPD_NOT_VALID); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 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
|
1248 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1249 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 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
|
1252 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 // 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
|
1254 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
|
1255 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
|
1256 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 |
17247
cbd0432cf8ff
patch 8.1.1623: display wrong with signs in narrow number column
Bram Moolenaar <Bram@vim.org>
parents:
17218
diff
changeset
|
1259 // 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
|
1260 // 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
|
1261 // 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
|
1262 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
|
1263 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
|
1264 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1265 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1266 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 * 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
|
1270 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 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
|
1273 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 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
|
1275 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1276 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
|
1277 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
|
1278 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
|
1279 else |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1280 emsg(_(e_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
|
1281 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1284 * 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
|
1285 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1286 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
|
1287 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
|
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 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
|
1290 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1291 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
|
1292 { |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1293 semsg(_(e_invalid_sign_id_nr), 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
|
1294 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
|
1295 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1296 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1297 // 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
|
1298 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
|
1299 { // ... 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
|
1300 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
|
1301 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
|
1302 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
|
1303 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1304 else |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1305 { // ... 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
|
1306 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
|
1307 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1308 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
|
1309 { |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26948
diff
changeset
|
1310 emsg(_(e_cannot_jump_to_buffer_that_does_not_have_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
|
1311 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
|
1312 } |
16768
695d9ef00b03
patch 8.1.1386: unessesary type casts for lalloc()
Bram Moolenaar <Bram@vim.org>
parents:
15864
diff
changeset
|
1313 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
|
1314 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
|
1315 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
|
1316 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
|
1317 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
|
1318 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
|
1319 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1320 # 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
|
1321 foldOpenCursor(); |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1322 # endif |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1323 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1324 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
|
1325 } |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1326 |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1327 /* |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1328 * ":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
|
1329 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 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
|
1332 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 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
|
1334 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
|
1335 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
|
1336 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
|
1337 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
|
1338 char_u *texthl = NULL; |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1339 char_u *culhl = NULL; |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1340 char_u *numhl = NULL; |
26432
99a512bd8423
patch 8.2.3747: cannot remove highlight from an existing sign
Bram Moolenaar <Bram@vim.org>
parents:
26424
diff
changeset
|
1341 int failed = FALSE; |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1342 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1343 // 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
|
1344 for (;;) |
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 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
|
1347 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
|
1348 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 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
|
1350 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
|
1351 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 arg += 5; |
20830
9064044fd4f6
patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
1353 icon = vim_strnsave(arg, p - arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 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
|
1356 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 arg += 5; |
20830
9064044fd4f6
patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
1358 text = vim_strnsave(arg, p - arg); |
15330
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 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
|
1361 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 arg += 7; |
20830
9064044fd4f6
patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
1363 linehl = vim_strnsave(arg, p - arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 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
|
1366 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 arg += 7; |
20830
9064044fd4f6
patch 8.2.0967: unnecessary type casts for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
1368 texthl = vim_strnsave(arg, p - arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 } |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1370 else if (STRNCMP(arg, "culhl=", 6) == 0) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1371 { |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1372 arg += 6; |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1373 culhl = vim_strnsave(arg, p - arg); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1374 } |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1375 else if (STRNCMP(arg, "numhl=", 6) == 0) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1376 { |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1377 arg += 6; |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1378 numhl = vim_strnsave(arg, p - arg); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1379 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1382 semsg(_(e_invalid_argument_str), arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 failed = TRUE; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 break; |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 if (!failed) |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1389 sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1391 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
|
1392 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
|
1393 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
|
1394 vim_free(texthl); |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1395 vim_free(culhl); |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1396 vim_free(numhl); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1400 * ":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
|
1401 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 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
|
1404 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
|
1405 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
|
1406 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
|
1407 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1408 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
|
1409 int prio) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 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
|
1412 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 // 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
|
1414 // :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
|
1415 // :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
|
1416 // :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
|
1417 // :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
|
1418 // :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
|
1419 // :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
|
1420 // :sign place |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 // :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
|
1422 // :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
|
1423 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
|
1424 || (group != NULL && *group == '\0')) |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1425 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 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
|
1428 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1431 // 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
|
1432 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
|
1433 || (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
|
1434 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1435 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1436 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1437 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1438 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 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
|
1440 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 } |
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 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1444 * ":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
|
1445 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1446 static void |
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_cmd( |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 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
|
1449 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
|
1450 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
|
1451 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 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
|
1453 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 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
|
1455 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1456 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1457 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1458 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1459 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1460 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
|
1461 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1462 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
|
1463 // :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
|
1464 // :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
|
1465 // :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
|
1466 // :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
|
1467 // :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
|
1468 // :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
|
1469 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
|
1470 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1471 // :sign unplace * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1472 // :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
|
1473 // :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
|
1474 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
|
1475 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
|
1476 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
|
1477 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1480 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
|
1481 // :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
|
1482 // :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
|
1483 // :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
|
1484 // :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
|
1485 // :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
|
1486 // :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
|
1487 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
|
1488 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1489 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 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
|
1491 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 // :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
|
1493 // :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
|
1494 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
|
1495 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 // :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
|
1499 // :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
|
1500 // :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
|
1501 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
|
1502 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
|
1503 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1505 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1507 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1508 /* |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1509 * 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
|
1510 * :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
|
1511 * :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
|
1512 * :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
|
1513 * :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
|
1514 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 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
|
1517 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
|
1518 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
|
1519 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
|
1520 int id, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 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
|
1522 { |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1523 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
|
1524 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1525 emsg(_(e_argument_required)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1526 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1527 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1529 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
|
1530 || 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
|
1531 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1532 // 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
|
1533 // or a line number or a sign name is specified. |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1534 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1535 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1536 } |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
1537 (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
|
1538 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1539 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1540 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1541 * 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
|
1542 * ":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
|
1543 * 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
|
1544 * 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
|
1545 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 static int |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1547 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
|
1548 int cmd, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1549 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
|
1550 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
|
1551 int *signid, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1552 char_u **group, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 int *prio, |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1554 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
|
1555 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
|
1556 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 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
|
1558 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
|
1559 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
|
1560 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
|
1561 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1562 // 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
|
1563 arg1 = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1564 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
|
1565 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1566 *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
|
1567 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
|
1568 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 *signid = -1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1570 arg = arg1; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1571 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1572 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1573 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
|
1574 } |
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 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
|
1577 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1578 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
|
1579 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1580 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1581 *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
|
1582 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
|
1583 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
|
1584 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1585 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
|
1586 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1587 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
|
1588 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1589 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1591 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1592 *signid = -2; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1593 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
|
1594 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 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
|
1596 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1597 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1598 name = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 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
|
1600 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
|
1601 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1602 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
|
1603 ++name; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 *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
|
1605 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1606 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
|
1607 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1608 arg += 6; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 *group = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1610 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
|
1611 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
|
1612 *arg++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1613 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1614 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
|
1615 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1616 arg += 9; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1617 *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
|
1618 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
|
1619 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1620 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
|
1621 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1622 arg += 5; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1623 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1624 *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
|
1625 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1626 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1627 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
|
1628 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1629 arg += 7; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1630 filename = arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1631 *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
|
1632 if (*skipwhite(arg) != NUL) |
26883
7f150a4936f2
patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1633 semsg(_(e_trailing_characters_str), arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1634 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1635 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1636 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1637 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
1638 emsg(_(e_invalid_argument)); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1639 return FAIL; |
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 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
|
1642 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1643 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1644 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
|
1645 { |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1646 semsg(_(e_invalid_buffer_name_str), filename); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1647 return FAIL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1649 |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1650 // 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
|
1651 // 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
|
1652 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
|
1653 || cmd == SIGNCMD_JUMP)) |
15378
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1654 *buf = curwin->w_buffer; |
0d76dd701e49
patch 8.1.0697: ":sign place" requires the buffer argument
Bram Moolenaar <Bram@vim.org>
parents:
15330
diff
changeset
|
1655 |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1656 return OK; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1657 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1659 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1660 * ":sign" command |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1661 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1662 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1663 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
|
1664 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1665 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
|
1666 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
|
1667 int idx; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 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
|
1669 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
|
1670 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1671 // 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
|
1672 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
|
1673 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
|
1674 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
|
1675 { |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1676 semsg(_(e_unknown_sign_command_str), arg); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1678 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 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
|
1680 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1681 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
|
1682 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1683 // 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
|
1684 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
|
1685 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 // ":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
|
1687 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
|
1688 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
|
1689 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 else if (*arg == NUL) |
26853
806f31579357
patch 8.2.3955: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26690
diff
changeset
|
1691 emsg(_(e_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
|
1692 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1693 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1694 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
|
1695 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1696 // 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
|
1697 // 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
|
1698 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
|
1699 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
|
1700 *p++ = NUL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1701 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
|
1702 ++arg; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1703 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
|
1704 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1705 if (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
|
1706 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
|
1707 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
|
1708 // ":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
|
1709 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
|
1710 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 // ":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
|
1712 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
|
1713 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1714 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
|
1715 return; |
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 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1718 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1719 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1720 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
|
1721 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
|
1722 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
|
1723 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
|
1724 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
|
1725 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1726 // 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
|
1727 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
|
1728 &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
|
1729 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1730 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 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
|
1732 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
|
1733 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
|
1734 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
|
1735 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
|
1736 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
|
1737 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1738 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 |
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 * 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
|
1742 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1743 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1744 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
|
1745 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1746 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
|
1747 |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1748 dict_add_string(retdict, "name", 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
|
1749 if (sp->sn_icon != NULL) |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1750 dict_add_string(retdict, "icon", sp->sn_icon); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1751 if (sp->sn_text != NULL) |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1752 dict_add_string(retdict, "text", sp->sn_text); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 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
|
1754 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1756 if (p == NULL) |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1757 p = (char_u *)"NONE"; |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1758 dict_add_string(retdict, "linehl", p); |
15330
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 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
|
1761 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1762 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
|
1763 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
|
1764 p = (char_u *)"NONE"; |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1765 dict_add_string(retdict, "texthl", p); |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1766 } |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1767 if (sp->sn_cul_hl > 0) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1768 { |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1769 p = get_highlight_name_ext(NULL, sp->sn_cul_hl - 1, FALSE); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1770 if (p == NULL) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1771 p = (char_u *)"NONE"; |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1772 dict_add_string(retdict, "culhl", p); |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1773 } |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1774 if (sp->sn_num_hl > 0) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1775 { |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1776 p = get_highlight_name_ext(NULL, sp->sn_num_hl - 1, FALSE); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1777 if (p == NULL) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1778 p = (char_u *)"NONE"; |
27426
41e0dcf38521
patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1779 dict_add_string(retdict, "numhl", p); |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1780 } |
15330
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 |
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 '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
|
1785 * 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
|
1786 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1787 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
|
1788 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
|
1789 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1790 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
|
1791 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
|
1792 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 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
|
1794 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1795 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
|
1796 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
|
1797 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1798 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1799 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1800 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
|
1801 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1802 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
|
1803 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1804 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
|
1805 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1806 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
|
1807 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1808 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
|
1809 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1810 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1811 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1812 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1813 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1814 * 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
|
1815 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1816 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1817 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
|
1818 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1819 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1820 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
|
1821 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1822 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
|
1823 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1824 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
|
1825 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
|
1826 } |
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 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1829 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1830 * 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
|
1831 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1832 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1833 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
|
1834 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
|
1835 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
|
1836 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
|
1837 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
|
1838 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
|
1839 { |
18422
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1840 dict_T *d; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1841 list_T *l; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1842 sign_entry_T *sign; |
1848b3e07266
patch 8.1.2205: sign entry structure has confusing name
Bram Moolenaar <Bram@vim.org>
parents:
17805
diff
changeset
|
1843 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
|
1844 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 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
|
1846 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1847 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
|
1848 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1849 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
|
1850 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1851 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
|
1852 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1853 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
|
1854 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1855 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
|
1856 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1857 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
|
1858 continue; |
15402
c17b5e30a0af
patch 8.1.0709: windows are updated for every added/deleted sign
Bram Moolenaar <Bram@vim.org>
parents:
15388
diff
changeset
|
1859 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
|
1860 || (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
|
1861 || (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
|
1862 || (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
|
1863 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1864 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
|
1865 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
|
1866 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1867 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1868 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1869 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1870 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1871 * 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
|
1872 * 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
|
1873 * 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
|
1874 */ |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
1875 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
|
1876 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
|
1877 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
|
1878 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
|
1879 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
|
1880 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
|
1881 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
|
1882 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1883 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
|
1884 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
|
1885 else |
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 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
|
1888 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
|
1889 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
|
1890 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1891 } |
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 # 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
|
1894 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1895 * 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
|
1896 * 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
|
1897 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1898 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1899 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
|
1900 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1901 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
|
1902 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
1903 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
|
1904 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
|
1905 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
|
1906 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1907 # endif |
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 * 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
|
1911 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1913 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
|
1914 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1915 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
|
1916 |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15418
diff
changeset
|
1917 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
|
1918 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
|
1919 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1920 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
|
1921 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
|
1922 # 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
|
1923 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
|
1924 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
|
1925 # else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1926 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
|
1927 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1928 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1929 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
|
1930 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1931 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
|
1932 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
|
1933 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1934 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
|
1935 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1936 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
|
1937 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
|
1938 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1939 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
|
1940 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1941 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
|
1942 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1943 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
|
1944 { |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1945 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
|
1946 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
|
1947 if (p == NULL) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1948 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
|
1949 else |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15529
diff
changeset
|
1950 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
|
1951 } |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1952 if (sp->sn_cul_hl > 0) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1953 { |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1954 msg_puts(" culhl="); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1955 p = get_highlight_name_ext(NULL, sp->sn_cul_hl - 1, FALSE); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1956 if (p == NULL) |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1957 msg_puts("NONE"); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1958 else |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1959 msg_puts((char *)p); |
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
1960 } |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1961 if (sp->sn_num_hl > 0) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1962 { |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1963 msg_puts(" numhl="); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1964 p = get_highlight_name_ext(NULL, sp->sn_num_hl - 1, FALSE); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1965 if (p == NULL) |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1966 msg_puts("NONE"); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1967 else |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1968 msg_puts((char *)p); |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
1969 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1970 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1971 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1972 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1973 * 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
|
1974 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1975 static void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1976 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
|
1977 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1978 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
|
1979 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
|
1980 # 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
|
1981 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
|
1982 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1983 out_flush(); |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1984 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
|
1985 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1986 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1987 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
|
1988 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
|
1989 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
|
1990 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1991 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
|
1992 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
|
1993 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1994 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1995 # 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
|
1996 void * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1997 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
|
1998 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
|
1999 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2000 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
|
2001 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2002 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
|
2003 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
|
2004 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
|
2005 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2006 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2007 # endif |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2008 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2009 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2010 * 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
|
2011 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2012 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2013 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
|
2014 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2015 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
|
2016 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
|
2017 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2018 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2019 static enum |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2020 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2021 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
|
2022 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
|
2023 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
|
2024 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
|
2025 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
|
2026 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
|
2027 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
|
2028 } expand_what; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2029 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2030 /* |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2031 * 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
|
2032 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2033 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2034 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
|
2035 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2036 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2037 sign_T *sp; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2038 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2039 // 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
|
2040 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
|
2041 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
|
2042 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2043 return sp->sn_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2044 return NULL; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2045 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2046 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2047 /* |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2048 * 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
|
2049 */ |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2050 static char_u * |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2051 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
|
2052 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2053 int current_idx; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2054 int todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2055 hashitem_T *hi; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2056 signgroup_T *group; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2057 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2058 // 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
|
2059 current_idx = 0; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2060 todo = (int)sg_table.ht_used; |
32118
04d9dff67d99
patch 9.0.1390: FOR_ALL_ macros are defined in an unexpected file
Bram Moolenaar <Bram@vim.org>
parents:
31809
diff
changeset
|
2061 FOR_ALL_HASHTAB_ITEMS(&sg_table, hi, todo) |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2062 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2063 if (!HASHITEM_EMPTY(hi)) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2064 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2065 --todo; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2066 if (current_idx++ == idx) |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2067 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2068 group = HI2SG(hi); |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2069 return group->sg_name; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2070 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2071 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2072 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2073 return NULL; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2074 } |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2075 |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2076 /* |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2077 * 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
|
2078 * expansion. |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2079 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2080 char_u * |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2081 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
|
2082 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2083 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
|
2084 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2085 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
|
2086 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
|
2087 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
|
2088 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2089 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
|
2090 { |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2091 "culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", NULL |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2092 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2093 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
|
2094 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2095 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
|
2096 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2097 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
|
2098 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2099 "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
|
2100 "buffer=", NULL |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2101 }; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2102 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
|
2103 } |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2104 case EXP_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2105 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2106 char *list_arg[] = |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2107 { |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2108 "group=", "file=", "buffer=", NULL |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2109 }; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2110 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
|
2111 } |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2112 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
|
2113 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2114 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
|
2115 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
|
2116 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2117 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
|
2118 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
|
2119 case EXP_SIGN_GROUPS: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2120 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
|
2121 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2122 return NULL; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2123 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2124 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2125 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2126 /* |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2127 * 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
|
2128 */ |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2129 void |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2130 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
|
2131 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2132 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
|
2133 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
|
2134 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
|
2135 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
|
2136 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
|
2137 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2138 // 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
|
2139 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
|
2140 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
|
2141 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
|
2142 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2143 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
|
2144 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
|
2145 // 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
|
2146 // :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
|
2147 return; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2148 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2149 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
|
2150 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2151 // :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
|
2152 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2153 // 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
|
2154 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
|
2155 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2156 // 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
|
2157 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2158 // :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
|
2159 // | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2160 // p |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2161 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2162 // 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
|
2163 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
|
2164 do |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2165 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2166 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
|
2167 last = p; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2168 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
|
2169 } 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
|
2170 |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2171 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
|
2172 |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2173 // :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
|
2174 // | | |
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2175 // 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
|
2176 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
|
2177 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2178 // 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
|
2179 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
|
2180 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
|
2181 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2182 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
|
2183 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
|
2184 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2185 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2186 // List placed signs |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2187 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
|
2188 // :sign place {id} {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2189 expand_what = EXP_PLACE; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2190 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2191 // :sign place {args}... |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2192 expand_what = EXP_LIST; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2193 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2194 case SIGNCMD_LIST: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2195 case SIGNCMD_UNDEFINE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2196 // :sign list <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2197 // :sign undefine <CTRL-D> |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2198 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
|
2199 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2200 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
|
2201 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
|
2202 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
|
2203 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2204 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2205 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
|
2206 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2207 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2208 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2209 { |
15418
51b3c36b0523
patch 8.1.0717: there is no function for the ":sign jump" command
Bram Moolenaar <Bram@vim.org>
parents:
15402
diff
changeset
|
2210 // 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
|
2211 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
|
2212 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
|
2213 { |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2214 case SIGNCMD_DEFINE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2215 if (STRNCMP(last, "texthl", 6) == 0 |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2216 || STRNCMP(last, "linehl", 6) == 0 |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2217 || STRNCMP(last, "culhl", 5) == 0 |
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2218 || STRNCMP(last, "numhl", 5) == 0) |
15330
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2219 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
|
2220 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
|
2221 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
|
2222 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2223 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
|
2224 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2225 case SIGNCMD_PLACE: |
15864
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2226 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
|
2227 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
|
2228 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
|
2229 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
|
2230 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
|
2231 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
|
2232 else |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2233 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
|
2234 break; |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2235 case SIGNCMD_UNPLACE: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2236 case SIGNCMD_JUMP: |
9e0154efac3a
patch 8.1.0939: no completion for sign group names
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
2237 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
|
2238 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
|
2239 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
|
2240 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
|
2241 else |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2242 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
|
2243 break; |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2244 default: |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2245 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
|
2246 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2247 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2248 } |
a6330a49e036
patch 8.1.0673: functionality for signs is spread out over several files
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2249 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2250 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2251 * 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
|
2252 * failure. |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2253 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2254 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2255 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
|
2256 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2257 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
|
2258 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
|
2259 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
|
2260 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
|
2261 char_u *texthl = NULL; |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
2262 char_u *culhl = NULL; |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2263 char_u *numhl = NULL; |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2264 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
|
2265 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2266 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
|
2267 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2268 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
|
2269 return -1; |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2270 name = dict_get_string(dict, "name", TRUE); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2271 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2272 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2273 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
|
2274 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
|
2275 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2276 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
|
2277 { |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2278 icon = dict_get_string(dict, "icon", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2279 linehl = dict_get_string(dict, "linehl", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2280 text = dict_get_string(dict, "text", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2281 texthl = dict_get_string(dict, "texthl", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2282 culhl = dict_get_string(dict, "culhl", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2283 numhl = dict_get_string(dict, "numhl", TRUE); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2284 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2285 |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2286 if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl) == OK) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2287 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2288 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2289 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2290 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
|
2291 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
|
2292 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
|
2293 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
|
2294 vim_free(texthl); |
26266
365e7f083f02
patch 8.2.3664: cannot adjust sign highlighting for 'cursorline'
Bram Moolenaar <Bram@vim.org>
parents:
25822
diff
changeset
|
2295 vim_free(culhl); |
26690
84d60deb8f82
patch 8.2.3874: cannot highlight the number column for a sign
Bram Moolenaar <Bram@vim.org>
parents:
26434
diff
changeset
|
2296 vim_free(numhl); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2297 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2298 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2299 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2300 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2301 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2302 * 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
|
2303 * 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
|
2304 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2305 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2306 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
|
2307 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2308 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
|
2309 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2310 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2311 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
|
2312 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2313 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2314 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
|
2315 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
|
2316 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
2317 emsg(_(e_dictionary_required)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2318 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
|
2319 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2320 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2321 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2322 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2323 * "sign_define()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2324 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2325 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2326 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
|
2327 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2328 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2329 |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2330 if (in_vim9script() |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2331 && (check_for_string_or_list_arg(argvars, 0) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2332 || check_for_opt_dict_arg(argvars, 1) == FAIL)) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2333 return; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2334 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2335 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
|
2336 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2337 // Define multiple signs |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2338 if (rettv_list_alloc(rettv) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2339 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2340 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2341 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
|
2342 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2343 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2344 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2345 // 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
|
2346 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
|
2347 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2348 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
|
2349 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2350 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2351 |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2352 if (check_for_opt_dict_arg(argvars, 1) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2353 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2354 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2355 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
|
2356 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
|
2357 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2358 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2359 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2360 * "sign_getdefined()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2361 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2362 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2363 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
|
2364 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2365 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
|
2366 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2367 if (rettv_list_alloc_id(rettv, aid_sign_getdefined) == FAIL) |
17218
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 |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2370 if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2371 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2372 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2373 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
|
2374 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
|
2375 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2376 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
|
2377 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2378 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2379 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2380 * "sign_getplaced()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2381 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2382 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2383 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
|
2384 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2385 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
|
2386 dict_T *dict; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2387 dictitem_T *di; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2388 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
|
2389 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
|
2390 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
|
2391 int notanum = FALSE; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2392 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2393 if (rettv_list_alloc_id(rettv, aid_sign_getplaced) == FAIL) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2394 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2395 |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
2396 if (in_vim9script() |
25314
7e620652bd13
patch 8.2.3194: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
2397 && (check_for_opt_buffer_arg(argvars, 0) == FAIL |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
2398 || (argvars[0].v_type != VAR_UNKNOWN |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
2399 && check_for_opt_dict_arg(argvars, 1) == FAIL))) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
2400 return; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25252
diff
changeset
|
2401 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2402 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
|
2403 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2404 // 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
|
2405 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
|
2406 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2407 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2408 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2409 if (argvars[1].v_type != VAR_UNKNOWN) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2410 { |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2411 if (check_for_nonnull_dict_arg(argvars, 1) == FAIL) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2412 return; |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2413 dict = argvars[1].vval.v_dict; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2414 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
|
2415 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2416 // 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
|
2417 (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
|
2418 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2419 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2420 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
|
2421 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2422 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
|
2423 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2424 // 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
|
2425 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
|
2426 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2427 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2428 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2429 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
|
2430 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2431 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
|
2432 if (group == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2433 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2434 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
|
2435 group = NULL; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2436 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2437 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2438 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2439 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2440 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
|
2441 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2442 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2443 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2444 * "sign_jump()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2445 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2446 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2447 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
|
2448 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2449 int sign_id; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2450 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
|
2451 buf_T *buf; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2452 int notanum = FALSE; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2453 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2454 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
|
2455 |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2456 if (in_vim9script() |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2457 && (check_for_number_arg(argvars, 0) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2458 || check_for_string_arg(argvars, 1) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2459 || check_for_buffer_arg(argvars, 2) == FAIL)) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2460 return; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2461 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2462 // Sign identifier |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2463 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
|
2464 if (notanum) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2465 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2466 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
|
2467 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
2468 emsg(_(e_invalid_argument)); |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2469 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2470 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2471 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2472 // Sign group |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2473 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
|
2474 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
|
2475 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2476 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
|
2477 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
|
2478 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2479 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2480 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
|
2481 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
|
2482 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2483 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2484 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2485 // 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
|
2486 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
|
2487 if (buf == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2488 goto cleanup; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2489 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2490 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
|
2491 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2492 cleanup: |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2493 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
|
2494 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2495 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2496 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2497 * 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
|
2498 * 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
|
2499 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2500 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2501 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
|
2502 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
|
2503 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
|
2504 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
|
2505 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
|
2506 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
|
2507 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2508 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
|
2509 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
|
2510 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
|
2511 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
|
2512 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
|
2513 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
|
2514 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
|
2515 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
|
2516 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
|
2517 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2518 // sign identifier |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2519 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
|
2520 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2521 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
|
2522 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
|
2523 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
|
2524 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2525 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
|
2526 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
|
2527 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2528 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2529 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
|
2530 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2531 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2532 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
|
2533 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
2534 emsg(_(e_invalid_argument)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2535 return -1; |
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 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2538 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2539 // sign group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2540 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
|
2541 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2542 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
|
2543 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
|
2544 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
|
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 (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
|
2547 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
|
2548 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2549 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2550 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
|
2551 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
|
2552 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2553 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
|
2554 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2555 else |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2556 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2557 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
|
2558 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
|
2559 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2560 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2561 } |
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 // sign name |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2564 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
|
2565 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2566 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
|
2567 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
|
2568 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
|
2569 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2570 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
|
2571 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2572 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
|
2573 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
|
2574 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2575 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2576 // 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
|
2577 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
|
2578 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2579 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
|
2580 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
|
2581 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
|
2582 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2583 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
|
2584 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2585 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
|
2586 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
|
2587 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2588 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2589 // 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
|
2590 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
|
2591 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
|
2592 { |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2593 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
|
2594 if (lnum <= 0) |
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2595 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
2596 emsg(_(e_invalid_argument)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2597 goto cleanup; |
17805
313f498c646e
patch 8.1.1899: sign_place() does not work as documented
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
2598 } |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2599 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2600 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2601 // sign priority |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2602 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
|
2603 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
|
2604 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2605 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
|
2606 if (notanum) |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2607 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2608 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2609 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2610 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
|
2611 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
|
2612 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2613 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2614 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
|
2615 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2616 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
|
2617 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2618 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2619 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2620 * "sign_place()" function |
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 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2623 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
|
2624 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2625 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
|
2626 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2627 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
|
2628 |
25338
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2629 if (in_vim9script() |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2630 && (check_for_number_arg(argvars, 0) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2631 || check_for_string_arg(argvars, 1) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2632 || check_for_string_arg(argvars, 2) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2633 || check_for_buffer_arg(argvars, 3) == FAIL |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2634 || check_for_opt_dict_arg(argvars, 4) == FAIL)) |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2635 return; |
e2be9f3c5907
patch 8.2.3206: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25314
diff
changeset
|
2636 |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2637 if (argvars[4].v_type != VAR_UNKNOWN) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2638 { |
29994
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2639 if (check_for_nonnull_dict_arg(argvars, 4) == FAIL) |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2640 return; |
86eb4aba16c3
patch 9.0.0335: checks for Dictionary argument often give a vague error
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
2641 dict = argvars[4].vval.v_dict; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2642 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2643 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2644 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
|
2645 &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
|
2646 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2647 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2648 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2649 * "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
|
2650 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2651 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2652 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
|
2653 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2654 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
|
2655 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
|
2656 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2657 if (rettv_list_alloc(rettv) == FAIL) |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2658 return; |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2659 |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2660 if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2661 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2662 |
30015
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
2663 if (check_for_list_arg(argvars, 0) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2664 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2665 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2666 // 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
|
2667 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
|
2668 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2669 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
|
2670 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
|
2671 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
|
2672 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
|
2673 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
2674 emsg(_(e_dictionary_required)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2675 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
|
2676 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2677 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2678 |
17366
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 * 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
|
2681 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2682 static void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2683 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
|
2684 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2685 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
|
2686 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
|
2687 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2688 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2689 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
|
2690 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2691 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2692 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
|
2693 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
|
2694 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2695 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
|
2696 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2697 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2698 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2699 /* |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2700 * "sign_undefine()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2701 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2702 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2703 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
|
2704 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2705 char_u *name; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2706 |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2707 if (in_vim9script() |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2708 && check_for_opt_string_or_list_arg(argvars, 0) == FAIL) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2709 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2710 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2711 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
|
2712 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2713 // Undefine multiple signs |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2714 if (rettv_list_alloc(rettv) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2715 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2716 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2717 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
|
2718 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2719 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2720 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2721 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
|
2722 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2723 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
|
2724 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2725 // 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
|
2726 free_signs(); |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2727 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
|
2728 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2729 else |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2730 { |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2731 // 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
|
2732 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
|
2733 if (name == NULL) |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2734 return; |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2735 |
17440
a5874fdc8f3a
patch 8.1.1718: popup menu highlighting does not look good
Bram Moolenaar <Bram@vim.org>
parents:
17366
diff
changeset
|
2736 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
|
2737 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
|
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 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2741 /* |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2742 * 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
|
2743 * 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
|
2744 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2745 static int |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2746 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
|
2747 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2748 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
|
2749 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
|
2750 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
|
2751 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
|
2752 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
|
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 group |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2755 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
|
2756 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
|
2757 else |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2758 group = dict_get_string(dict, "group", FALSE); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2759 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
|
2760 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2761 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
|
2762 group = NULL; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2763 else |
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 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
|
2766 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
|
2767 return -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2768 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2769 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2770 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2771 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
|
2772 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2773 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
|
2774 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2775 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
|
2776 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
|
2777 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2778 } |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28169
diff
changeset
|
2779 if (dict_has_key(dict, "id")) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2780 { |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
2781 sign_id = dict_get_number(dict, "id"); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2782 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
|
2783 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26853
diff
changeset
|
2784 emsg(_(e_invalid_argument)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2785 goto cleanup; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2786 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2787 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2788 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2789 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2790 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
|
2791 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2792 // 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
|
2793 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2794 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
|
2795 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
|
2796 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2797 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2798 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
|
2799 retval = 0; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2800 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2801 cleanup: |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2802 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
|
2803 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2804 return retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2805 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2806 |
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
|
2807 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
|
2808 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
|
2809 { |
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
|
2810 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
|
2811 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18744
diff
changeset
|
2812 # 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
|
2813 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
|
2814 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
|
2815 # 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
|
2816 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
|
2817 } |
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
|
2818 |
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
|
2819 /* |
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
|
2820 * 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
|
2821 */ |
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
|
2822 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
|
2823 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
|
2824 { |
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
|
2825 // 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
|
2826 // 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
|
2827 // 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
|
2828 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
|
2829 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
|
2830 |
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
|
2831 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
|
2832 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
|
2833 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
|
2834 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
|
2835 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
|
2836 # 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
|
2837 || 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
|
2838 # 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
|
2839 ); |
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
|
2840 } |
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
|
2841 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2842 /* |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2843 * "sign_unplace()" function |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2844 */ |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2845 void |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2846 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
|
2847 { |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2848 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
|
2849 |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2850 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
|
2851 |
30043
fd855ad74887
patch 9.0.0359: error message for wrong argument type is not specific
Bram Moolenaar <Bram@vim.org>
parents:
30015
diff
changeset
|
2852 if ((check_for_string_arg(argvars, 0) == FAIL |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2853 || check_for_opt_dict_arg(argvars, 1) == FAIL)) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2854 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2855 |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2856 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
|
2857 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
|
2858 |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2859 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
|
2860 } |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2861 |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2862 /* |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2863 * "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
|
2864 */ |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2865 void |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2866 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
|
2867 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2868 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
|
2869 int retval; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2870 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2871 if (rettv_list_alloc(rettv) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2872 return; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2873 |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2874 if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2875 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25338
diff
changeset
|
2876 |
30015
adb0de8be4ce
patch 9.0.0345: error message for list argument could be clearer
Bram Moolenaar <Bram@vim.org>
parents:
29994
diff
changeset
|
2877 if (check_for_list_arg(argvars, 0) == FAIL) |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2878 return; |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2879 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19447
diff
changeset
|
2880 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
|
2881 { |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2882 retval = -1; |
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2883 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
|
2884 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
|
2885 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
2886 emsg(_(e_dictionary_required)); |
17366
9843fbfa0ee5
patch 8.1.1682: placing a larger number of signs is slow
Bram Moolenaar <Bram@vim.org>
parents:
17264
diff
changeset
|
2887 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
|
2888 } |
17218
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2889 } |
210c4c5f783d
patch 8.1.1608: the evalfunc.c file is too big
Bram Moolenaar <Bram@vim.org>
parents:
17105
diff
changeset
|
2890 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
2891 #endif // FEAT_SIGNS |