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