Mercurial > vim
annotate src/netbeans.c @ 15300:890203d87ee5 v8.1.0658
patch 8.1.0658: deleting signs and completion for :sign is insufficient
commit https://github.com/vim/vim/commit/7d83bf4f2b785b46d87c7bc376fc9d0a862af782
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Dec 29 18:53:55 2018 +0100
patch 8.1.0658: deleting signs and completion for :sign is insufficient
Problem: Deleting signs and completion for :sign is insufficient.
Solution: Add deleting signs in a specified or any group from the current
cursor location. Add group and priority to sign command
completion. Add tests for different sign unplace commands. Update
help text. Add tests for sign jump with group. Update help for
sign jump. (Yegappan Lakshmanan, closes #3731)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 29 Dec 2018 19:00:08 +0100 |
parents | 3a99b2e6d136 |
children | 1d2b5c016f17 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
7 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * Netbeans integration by David Weatherford | |
5 * Adopted for Win32 by Sergey Khorev | |
6 * | |
7 * Do ":help uganda" in Vim to read copying and usage conditions. | |
8 * Do ":help credits" in Vim to see a list of people who contributed. | |
9 */ | |
10 | |
11 /* | |
12 * Implements client side of org.netbeans.modules.emacs editor | |
13 * integration protocol. Be careful! The protocol uses offsets | |
14 * which are *between* characters, whereas vim uses line number | |
15 * and column number which are *on* characters. | |
16 * See ":help netbeans-protocol" for explanation. | |
3151 | 17 * |
18 * The Netbeans messages are received and queued in the gui event loop, or in | |
19 * the select loop when Vim runs in a terminal. These messages are processed | |
20 * by netbeans_parse_messages() which is invoked in the idle loop when Vim is | |
21 * waiting for user input. The function netbeans_parse_messages() is also | |
22 * called from the ":sleep" command, to allow the execution of test cases that | |
23 * may not invoke the idle loop. | |
7 | 24 */ |
25 | |
26 #include "vim.h" | |
27 | |
28 #if defined(FEAT_NETBEANS_INTG) || defined(PROTO) | |
29 | |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
30 #ifndef WIN32 |
7753
15e67f90b9b2
commit https://github.com/vim/vim/commit/3e53c700a2bcbe7fafb51cd01f3e6428fd803099
Christian Brabandt <cb@256bit.org>
parents:
7743
diff
changeset
|
31 # include <netdb.h> |
7 | 32 # ifdef HAVE_LIBGEN_H |
33 # include <libgen.h> | |
34 # endif | |
35 #endif | |
36 | |
37 #include "version.h" | |
38 | |
39 #define GUARDED 10000 /* typenr for "guarded" annotation */ | |
40 #define GUARDEDOFFSET 1000000 /* base for "guarded" sign id's */ | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
41 #define MAX_COLOR_LENGTH 32 /* max length of color name in defineAnnoType */ |
7 | 42 |
43 /* The first implementation (working only with Netbeans) returned "1.1". The | |
44 * protocol implemented here also supports A-A-P. */ | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
45 static char *ExtEdProtocolVersion = "2.5"; |
7 | 46 |
7803
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
47 static long pos2off(buf_T *, pos_T *); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
48 static pos_T *off2pos(buf_T *, long); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
49 static pos_T *get_off_or_lnum(buf_T *buf, char_u **argp); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
50 static long get_buf_size(buf_T *); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
51 static int netbeans_keystring(char_u *keystr); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
52 static void special_keys(char_u *args); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
53 |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
54 static int getConnInfo(char *file, char **host, char **port, char **password); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
55 |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
56 static void nb_init_graphics(void); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
57 static void coloncmd(char *cmd, ...); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
58 static void nb_set_curbuf(buf_T *buf); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
59 static void nb_parse_cmd(char_u *); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
60 static int nb_do_cmd(int, char_u *, int, int, char_u *); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
61 static void nb_send(char *buf, char *fun); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
62 static void nb_free(void); |
7 | 63 |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
64 #define NETBEANS_OPEN (channel_can_write_to(nb_channel)) |
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
65 static channel_T *nb_channel = NULL; |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
66 |
944 | 67 static int r_cmdno; /* current command number for reply */ |
33 | 68 static int dosetvisible = FALSE; |
69 | |
7 | 70 /* |
71 * Include the debugging code if wanted. | |
72 */ | |
73 #ifdef NBDEBUG | |
74 # include "nbdebug.c" | |
75 #endif | |
76 | |
2210 | 77 static int needupdate = 0; |
78 static int inAtomic = 0; | |
7 | 79 |
2639 | 80 /* |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
81 * Callback invoked when the channel is closed. |
2639 | 82 */ |
7 | 83 static void |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
84 nb_channel_closed(void) |
7 | 85 { |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
86 nb_channel = NULL; |
2639 | 87 } |
88 | |
89 /* | |
90 * Close the connection and cleanup. | |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
91 * May be called when the socket was closed earlier. |
2639 | 92 */ |
93 static void | |
94 netbeans_close(void) | |
95 { | |
96 if (NETBEANS_OPEN) | |
97 { | |
98 netbeans_send_disconnect(); | |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
99 if (nb_channel != NULL) |
8267
108d30ed34ba
commit https://github.com/vim/vim/commit/187db50d0499aecf4cfd42fb4db0a1bebf61c8cd
Christian Brabandt <cb@256bit.org>
parents:
8240
diff
changeset
|
100 { |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
101 /* Close the socket and remove the input handlers. */ |
8240
60586ce747c4
commit https://github.com/vim/vim/commit/8b374215ccd35003b95ba1df8f12e03bf8a8adc3
Christian Brabandt <cb@256bit.org>
parents:
8218
diff
changeset
|
102 channel_close(nb_channel, TRUE); |
8267
108d30ed34ba
commit https://github.com/vim/vim/commit/187db50d0499aecf4cfd42fb4db0a1bebf61c8cd
Christian Brabandt <cb@256bit.org>
parents:
8240
diff
changeset
|
103 channel_clear(nb_channel); |
108d30ed34ba
commit https://github.com/vim/vim/commit/187db50d0499aecf4cfd42fb4db0a1bebf61c8cd
Christian Brabandt <cb@256bit.org>
parents:
8240
diff
changeset
|
104 } |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
105 nb_channel = NULL; |
2639 | 106 } |
107 | |
12871
1a450ce6980c
patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents:
12513
diff
changeset
|
108 #ifdef FEAT_BEVAL_GUI |
183 | 109 bevalServers &= ~BEVAL_NETBEANS; |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
110 #endif |
2210 | 111 |
112 needupdate = 0; | |
113 inAtomic = 0; | |
114 nb_free(); | |
115 | |
116 /* remove all signs and update the screen after gutter removal */ | |
117 coloncmd(":sign unplace *"); | |
118 changed_window_setting(); | |
119 update_screen(CLEAR); | |
120 setcursor(); | |
2745 | 121 cursor_on(); |
13150
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
122 out_flush_cursor(TRUE, FALSE); |
7 | 123 } |
124 | |
125 #define NB_DEF_HOST "localhost" | |
126 #define NB_DEF_ADDR "3219" | |
127 #define NB_DEF_PASS "changeme" | |
128 | |
2210 | 129 static int |
2271
2b33a7678e7b
Fix compiler warnings for shadowed variables. Make 'conceal' a long instead
Bram Moolenaar <bram@vim.org>
parents:
2241
diff
changeset
|
130 netbeans_connect(char *params, int doabort) |
7 | 131 { |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
132 int port; |
7 | 133 char buf[32]; |
134 char *hostname = NULL; | |
135 char *address = NULL; | |
136 char *password = NULL; | |
137 char *fname; | |
138 char *arg = NULL; | |
139 | |
2210 | 140 if (*params == '=') |
7 | 141 { |
2210 | 142 /* "=fname": Read info from specified file. */ |
7743
6069f43cea4e
commit https://github.com/vim/vim/commit/e0874f8cbcddfcf9965a85ba35199964efb1d01a
Christian Brabandt <cb@256bit.org>
parents:
7408
diff
changeset
|
143 if (getConnInfo(params + 1, &hostname, &address, &password) == FAIL) |
2210 | 144 return FAIL; |
7 | 145 } |
146 else | |
147 { | |
2210 | 148 if (*params == ':') |
149 /* ":<host>:<addr>:<password>": get info from argument */ | |
150 arg = params + 1; | |
7 | 151 if (arg == NULL && (fname = getenv("__NETBEANS_CONINFO")) != NULL) |
152 { | |
2210 | 153 /* "": get info from file specified in environment */ |
7 | 154 if (getConnInfo(fname, &hostname, &address, &password) == FAIL) |
2210 | 155 return FAIL; |
7 | 156 } |
157 else | |
158 { | |
159 if (arg != NULL) | |
160 { | |
2210 | 161 /* ":<host>:<addr>:<password>": get info from argument */ |
7 | 162 hostname = arg; |
163 address = strchr(hostname, ':'); | |
164 if (address != NULL) | |
165 { | |
166 *address++ = '\0'; | |
167 password = strchr(address, ':'); | |
168 if (password != NULL) | |
169 *password++ = '\0'; | |
170 } | |
171 } | |
172 | |
173 /* Get the missing values from the environment. */ | |
174 if (hostname == NULL || *hostname == '\0') | |
175 hostname = getenv("__NETBEANS_HOST"); | |
176 if (address == NULL) | |
177 address = getenv("__NETBEANS_SOCKET"); | |
178 if (password == NULL) | |
179 password = getenv("__NETBEANS_VIM_PASSWORD"); | |
180 | |
181 /* Move values to allocated memory. */ | |
182 if (hostname != NULL) | |
183 hostname = (char *)vim_strsave((char_u *)hostname); | |
184 if (address != NULL) | |
185 address = (char *)vim_strsave((char_u *)address); | |
186 if (password != NULL) | |
187 password = (char *)vim_strsave((char_u *)password); | |
188 } | |
189 } | |
190 | |
191 /* Use the default when a value is missing. */ | |
192 if (hostname == NULL || *hostname == '\0') | |
193 { | |
194 vim_free(hostname); | |
195 hostname = (char *)vim_strsave((char_u *)NB_DEF_HOST); | |
196 } | |
197 if (address == NULL || *address == '\0') | |
198 { | |
199 vim_free(address); | |
200 address = (char *)vim_strsave((char_u *)NB_DEF_ADDR); | |
201 } | |
202 if (password == NULL || *password == '\0') | |
203 { | |
204 vim_free(password); | |
205 password = (char *)vim_strsave((char_u *)NB_DEF_PASS); | |
206 } | |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
207 if (hostname != NULL && address != NULL && password != NULL) |
7 | 208 { |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
209 port = atoi(address); |
8114
4aea0b0aa714
commit https://github.com/vim/vim/commit/81661fb86801e6d6e5194b43dfd27d73fcc016ec
Christian Brabandt <cb@256bit.org>
parents:
8041
diff
changeset
|
210 nb_channel = channel_open(hostname, port, 3000, nb_channel_closed); |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
211 if (nb_channel != NULL) |
7 | 212 { |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
213 /* success */ |
12871
1a450ce6980c
patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents:
12513
diff
changeset
|
214 # ifdef FEAT_BEVAL_GUI |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
215 bevalServers |= BEVAL_NETBEANS; |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
216 # endif |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
217 |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
218 /* success, login */ |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
219 vim_snprintf(buf, sizeof(buf), "AUTH %s\n", password); |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
220 nb_send(buf, "netbeans_connect"); |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
221 |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
222 sprintf(buf, "0:version=0 \"%s\"\n", ExtEdProtocolVersion); |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
223 nb_send(buf, "externaleditor_version"); |
7 | 224 } |
225 } | |
226 | |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
227 if (nb_channel == NULL && doabort) |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
228 getout(1); |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
229 |
7 | 230 vim_free(hostname); |
231 vim_free(address); | |
232 vim_free(password); | |
2210 | 233 return NETBEANS_OPEN ? OK : FAIL; |
7 | 234 } |
235 | |
236 /* | |
237 * Obtain the NetBeans hostname, port address and password from a file. | |
238 * Return the strings in allocated memory. | |
239 * Return FAIL if the file could not be read, OK otherwise (no matter what it | |
240 * contains). | |
241 */ | |
242 static int | |
243 getConnInfo(char *file, char **host, char **port, char **auth) | |
244 { | |
245 FILE *fp; | |
246 char_u buf[BUFSIZ]; | |
247 char_u *lp; | |
3265 | 248 char_u *nlp; |
7 | 249 #ifdef UNIX |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9375
diff
changeset
|
250 stat_T st; |
7 | 251 |
252 /* | |
253 * For Unix only accept the file when it's not accessible by others. | |
254 * The open will then fail if we don't own the file. | |
255 */ | |
256 if (mch_stat(file, &st) == 0 && (st.st_mode & 0077) != 0) | |
257 { | |
1618 | 258 nbdebug(("Wrong access mode for NetBeans connection info file: \"%s\"\n", |
259 file)); | |
7 | 260 EMSG2(_("E668: Wrong access mode for NetBeans connection info file: \"%s\""), |
261 file); | |
262 return FAIL; | |
263 } | |
264 #endif | |
265 | |
266 fp = mch_fopen(file, "r"); | |
267 if (fp == NULL) | |
268 { | |
1618 | 269 nbdebug(("Cannot open NetBeans connection info file\n")); |
7 | 270 PERROR("E660: Cannot open NetBeans connection info file"); |
271 return FAIL; | |
272 } | |
273 | |
274 /* Read the file. There should be one of each parameter */ | |
275 while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL) | |
276 { | |
3265 | 277 if ((nlp = vim_strchr(lp, '\n')) != NULL) |
278 *nlp = 0; /* strip off the trailing newline */ | |
7 | 279 |
280 if (STRNCMP(lp, "host=", 5) == 0) | |
281 { | |
282 vim_free(*host); | |
283 *host = (char *)vim_strsave(&buf[5]); | |
284 } | |
285 else if (STRNCMP(lp, "port=", 5) == 0) | |
286 { | |
287 vim_free(*port); | |
288 *port = (char *)vim_strsave(&buf[5]); | |
289 } | |
290 else if (STRNCMP(lp, "auth=", 5) == 0) | |
291 { | |
292 vim_free(*auth); | |
293 *auth = (char *)vim_strsave(&buf[5]); | |
294 } | |
295 } | |
296 fclose(fp); | |
297 | |
298 return OK; | |
299 } | |
300 | |
301 | |
302 struct keyqueue | |
303 { | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
304 char_u *keystr; |
7 | 305 struct keyqueue *next; |
306 struct keyqueue *prev; | |
307 }; | |
308 | |
309 typedef struct keyqueue keyQ_T; | |
310 | |
311 static keyQ_T keyHead; /* dummy node, header for circular queue */ | |
312 | |
313 | |
314 /* | |
315 * Queue up key commands sent from netbeans. | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
316 * We store the string, because it may depend on the global mod_mask and |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
317 * :nbkey doesn't have a key number. |
7 | 318 */ |
319 static void | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
320 postpone_keycommand(char_u *keystr) |
7 | 321 { |
322 keyQ_T *node; | |
323 | |
324 node = (keyQ_T *)alloc(sizeof(keyQ_T)); | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
325 if (node == NULL) |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
326 return; /* out of memory, drop the key */ |
7 | 327 |
328 if (keyHead.next == NULL) /* initialize circular queue */ | |
329 { | |
330 keyHead.next = &keyHead; | |
331 keyHead.prev = &keyHead; | |
332 } | |
333 | |
334 /* insert node at tail of queue */ | |
335 node->next = &keyHead; | |
336 node->prev = keyHead.prev; | |
337 keyHead.prev->next = node; | |
338 keyHead.prev = node; | |
339 | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
340 node->keystr = vim_strsave(keystr); |
7 | 341 } |
342 | |
343 /* | |
344 * Handle any queued-up NetBeans keycommands to be send. | |
345 */ | |
346 static void | |
347 handle_key_queue(void) | |
348 { | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
349 int postponed = FALSE; |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
350 |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
351 while (!postponed && keyHead.next && keyHead.next != &keyHead) |
7 | 352 { |
353 /* first, unlink the node */ | |
354 keyQ_T *node = keyHead.next; | |
355 keyHead.next = node->next; | |
356 node->next->prev = node->prev; | |
357 | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
358 /* Now, send the keycommand. This may cause it to be postponed again |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
359 * and change keyHead. */ |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
360 if (node->keystr != NULL) |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
361 postponed = !netbeans_keystring(node->keystr); |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
362 vim_free(node->keystr); |
7 | 363 |
364 /* Finally, dispose of the node */ | |
365 vim_free(node); | |
366 } | |
367 } | |
368 | |
369 | |
370 /* | |
371 * While there's still a command in the work queue, parse and execute it. | |
372 */ | |
1618 | 373 void |
374 netbeans_parse_messages(void) | |
7 | 375 { |
9246
6ee88fa405b3
commit https://github.com/vim/vim/commit/5f1032d2a55b9417a0a6fa225e35089c98a5a419
Christian Brabandt <cb@256bit.org>
parents:
9215
diff
changeset
|
376 readq_T *node; |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
377 char_u *buffer; |
7 | 378 char_u *p; |
2653 | 379 int own_node; |
7 | 380 |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
381 while (nb_channel != NULL) |
7 | 382 { |
9246
6ee88fa405b3
commit https://github.com/vim/vim/commit/5f1032d2a55b9417a0a6fa225e35089c98a5a419
Christian Brabandt <cb@256bit.org>
parents:
9215
diff
changeset
|
383 node = channel_peek(nb_channel, PART_SOCK); |
6ee88fa405b3
commit https://github.com/vim/vim/commit/5f1032d2a55b9417a0a6fa225e35089c98a5a419
Christian Brabandt <cb@256bit.org>
parents:
9215
diff
changeset
|
384 if (node == NULL) |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
385 break; /* nothing to read */ |
7 | 386 |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
387 /* Locate the end of the first line in the first buffer. */ |
9246
6ee88fa405b3
commit https://github.com/vim/vim/commit/5f1032d2a55b9417a0a6fa225e35089c98a5a419
Christian Brabandt <cb@256bit.org>
parents:
9215
diff
changeset
|
388 p = channel_first_nl(node); |
7 | 389 if (p == NULL) |
390 { | |
391 /* Command isn't complete. If there is no following buffer, | |
392 * return (wait for more). If there is another buffer following, | |
393 * prepend the text to that buffer and delete this one. */ | |
9215
d2d44592467d
commit https://github.com/vim/vim/commit/9ed96efb3d47d46e9637da04656efff715102407
Christian Brabandt <cb@256bit.org>
parents:
9052
diff
changeset
|
394 if (channel_collapse(nb_channel, PART_SOCK, TRUE) == FAIL) |
7 | 395 return; |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
396 continue; |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
397 } |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
398 |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
399 /* There is a complete command at the start of the buffer. |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
400 * Terminate it with a NUL. When no more text is following unlink |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
401 * the buffer. Do this before executing, because new buffers can |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
402 * be added while busy handling the command. */ |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
403 *p++ = NUL; |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
404 if (*p == NUL) |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
405 { |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
406 own_node = TRUE; |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
407 buffer = channel_get(nb_channel, PART_SOCK); |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
408 /* "node" is now invalid! */ |
7 | 409 } |
410 else | |
411 { | |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
412 own_node = FALSE; |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
413 buffer = node->rq_buffer; |
7 | 414 } |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
415 |
9375
1f9172cbfef1
commit https://github.com/vim/vim/commit/24cf233ef9e92f947618c55d8bff423898a45c24
Christian Brabandt <cb@256bit.org>
parents:
9250
diff
changeset
|
416 /* Now, parse and execute the commands. This may set nb_channel to |
1f9172cbfef1
commit https://github.com/vim/vim/commit/24cf233ef9e92f947618c55d8bff423898a45c24
Christian Brabandt <cb@256bit.org>
parents:
9250
diff
changeset
|
417 * NULL if the channel is closed. */ |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
418 nb_parse_cmd(buffer); |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
419 |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
420 if (own_node) |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
421 /* buffer finished, dispose of it */ |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
422 vim_free(buffer); |
9375
1f9172cbfef1
commit https://github.com/vim/vim/commit/24cf233ef9e92f947618c55d8bff423898a45c24
Christian Brabandt <cb@256bit.org>
parents:
9250
diff
changeset
|
423 else if (nb_channel != NULL) |
9250
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
424 /* more follows, move it to the start */ |
d82724272c61
commit https://github.com/vim/vim/commit/5ce4a0b96ab688b1ea2481c2516e2889ff6713bf
Christian Brabandt <cb@256bit.org>
parents:
9246
diff
changeset
|
425 channel_consume(nb_channel, PART_SOCK, (int)(p - buffer)); |
7 | 426 } |
427 } | |
428 | |
429 /* | |
430 * Handle one NUL terminated command. | |
431 * | |
432 * format of a command from netbeans: | |
433 * | |
434 * 6:setTitle!84 "a.c" | |
435 * | |
436 * bufno | |
437 * colon | |
438 * cmd | |
439 * ! | |
440 * cmdno | |
441 * args | |
442 * | |
443 * for function calls, the ! is replaced by a / | |
444 */ | |
445 static void | |
446 nb_parse_cmd(char_u *cmd) | |
447 { | |
27 | 448 char *verb; |
449 char *q; | |
7 | 450 int bufno; |
451 int isfunc = -1; | |
452 | |
453 if (STRCMP(cmd, "DISCONNECT") == 0) | |
454 { | |
455 /* We assume the server knows that we can safely exit! */ | |
456 /* Disconnect before exiting, Motif hangs in a Select error | |
457 * message otherwise. */ | |
2210 | 458 netbeans_close(); |
7 | 459 getout(0); |
460 /* NOTREACHED */ | |
461 } | |
462 | |
8204
08d251a1c178
commit https://github.com/vim/vim/commit/eed284a16977ab81fa6da8c9562990ba498acd8c
Christian Brabandt <cb@256bit.org>
parents:
8151
diff
changeset
|
463 if (STRCMP(cmd, "DETACH") == 0) |
7 | 464 { |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
465 buf_T *buf; |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
466 |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9624
diff
changeset
|
467 FOR_ALL_BUFFERS(buf) |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
468 buf->b_has_sign_column = FALSE; |
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
469 |
7 | 470 /* The IDE is breaking the connection. */ |
2210 | 471 netbeans_close(); |
7 | 472 return; |
473 } | |
474 | |
27 | 475 bufno = strtol((char *)cmd, &verb, 10); |
7 | 476 |
477 if (*verb != ':') | |
478 { | |
1618 | 479 nbdebug((" missing colon: %s\n", cmd)); |
7 | 480 EMSG2("E627: missing colon: %s", cmd); |
481 return; | |
482 } | |
483 ++verb; /* skip colon */ | |
484 | |
485 for (q = verb; *q; q++) | |
486 { | |
487 if (*q == '!') | |
488 { | |
489 *q++ = NUL; | |
490 isfunc = 0; | |
491 break; | |
492 } | |
493 else if (*q == '/') | |
494 { | |
495 *q++ = NUL; | |
496 isfunc = 1; | |
497 break; | |
498 } | |
499 } | |
500 | |
501 if (isfunc < 0) | |
502 { | |
1618 | 503 nbdebug((" missing ! or / in: %s\n", cmd)); |
7 | 504 EMSG2("E628: missing ! or / in: %s", cmd); |
505 return; | |
506 } | |
507 | |
944 | 508 r_cmdno = strtol(q, &q, 10); |
27 | 509 |
510 q = (char *)skipwhite((char_u *)q); | |
511 | |
944 | 512 if (nb_do_cmd(bufno, (char_u *)verb, isfunc, r_cmdno, (char_u *)q) == FAIL) |
7 | 513 { |
33 | 514 #ifdef NBDEBUG |
515 /* | |
2047
85da03763130
updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents:
1956
diff
changeset
|
516 * This happens because the ExtEd can send a command or 2 after |
33 | 517 * doing a stopDocumentListen command. It doesn't harm anything |
518 * so I'm disabling it except for debugging. | |
519 */ | |
7 | 520 nbdebug(("nb_parse_cmd: Command error for \"%s\"\n", cmd)); |
521 EMSG("E629: bad return from nb_do_cmd"); | |
33 | 522 #endif |
7 | 523 } |
524 } | |
525 | |
526 struct nbbuf_struct | |
527 { | |
528 buf_T *bufp; | |
529 unsigned int fireChanges:1; | |
530 unsigned int initDone:1; | |
33 | 531 unsigned int insertDone:1; |
7 | 532 unsigned int modified:1; |
33 | 533 int nbbuf_number; |
7 | 534 char *displayname; |
535 int *signmap; | |
536 short_u signmaplen; | |
537 short_u signmapused; | |
538 }; | |
539 | |
540 typedef struct nbbuf_struct nbbuf_T; | |
541 | |
2210 | 542 static nbbuf_T *buf_list = NULL; |
344 | 543 static int buf_list_size = 0; /* size of buf_list */ |
544 static int buf_list_used = 0; /* nr of entries in buf_list actually in use */ | |
7 | 545 |
2210 | 546 static char **globalsignmap = NULL; |
547 static int globalsignmaplen = 0; | |
548 static int globalsignmapused = 0; | |
7 | 549 |
7803
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
550 static int mapsigntype(nbbuf_T *, int localsigntype); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
551 static void addsigntype(nbbuf_T *, int localsigntype, char_u *typeName, |
7 | 552 char_u *tooltip, char_u *glyphfile, |
7803
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
553 char_u *fg, char_u *bg); |
37c929c4a073
commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents:
7780
diff
changeset
|
554 static void print_read_msg(nbbuf_T *buf); |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9375
diff
changeset
|
555 static void print_save_msg(nbbuf_T *buf, off_T nchars); |
7 | 556 |
557 static int curPCtype = -1; | |
558 | |
559 /* | |
2210 | 560 * Free netbeans resources. |
561 */ | |
562 static void | |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
563 nb_free(void) |
2210 | 564 { |
565 keyQ_T *key_node = keyHead.next; | |
566 nbbuf_T buf; | |
567 int i; | |
568 | |
569 /* free the netbeans buffer list */ | |
570 for (i = 0; i < buf_list_used; i++) | |
571 { | |
572 buf = buf_list[i]; | |
573 vim_free(buf.displayname); | |
574 vim_free(buf.signmap); | |
2656 | 575 if (buf.bufp != NULL) |
2210 | 576 { |
577 buf.bufp->b_netbeans_file = FALSE; | |
578 buf.bufp->b_was_netbeans_file = FALSE; | |
579 } | |
580 } | |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13170
diff
changeset
|
581 VIM_CLEAR(buf_list); |
2210 | 582 buf_list_size = 0; |
583 buf_list_used = 0; | |
584 | |
585 /* free the queued key commands */ | |
3935 | 586 while (key_node != NULL && key_node != &keyHead) |
2210 | 587 { |
588 keyQ_T *next = key_node->next; | |
589 vim_free(key_node->keystr); | |
590 vim_free(key_node); | |
591 if (next == &keyHead) | |
592 { | |
593 keyHead.next = &keyHead; | |
594 keyHead.prev = &keyHead; | |
595 break; | |
596 } | |
597 key_node = next; | |
598 } | |
599 | |
600 /* free the queued netbeans commands */ | |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
601 if (nb_channel != NULL) |
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
602 channel_clear(nb_channel); |
2210 | 603 } |
604 | |
605 /* | |
7 | 606 * Get the Netbeans buffer number for the specified buffer. |
607 */ | |
608 static int | |
609 nb_getbufno(buf_T *bufp) | |
610 { | |
611 int i; | |
612 | |
613 for (i = 0; i < buf_list_used; i++) | |
614 if (buf_list[i].bufp == bufp) | |
615 return i; | |
616 return -1; | |
617 } | |
618 | |
619 /* | |
620 * Is this a NetBeans-owned buffer? | |
621 */ | |
622 int | |
623 isNetbeansBuffer(buf_T *bufp) | |
624 { | |
2210 | 625 return NETBEANS_OPEN && bufp->b_netbeans_file; |
7 | 626 } |
627 | |
628 /* | |
629 * NetBeans and Vim have different undo models. In Vim, the file isn't | |
630 * changed if changes are undone via the undo command. In NetBeans, once | |
631 * a change has been made the file is marked as modified until saved. It | |
632 * doesn't matter if the change was undone. | |
633 * | |
634 * So this function is for the corner case where Vim thinks a buffer is | |
635 * unmodified but NetBeans thinks it IS modified. | |
636 */ | |
637 int | |
638 isNetbeansModified(buf_T *bufp) | |
639 { | |
2210 | 640 if (isNetbeansBuffer(bufp)) |
33 | 641 { |
642 int bufno = nb_getbufno(bufp); | |
643 | |
644 if (bufno > 0) | |
645 return buf_list[bufno].modified; | |
646 else | |
647 return FALSE; | |
648 } | |
7 | 649 else |
650 return FALSE; | |
651 } | |
652 | |
653 /* | |
654 * Given a Netbeans buffer number, return the netbeans buffer. | |
655 * Returns NULL for 0 or a negative number. A 0 bufno means a | |
656 * non-buffer related command has been sent. | |
657 */ | |
658 static nbbuf_T * | |
659 nb_get_buf(int bufno) | |
660 { | |
661 /* find or create a buffer with the given number */ | |
662 int incr; | |
663 | |
664 if (bufno <= 0) | |
665 return NULL; | |
666 | |
667 if (!buf_list) | |
668 { | |
669 /* initialize */ | |
670 buf_list = (nbbuf_T *)alloc_clear(100 * sizeof(nbbuf_T)); | |
671 buf_list_size = 100; | |
672 } | |
673 if (bufno >= buf_list_used) /* new */ | |
674 { | |
675 if (bufno >= buf_list_size) /* grow list */ | |
676 { | |
6596 | 677 nbbuf_T *t_buf_list = buf_list; |
678 | |
7 | 679 incr = bufno - buf_list_size + 90; |
680 buf_list_size += incr; | |
681 buf_list = (nbbuf_T *)vim_realloc( | |
682 buf_list, buf_list_size * sizeof(nbbuf_T)); | |
6596 | 683 if (buf_list == NULL) |
684 { | |
685 vim_free(t_buf_list); | |
686 buf_list_size = 0; | |
687 return NULL; | |
688 } | |
2215
cccb71c2c5c1
Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents:
2213
diff
changeset
|
689 vim_memset(buf_list + buf_list_size - incr, 0, |
cccb71c2c5c1
Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents:
2213
diff
changeset
|
690 incr * sizeof(nbbuf_T)); |
7 | 691 } |
692 | |
693 while (buf_list_used <= bufno) | |
694 { | |
695 /* Default is to fire text changes. */ | |
696 buf_list[buf_list_used].fireChanges = 1; | |
697 ++buf_list_used; | |
698 } | |
699 } | |
700 | |
701 return buf_list + bufno; | |
702 } | |
703 | |
704 /* | |
705 * Return the number of buffers that are modified. | |
706 */ | |
707 static int | |
708 count_changed_buffers(void) | |
709 { | |
710 buf_T *bufp; | |
711 int n; | |
712 | |
713 n = 0; | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9624
diff
changeset
|
714 FOR_ALL_BUFFERS(bufp) |
7 | 715 if (bufp->b_changed) |
716 ++n; | |
717 return n; | |
718 } | |
719 | |
720 /* | |
721 * End the netbeans session. | |
722 */ | |
723 void | |
724 netbeans_end(void) | |
725 { | |
726 int i; | |
727 static char buf[128]; | |
728 | |
2210 | 729 if (!NETBEANS_OPEN) |
7 | 730 return; |
731 | |
732 for (i = 0; i < buf_list_used; i++) | |
733 { | |
734 if (!buf_list[i].bufp) | |
735 continue; | |
736 if (netbeansForcedQuit) | |
737 { | |
738 /* mark as unmodified so NetBeans won't put up dialog on "killed" */ | |
944 | 739 sprintf(buf, "%d:unmodified=%d\n", i, r_cmdno); |
7 | 740 nbdebug(("EVT: %s", buf)); |
741 nb_send(buf, "netbeans_end"); | |
742 } | |
944 | 743 sprintf(buf, "%d:killed=%d\n", i, r_cmdno); |
7 | 744 nbdebug(("EVT: %s", buf)); |
2210 | 745 /* nb_send(buf, "netbeans_end"); avoid "write failed" messages */ |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
746 nb_send(buf, NULL); |
7 | 747 } |
748 } | |
749 | |
750 /* | |
751 * Send a message to netbeans. | |
7770
42c1a4e63d12
commit https://github.com/vim/vim/commit/d04a020a8a8d7a438b091d49218c438880beb50c
Christian Brabandt <cb@256bit.org>
parents:
7753
diff
changeset
|
752 * When "fun" is NULL no error is given. |
7 | 753 */ |
754 static void | |
755 nb_send(char *buf, char *fun) | |
756 { | |
8041
c6443e78cf2d
commit https://github.com/vim/vim/commit/7707344ddec9069b495b2a5ed41f2104466fc88b
Christian Brabandt <cb@256bit.org>
parents:
7935
diff
changeset
|
757 if (nb_channel != NULL) |
9434
8f904a323b3f
commit https://github.com/vim/vim/commit/bf2cc5f36d5ffd5de445e6970602000c7869b65a
Christian Brabandt <cb@256bit.org>
parents:
9387
diff
changeset
|
758 channel_send(nb_channel, PART_SOCK, (char_u *)buf, |
8f904a323b3f
commit https://github.com/vim/vim/commit/bf2cc5f36d5ffd5de445e6970602000c7869b65a
Christian Brabandt <cb@256bit.org>
parents:
9387
diff
changeset
|
759 (int)STRLEN(buf), fun); |
7 | 760 } |
761 | |
762 /* | |
763 * Some input received from netbeans requires a response. This function | |
764 * handles a response with no information (except the command number). | |
765 */ | |
766 static void | |
767 nb_reply_nil(int cmdno) | |
768 { | |
769 char reply[32]; | |
770 | |
33 | 771 nbdebug(("REP %d: <none>\n", cmdno)); |
772 | |
2639 | 773 /* Avoid printing an annoying error message. */ |
774 if (!NETBEANS_OPEN) | |
775 return; | |
776 | |
7 | 777 sprintf(reply, "%d\n", cmdno); |
778 nb_send(reply, "nb_reply_nil"); | |
779 } | |
780 | |
781 | |
782 /* | |
783 * Send a response with text. | |
784 * "result" must have been quoted already (using nb_quote()). | |
785 */ | |
786 static void | |
787 nb_reply_text(int cmdno, char_u *result) | |
788 { | |
789 char_u *reply; | |
790 | |
33 | 791 nbdebug(("REP %d: %s\n", cmdno, (char *)result)); |
792 | |
835 | 793 reply = alloc((unsigned)STRLEN(result) + 32); |
7 | 794 sprintf((char *)reply, "%d %s\n", cmdno, (char *)result); |
795 nb_send((char *)reply, "nb_reply_text"); | |
796 | |
797 vim_free(reply); | |
798 } | |
799 | |
800 | |
801 /* | |
802 * Send a response with a number result code. | |
803 */ | |
804 static void | |
805 nb_reply_nr(int cmdno, long result) | |
806 { | |
807 char reply[32]; | |
808 | |
33 | 809 nbdebug(("REP %d: %ld\n", cmdno, result)); |
810 | |
7 | 811 sprintf(reply, "%d %ld\n", cmdno, result); |
812 nb_send(reply, "nb_reply_nr"); | |
813 } | |
814 | |
815 | |
816 /* | |
817 * Encode newline, ret, backslash, double quote for transmission to NetBeans. | |
818 */ | |
819 static char_u * | |
820 nb_quote(char_u *txt) | |
821 { | |
835 | 822 char_u *buf = alloc((unsigned)(2 * STRLEN(txt) + 1)); |
7 | 823 char_u *p = txt; |
824 char_u *q = buf; | |
825 | |
826 if (buf == NULL) | |
827 return NULL; | |
828 for (; *p; p++) | |
829 { | |
830 switch (*p) | |
831 { | |
832 case '\"': | |
833 case '\\': | |
834 *q++ = '\\'; *q++ = *p; break; | |
835 /* case '\t': */ | |
836 /* *q++ = '\\'; *q++ = 't'; break; */ | |
837 case '\n': | |
838 *q++ = '\\'; *q++ = 'n'; break; | |
839 case '\r': | |
840 *q++ = '\\'; *q++ = 'r'; break; | |
841 default: | |
842 *q++ = *p; | |
843 break; | |
844 } | |
845 } | |
2047
85da03763130
updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents:
1956
diff
changeset
|
846 *q = '\0'; |
7 | 847 |
848 return buf; | |
849 } | |
850 | |
851 | |
852 /* | |
853 * Remove top level double quotes; convert backslashed chars. | |
854 * Returns an allocated string (NULL for failure). | |
855 * If "endp" is not NULL it is set to the character after the terminating | |
856 * quote. | |
857 */ | |
858 static char * | |
859 nb_unquote(char_u *p, char_u **endp) | |
860 { | |
861 char *result = 0; | |
862 char *q; | |
863 int done = 0; | |
864 | |
865 /* result is never longer than input */ | |
835 | 866 result = (char *)alloc_clear((unsigned)STRLEN(p) + 1); |
7 | 867 if (result == NULL) |
868 return NULL; | |
869 | |
870 if (*p++ != '"') | |
871 { | |
872 nbdebug(("nb_unquote called with string that doesn't start with a quote!: %s\n", | |
873 p)); | |
874 result[0] = NUL; | |
875 return result; | |
876 } | |
877 | |
878 for (q = result; !done && *p != NUL;) | |
879 { | |
880 switch (*p) | |
881 { | |
882 case '"': | |
883 /* | |
884 * Unbackslashed dquote marks the end, if first char was dquote. | |
885 */ | |
886 done = 1; | |
887 break; | |
888 | |
889 case '\\': | |
890 ++p; | |
891 switch (*p) | |
892 { | |
893 case '\\': *q++ = '\\'; break; | |
894 case 'n': *q++ = '\n'; break; | |
895 case 't': *q++ = '\t'; break; | |
896 case 'r': *q++ = '\r'; break; | |
897 case '"': *q++ = '"'; break; | |
898 case NUL: --p; break; | |
899 /* default: skip over illegal chars */ | |
900 } | |
901 ++p; | |
902 break; | |
903 | |
904 default: | |
905 *q++ = *p++; | |
906 } | |
907 } | |
908 | |
909 if (endp != NULL) | |
910 *endp = p; | |
911 | |
912 return result; | |
913 } | |
914 | |
1492 | 915 /* |
916 * Remove from "first" byte to "last" byte (inclusive), at line "lnum" of the | |
917 * current buffer. Remove to end of line when "last" is MAXCOL. | |
918 */ | |
919 static void | |
920 nb_partialremove(linenr_T lnum, colnr_T first, colnr_T last) | |
921 { | |
922 char_u *oldtext, *newtext; | |
923 int oldlen; | |
924 int lastbyte = last; | |
925 | |
926 oldtext = ml_get(lnum); | |
1570 | 927 oldlen = (int)STRLEN(oldtext); |
1517 | 928 if (first >= (colnr_T)oldlen || oldlen == 0) /* just in case */ |
1492 | 929 return; |
930 if (lastbyte >= oldlen) | |
931 lastbyte = oldlen - 1; | |
932 newtext = alloc(oldlen - (int)(lastbyte - first)); | |
933 if (newtext != NULL) | |
934 { | |
935 mch_memmove(newtext, oldtext, first); | |
1618 | 936 STRMOVE(newtext + first, oldtext + lastbyte + 1); |
1492 | 937 nbdebug((" NEW LINE %d: %s\n", lnum, newtext)); |
938 ml_replace(lnum, newtext, FALSE); | |
939 } | |
940 } | |
941 | |
942 /* | |
943 * Replace the "first" line with the concatenation of the "first" and | |
944 * the "other" line. The "other" line is not removed. | |
945 */ | |
946 static void | |
947 nb_joinlines(linenr_T first, linenr_T other) | |
948 { | |
949 int len_first, len_other; | |
950 char_u *p; | |
951 | |
1570 | 952 len_first = (int)STRLEN(ml_get(first)); |
953 len_other = (int)STRLEN(ml_get(other)); | |
1492 | 954 p = alloc((unsigned)(len_first + len_other + 1)); |
955 if (p != NULL) | |
956 { | |
957 mch_memmove(p, ml_get(first), len_first); | |
958 mch_memmove(p + len_first, ml_get(other), len_other + 1); | |
959 ml_replace(first, p, FALSE); | |
960 } | |
961 } | |
962 | |
7 | 963 #define SKIP_STOP 2 |
964 #define streq(a,b) (strcmp(a,b) == 0) | |
965 | |
966 /* | |
967 * Do the actual processing of a single netbeans command or function. | |
1186 | 968 * The difference between a command and function is that a function |
969 * gets a response (it's required) but a command does not. | |
7 | 970 * For arguments see comment for nb_parse_cmd(). |
971 */ | |
972 static int | |
973 nb_do_cmd( | |
974 int bufno, | |
975 char_u *cmd, | |
976 int func, | |
977 int cmdno, | |
978 char_u *args) /* points to space before arguments or NUL */ | |
979 { | |
3263 | 980 int do_update = 0; |
7 | 981 long off = 0; |
982 nbbuf_T *buf = nb_get_buf(bufno); | |
983 static int skip = 0; | |
984 int retval = OK; | |
27 | 985 char *cp; /* for when a char pointer is needed */ |
7 | 986 |
987 nbdebug(("%s %d: (%d) %s %s\n", (func) ? "FUN" : "CMD", cmdno, bufno, cmd, | |
988 STRCMP(cmd, "insert") == 0 ? "<text>" : (char *)args)); | |
989 | |
990 if (func) | |
991 { | |
992 /* =====================================================================*/ | |
993 if (streq((char *)cmd, "getModified")) | |
994 { | |
995 if (buf == NULL || buf->bufp == NULL) | |
996 /* Return the number of buffers that are modified. */ | |
997 nb_reply_nr(cmdno, (long)count_changed_buffers()); | |
998 else | |
999 /* Return whether the buffer is modified. */ | |
1000 nb_reply_nr(cmdno, (long)(buf->bufp->b_changed | |
1001 || isNetbeansModified(buf->bufp))); | |
1002 /* =====================================================================*/ | |
1003 } | |
1004 else if (streq((char *)cmd, "saveAndExit")) | |
1005 { | |
1006 /* Note: this will exit Vim if successful. */ | |
1007 coloncmd(":confirm qall"); | |
1008 | |
1009 /* We didn't exit: return the number of changed buffers. */ | |
1010 nb_reply_nr(cmdno, (long)count_changed_buffers()); | |
1011 /* =====================================================================*/ | |
1012 } | |
1013 else if (streq((char *)cmd, "getCursor")) | |
1014 { | |
1015 char_u text[200]; | |
1016 | |
1017 /* Note: nb_getbufno() may return -1. This indicates the IDE | |
1018 * didn't assign a number to the current buffer in response to a | |
1019 * fileOpened event. */ | |
1020 sprintf((char *)text, "%d %ld %d %ld", | |
1021 nb_getbufno(curbuf), | |
1022 (long)curwin->w_cursor.lnum, | |
1023 (int)curwin->w_cursor.col, | |
1024 pos2off(curbuf, &curwin->w_cursor)); | |
1025 nb_reply_text(cmdno, text); | |
1026 /* =====================================================================*/ | |
1027 } | |
1037 | 1028 else if (streq((char *)cmd, "getAnno")) |
1029 { | |
1030 long linenum = 0; | |
1031 #ifdef FEAT_SIGNS | |
1032 if (buf == NULL || buf->bufp == NULL) | |
1033 { | |
1618 | 1034 nbdebug((" Invalid buffer identifier in getAnno\n")); |
1035 EMSG("E652: Invalid buffer identifier in getAnno"); | |
1037 | 1036 retval = FAIL; |
1037 } | |
1038 else | |
1039 { | |
1040 int serNum; | |
1041 | |
1042 cp = (char *)args; | |
1043 serNum = strtol(cp, &cp, 10); | |
1044 /* If the sign isn't found linenum will be zero. */ | |
15209
3a99b2e6d136
patch 8.1.0614: placing signs can be complicated
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
1045 linenum = (long)buf_findsign(buf->bufp, serNum, NULL); |
1037 | 1046 } |
1047 #endif | |
1048 nb_reply_nr(cmdno, linenum); | |
1049 /* =====================================================================*/ | |
1050 } | |
7 | 1051 else if (streq((char *)cmd, "getLength")) |
1052 { | |
1053 long len = 0; | |
1054 | |
1055 if (buf == NULL || buf->bufp == NULL) | |
1056 { | |
1618 | 1057 nbdebug((" invalid buffer identifier in getLength\n")); |
1058 EMSG("E632: invalid buffer identifier in getLength"); | |
7 | 1059 retval = FAIL; |
1060 } | |
1061 else | |
1062 { | |
1063 len = get_buf_size(buf->bufp); | |
1064 } | |
1065 nb_reply_nr(cmdno, len); | |
1066 /* =====================================================================*/ | |
1067 } | |
1068 else if (streq((char *)cmd, "getText")) | |
1069 { | |
1070 long len; | |
1071 linenr_T nlines; | |
1072 char_u *text = NULL; | |
1073 linenr_T lno = 1; | |
1074 char_u *p; | |
1075 char_u *line; | |
1076 | |
1077 if (buf == NULL || buf->bufp == NULL) | |
1078 { | |
1618 | 1079 nbdebug((" invalid buffer identifier in getText\n")); |
1080 EMSG("E633: invalid buffer identifier in getText"); | |
7 | 1081 retval = FAIL; |
1082 } | |
1083 else | |
1084 { | |
1085 len = get_buf_size(buf->bufp); | |
1086 nlines = buf->bufp->b_ml.ml_line_count; | |
1087 text = alloc((unsigned)((len > 0) | |
1088 ? ((len + nlines) * 2) : 4)); | |
1089 if (text == NULL) | |
1090 { | |
1091 nbdebug((" nb_do_cmd: getText has null text field\n")); | |
1092 retval = FAIL; | |
1093 } | |
1094 else | |
1095 { | |
1096 p = text; | |
1097 *p++ = '\"'; | |
1098 for (; lno <= nlines ; lno++) | |
1099 { | |
1100 line = nb_quote(ml_get_buf(buf->bufp, lno, FALSE)); | |
1101 if (line != NULL) | |
1102 { | |
1103 STRCPY(p, line); | |
1104 p += STRLEN(line); | |
1105 *p++ = '\\'; | |
1106 *p++ = 'n'; | |
33 | 1107 vim_free(line); |
7 | 1108 } |
1109 } | |
1110 *p++ = '\"'; | |
1111 *p = '\0'; | |
1112 } | |
1113 } | |
1114 if (text == NULL) | |
1115 nb_reply_text(cmdno, (char_u *)""); | |
1116 else | |
1117 { | |
1118 nb_reply_text(cmdno, text); | |
1119 vim_free(text); | |
1120 } | |
1121 /* =====================================================================*/ | |
1122 } | |
1123 else if (streq((char *)cmd, "remove")) | |
1124 { | |
1125 long count; | |
1126 pos_T first, last; | |
1127 pos_T *pos; | |
1492 | 1128 pos_T *next; |
1129 linenr_T del_from_lnum, del_to_lnum; /* lines to be deleted as a whole */ | |
7 | 1130 int oldFire = netbeansFireChanges; |
1131 int oldSuppress = netbeansSuppressNoLines; | |
1132 int wasChanged; | |
1133 | |
1134 if (skip >= SKIP_STOP) | |
1135 { | |
1136 nbdebug((" Skipping %s command\n", (char *) cmd)); | |
1137 nb_reply_nil(cmdno); | |
1138 return OK; | |
1139 } | |
1140 | |
1141 if (buf == NULL || buf->bufp == NULL) | |
1142 { | |
1618 | 1143 nbdebug((" invalid buffer identifier in remove\n")); |
1144 EMSG("E634: invalid buffer identifier in remove"); | |
7 | 1145 retval = FAIL; |
1146 } | |
1147 else | |
1148 { | |
1149 netbeansFireChanges = FALSE; | |
1150 netbeansSuppressNoLines = TRUE; | |
1151 | |
659 | 1152 nb_set_curbuf(buf->bufp); |
7 | 1153 wasChanged = buf->bufp->b_changed; |
27 | 1154 cp = (char *)args; |
1155 off = strtol(cp, &cp, 10); | |
1156 count = strtol(cp, &cp, 10); | |
1157 args = (char_u *)cp; | |
7 | 1158 /* delete "count" chars, starting at "off" */ |
1159 pos = off2pos(buf->bufp, off); | |
1160 if (!pos) | |
1161 { | |
1618 | 1162 nbdebug((" !bad position\n")); |
7 | 1163 nb_reply_text(cmdno, (char_u *)"!bad position"); |
1164 netbeansFireChanges = oldFire; | |
1165 netbeansSuppressNoLines = oldSuppress; | |
1166 return FAIL; | |
1167 } | |
1168 first = *pos; | |
1956 | 1169 nbdebug((" FIRST POS: line %d, col %d\n", |
1170 first.lnum, first.col)); | |
7 | 1171 pos = off2pos(buf->bufp, off+count-1); |
1172 if (!pos) | |
1173 { | |
1618 | 1174 nbdebug((" !bad count\n")); |
7 | 1175 nb_reply_text(cmdno, (char_u *)"!bad count"); |
1176 netbeansFireChanges = oldFire; | |
1177 netbeansSuppressNoLines = oldSuppress; | |
1178 return FAIL; | |
1179 } | |
1180 last = *pos; | |
1956 | 1181 nbdebug((" LAST POS: line %d, col %d\n", |
1182 last.lnum, last.col)); | |
1492 | 1183 del_from_lnum = first.lnum; |
1184 del_to_lnum = last.lnum; | |
3263 | 1185 do_update = 1; |
7 | 1186 |
1492 | 1187 /* Get the position of the first byte after the deleted |
1188 * section. "next" is NULL when deleting to the end of the | |
1189 * file. */ | |
1190 next = off2pos(buf->bufp, off + count); | |
1191 | |
1192 /* Remove part of the first line. */ | |
1956 | 1193 if (first.col != 0 |
1194 || (next != NULL && first.lnum == next->lnum)) | |
7 | 1195 { |
1492 | 1196 if (first.lnum != last.lnum |
1197 || (next != NULL && first.lnum != next->lnum)) | |
1198 { | |
1199 /* remove to the end of the first line */ | |
1200 nb_partialremove(first.lnum, first.col, | |
1201 (colnr_T)MAXCOL); | |
1202 if (first.lnum == last.lnum) | |
1203 { | |
1204 /* Partial line to remove includes the end of | |
1205 * line. Join the line with the next one, have | |
1206 * the next line deleted below. */ | |
1207 nb_joinlines(first.lnum, next->lnum); | |
1208 del_to_lnum = next->lnum; | |
1209 } | |
1210 } | |
1211 else | |
1212 { | |
1213 /* remove within one line */ | |
1214 nb_partialremove(first.lnum, first.col, last.col); | |
1215 } | |
1216 ++del_from_lnum; /* don't delete the first line */ | |
7 | 1217 } |
1218 | |
1492 | 1219 /* Remove part of the last line. */ |
1220 if (first.lnum != last.lnum && next != NULL | |
1221 && next->col != 0 && last.lnum == next->lnum) | |
1222 { | |
1223 nb_partialremove(last.lnum, 0, last.col); | |
1224 if (del_from_lnum > first.lnum) | |
1225 { | |
1226 /* Join end of last line to start of first line; last | |
1227 * line is deleted below. */ | |
1228 nb_joinlines(first.lnum, last.lnum); | |
1229 } | |
1230 else | |
1231 /* First line is deleted as a whole, keep the last | |
1232 * line. */ | |
1233 --del_to_lnum; | |
1234 } | |
1235 | |
1236 /* First is partial line; last line to remove includes | |
1237 * the end of line; join first line to line following last | |
1238 * line; line following last line is deleted below. */ | |
1239 if (first.lnum != last.lnum && del_from_lnum > first.lnum | |
1240 && next != NULL && last.lnum != next->lnum) | |
1241 { | |
1242 nb_joinlines(first.lnum, next->lnum); | |
1243 del_to_lnum = next->lnum; | |
1244 } | |
1245 | |
1246 /* Delete whole lines if there are any. */ | |
1247 if (del_to_lnum >= del_from_lnum) | |
7 | 1248 { |
1249 int i; | |
1250 | |
1251 /* delete signs from the lines being deleted */ | |
1492 | 1252 for (i = del_from_lnum; i <= del_to_lnum; i++) |
7 | 1253 { |
15300
890203d87ee5
patch 8.1.0658: deleting signs and completion for :sign is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
15209
diff
changeset
|
1254 int id = buf_findsign_id(buf->bufp, (linenr_T)i, NULL); |
7 | 1255 if (id > 0) |
1256 { | |
1956 | 1257 nbdebug((" Deleting sign %d on line %d\n", |
1258 id, i)); | |
15300
890203d87ee5
patch 8.1.0658: deleting signs and completion for :sign is insufficient
Bram Moolenaar <Bram@vim.org>
parents:
15209
diff
changeset
|
1259 buf_delsign(buf->bufp, 0, id, NULL); |
7 | 1260 } |
1261 else | |
1884 | 1262 { |
7 | 1263 nbdebug((" No sign on line %d\n", i)); |
1884 | 1264 } |
7 | 1265 } |
1266 | |
1956 | 1267 nbdebug((" Deleting lines %d through %d\n", |
1268 del_from_lnum, del_to_lnum)); | |
1492 | 1269 curwin->w_cursor.lnum = del_from_lnum; |
1270 curwin->w_cursor.col = 0; | |
1271 del_lines(del_to_lnum - del_from_lnum + 1, FALSE); | |
7 | 1272 } |
1492 | 1273 |
1274 /* Leave cursor at first deleted byte. */ | |
1275 curwin->w_cursor = first; | |
1276 check_cursor_lnum(); | |
7 | 1277 buf->bufp->b_changed = wasChanged; /* logically unchanged */ |
1278 netbeansFireChanges = oldFire; | |
1279 netbeansSuppressNoLines = oldSuppress; | |
1280 | |
1281 u_blockfree(buf->bufp); | |
1282 u_clearall(buf->bufp); | |
1283 } | |
1284 nb_reply_nil(cmdno); | |
1285 /* =====================================================================*/ | |
1286 } | |
1287 else if (streq((char *)cmd, "insert")) | |
1288 { | |
1289 char_u *to_free; | |
1290 | |
1291 if (skip >= SKIP_STOP) | |
1292 { | |
1293 nbdebug((" Skipping %s command\n", (char *) cmd)); | |
1294 nb_reply_nil(cmdno); | |
1295 return OK; | |
1296 } | |
1297 | |
1298 /* get offset */ | |
27 | 1299 cp = (char *)args; |
1300 off = strtol(cp, &cp, 10); | |
1301 args = (char_u *)cp; | |
7 | 1302 |
1303 /* get text to be inserted */ | |
1304 args = skipwhite(args); | |
1305 args = to_free = (char_u *)nb_unquote(args, NULL); | |
33 | 1306 /* |
1307 nbdebug((" CHUNK[%d]: %d bytes at offset %d\n", | |
1308 buf->bufp->b_ml.ml_line_count, STRLEN(args), off)); | |
1309 */ | |
7 | 1310 |
1311 if (buf == NULL || buf->bufp == NULL) | |
1312 { | |
1618 | 1313 nbdebug((" invalid buffer identifier in insert\n")); |
1314 EMSG("E635: invalid buffer identifier in insert"); | |
7 | 1315 retval = FAIL; |
1316 } | |
1317 else if (args != NULL) | |
1318 { | |
718 | 1319 int ff_detected = EOL_UNKNOWN; |
1320 int buf_was_empty = (buf->bufp->b_ml.ml_flags & ML_EMPTY); | |
1321 size_t len = 0; | |
1322 int added = 0; | |
1323 int oldFire = netbeansFireChanges; | |
1324 int old_b_changed; | |
3265 | 1325 char_u *nlp; |
718 | 1326 linenr_T lnum; |
1327 linenr_T lnum_start; | |
1328 pos_T *pos; | |
1329 | |
7 | 1330 netbeansFireChanges = 0; |
718 | 1331 |
1332 /* Jump to the buffer where we insert. After this "curbuf" | |
1333 * can be used. */ | |
659 | 1334 nb_set_curbuf(buf->bufp); |
717 | 1335 old_b_changed = curbuf->b_changed; |
1336 | |
718 | 1337 /* Convert the specified character offset into a lnum/col |
1338 * position. */ | |
717 | 1339 pos = off2pos(curbuf, off); |
1340 if (pos != NULL) | |
7 | 1341 { |
718 | 1342 if (pos->lnum <= 0) |
1343 lnum_start = 1; | |
1344 else | |
1345 lnum_start = pos->lnum; | |
7 | 1346 } |
1347 else | |
1348 { | |
718 | 1349 /* If the given position is not found, assume we want |
7 | 1350 * the end of the file. See setLocAndSize HACK. */ |
718 | 1351 if (buf_was_empty) |
1352 lnum_start = 1; /* above empty line */ | |
1353 else | |
1354 lnum_start = curbuf->b_ml.ml_line_count + 1; | |
7 | 1355 } |
718 | 1356 |
1357 /* "lnum" is the line where we insert: either append to it or | |
1358 * insert a new line above it. */ | |
1359 lnum = lnum_start; | |
1360 | |
1361 /* Loop over the "\n" separated lines of the argument. */ | |
3263 | 1362 do_update = 1; |
718 | 1363 while (*args != NUL) |
33 | 1364 { |
3265 | 1365 nlp = vim_strchr(args, '\n'); |
1366 if (nlp == NULL) | |
7 | 1367 { |
718 | 1368 /* Incomplete line, probably truncated. Next "insert" |
1369 * command should append to this one. */ | |
1370 len = STRLEN(args); | |
7 | 1371 } |
33 | 1372 else |
1373 { | |
3265 | 1374 len = nlp - args; |
718 | 1375 |
1376 /* | |
1377 * We need to detect EOL style, because the commands | |
1378 * use a character offset. | |
1379 */ | |
3265 | 1380 if (nlp > args && nlp[-1] == '\r') |
718 | 1381 { |
1382 ff_detected = EOL_DOS; | |
1383 --len; | |
1384 } | |
1385 else | |
1386 ff_detected = EOL_UNIX; | |
33 | 1387 } |
718 | 1388 args[len] = NUL; |
1389 | |
1390 if (lnum == lnum_start | |
1391 && ((pos != NULL && pos->col > 0) | |
1392 || (lnum == 1 && buf_was_empty))) | |
1393 { | |
1394 char_u *oldline = ml_get(lnum); | |
1395 char_u *newline; | |
1396 | |
3476 | 1397 /* Insert halfway a line. */ |
3265 | 1398 newline = alloc_check( |
1399 (unsigned)(STRLEN(oldline) + len + 1)); | |
718 | 1400 if (newline != NULL) |
1401 { | |
3476 | 1402 mch_memmove(newline, oldline, (size_t)pos->col); |
1403 newline[pos->col] = NUL; | |
718 | 1404 STRCAT(newline, args); |
3476 | 1405 STRCAT(newline, oldline + pos->col); |
718 | 1406 ml_replace(lnum, newline, FALSE); |
1407 } | |
1408 } | |
1409 else | |
1410 { | |
1411 /* Append a new line. Not that we always do this, | |
1412 * also when the text doesn't end in a "\n". */ | |
3265 | 1413 ml_append((linenr_T)(lnum - 1), args, |
1414 (colnr_T)(len + 1), FALSE); | |
718 | 1415 ++added; |
1416 } | |
1417 | |
3265 | 1418 if (nlp == NULL) |
718 | 1419 break; |
1420 ++lnum; | |
3265 | 1421 args = nlp + 1; |
33 | 1422 } |
1423 | |
718 | 1424 /* Adjust the marks below the inserted lines. */ |
1425 appended_lines_mark(lnum_start - 1, (long)added); | |
1426 | |
1427 /* | |
1428 * When starting with an empty buffer set the fileformat. | |
1429 * This is just guessing... | |
7 | 1430 */ |
1431 if (buf_was_empty) | |
1432 { | |
1433 if (ff_detected == EOL_UNKNOWN) | |
8212
05b88224cea1
commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents:
8204
diff
changeset
|
1434 #if defined(MSWIN) |
7 | 1435 ff_detected = EOL_DOS; |
718 | 1436 #else |
1437 ff_detected = EOL_UNIX; | |
1438 #endif | |
7 | 1439 set_fileformat(ff_detected, OPT_LOCAL); |
717 | 1440 curbuf->b_start_ffc = *curbuf->b_p_ff; |
7 | 1441 } |
1442 | |
1443 /* | |
1444 * XXX - GRP - Is the next line right? If I've inserted | |
1445 * text the buffer has been updated but not written. Will | |
1446 * netbeans guarantee to write it? Even if I do a :q! ? | |
1447 */ | |
717 | 1448 curbuf->b_changed = old_b_changed; /* logically unchanged */ |
7 | 1449 netbeansFireChanges = oldFire; |
1450 | |
718 | 1451 /* Undo info is invalid now... */ |
717 | 1452 u_blockfree(curbuf); |
1453 u_clearall(curbuf); | |
7 | 1454 } |
1455 vim_free(to_free); | |
1456 nb_reply_nil(cmdno); /* or !error */ | |
1457 } | |
1458 else | |
1459 { | |
1460 nbdebug(("UNIMPLEMENTED FUNCTION: %s\n", cmd)); | |
1461 nb_reply_nil(cmdno); | |
1462 retval = FAIL; | |
1463 } | |
1464 } | |
1465 else /* Not a function; no reply required. */ | |
1466 { | |
1467 /* =====================================================================*/ | |
1468 if (streq((char *)cmd, "create")) | |
1469 { | |
1470 /* Create a buffer without a name. */ | |
1471 if (buf == NULL) | |
1472 { | |
1618 | 1473 nbdebug((" invalid buffer identifier in create\n")); |
1474 EMSG("E636: invalid buffer identifier in create"); | |
7 | 1475 return FAIL; |
1476 } | |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13170
diff
changeset
|
1477 VIM_CLEAR(buf->displayname); |
7 | 1478 |
1479 netbeansReadFile = 0; /* don't try to open disk file */ | |
1743 | 1480 do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin); |
7 | 1481 netbeansReadFile = 1; |
1482 buf->bufp = curbuf; | |
1483 maketitle(); | |
33 | 1484 buf->insertDone = FALSE; |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1485 #if defined(FEAT_MENU) && defined(FEAT_GUI) |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1486 if (gui.in_use) |
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1487 gui_update_menus(0); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1488 #endif |
7 | 1489 /* =====================================================================*/ |
1490 } | |
33 | 1491 else if (streq((char *)cmd, "insertDone")) |
1492 { | |
840 | 1493 if (buf == NULL || buf->bufp == NULL) |
1494 { | |
1618 | 1495 nbdebug((" invalid buffer identifier in insertDone\n")); |
840 | 1496 } |
1497 else | |
1498 { | |
1499 buf->bufp->b_start_eol = *args == 'T'; | |
1500 buf->insertDone = TRUE; | |
1501 args += 2; | |
1502 buf->bufp->b_p_ro = *args == 'T'; | |
1503 print_read_msg(buf); | |
1504 } | |
33 | 1505 /* =====================================================================*/ |
1506 } | |
1507 else if (streq((char *)cmd, "saveDone")) | |
1508 { | |
840 | 1509 long savedChars = atol((char *)args); |
1510 | |
1511 if (buf == NULL || buf->bufp == NULL) | |
1512 { | |
1618 | 1513 nbdebug((" invalid buffer identifier in saveDone\n")); |
840 | 1514 } |
1515 else | |
1516 print_save_msg(buf, savedChars); | |
33 | 1517 /* =====================================================================*/ |
1518 } | |
7 | 1519 else if (streq((char *)cmd, "startDocumentListen")) |
1520 { | |
1521 if (buf == NULL) | |
1522 { | |
1618 | 1523 nbdebug((" invalid buffer identifier in startDocumentListen\n")); |
1524 EMSG("E637: invalid buffer identifier in startDocumentListen"); | |
7 | 1525 return FAIL; |
1526 } | |
1527 buf->fireChanges = 1; | |
1528 /* =====================================================================*/ | |
1529 } | |
1530 else if (streq((char *)cmd, "stopDocumentListen")) | |
1531 { | |
1532 if (buf == NULL) | |
1533 { | |
1618 | 1534 nbdebug((" invalid buffer identifier in stopDocumentListen\n")); |
1535 EMSG("E638: invalid buffer identifier in stopDocumentListen"); | |
7 | 1536 return FAIL; |
1537 } | |
1538 buf->fireChanges = 0; | |
152 | 1539 if (buf->bufp != NULL && buf->bufp->b_was_netbeans_file) |
33 | 1540 { |
152 | 1541 if (!buf->bufp->b_netbeans_file) |
1618 | 1542 { |
1543 nbdebug(("E658: NetBeans connection lost for buffer %ld\n", buf->bufp->b_fnum)); | |
33 | 1544 EMSGN(_("E658: NetBeans connection lost for buffer %ld"), |
7 | 1545 buf->bufp->b_fnum); |
1618 | 1546 } |
33 | 1547 else |
1548 { | |
152 | 1549 /* NetBeans uses stopDocumentListen when it stops editing |
1550 * a file. It then expects the buffer in Vim to | |
1551 * disappear. */ | |
1552 do_bufdel(DOBUF_DEL, (char_u *)"", 1, | |
1553 buf->bufp->b_fnum, buf->bufp->b_fnum, TRUE); | |
33 | 1554 vim_memset(buf, 0, sizeof(nbbuf_T)); |
1555 } | |
1556 } | |
7 | 1557 /* =====================================================================*/ |
1558 } | |
1559 else if (streq((char *)cmd, "setTitle")) | |
1560 { | |
1561 if (buf == NULL) | |
1562 { | |
1618 | 1563 nbdebug((" invalid buffer identifier in setTitle\n")); |
1564 EMSG("E639: invalid buffer identifier in setTitle"); | |
7 | 1565 return FAIL; |
1566 } | |
1567 vim_free(buf->displayname); | |
1568 buf->displayname = nb_unquote(args, NULL); | |
1569 /* =====================================================================*/ | |
1570 } | |
1571 else if (streq((char *)cmd, "initDone")) | |
1572 { | |
1573 if (buf == NULL || buf->bufp == NULL) | |
1574 { | |
1618 | 1575 nbdebug((" invalid buffer identifier in initDone\n")); |
1576 EMSG("E640: invalid buffer identifier in initDone"); | |
7 | 1577 return FAIL; |
1578 } | |
3263 | 1579 do_update = 1; |
33 | 1580 buf->initDone = TRUE; |
659 | 1581 nb_set_curbuf(buf->bufp); |
7 | 1582 apply_autocmds(EVENT_BUFREADPOST, 0, 0, FALSE, buf->bufp); |
1583 | |
1584 /* handle any postponed key commands */ | |
1585 handle_key_queue(); | |
1586 /* =====================================================================*/ | |
1587 } | |
1588 else if (streq((char *)cmd, "setBufferNumber") | |
1589 || streq((char *)cmd, "putBufferNumber")) | |
1590 { | |
33 | 1591 char_u *path; |
7 | 1592 buf_T *bufp; |
1593 | |
1594 if (buf == NULL) | |
1595 { | |
1618 | 1596 nbdebug((" invalid buffer identifier in setBufferNumber\n")); |
1597 EMSG("E641: invalid buffer identifier in setBufferNumber"); | |
7 | 1598 return FAIL; |
1599 } | |
33 | 1600 path = (char_u *)nb_unquote(args, NULL); |
1601 if (path == NULL) | |
7 | 1602 return FAIL; |
33 | 1603 bufp = buflist_findname(path); |
1604 vim_free(path); | |
7 | 1605 if (bufp == NULL) |
1606 { | |
1816 | 1607 nbdebug((" File %s not found in setBufferNumber\n", args)); |
7 | 1608 EMSG2("E642: File %s not found in setBufferNumber", args); |
1609 return FAIL; | |
1610 } | |
1611 buf->bufp = bufp; | |
33 | 1612 buf->nbbuf_number = bufp->b_fnum; |
7 | 1613 |
1614 /* "setBufferNumber" has the side effect of jumping to the buffer | |
1615 * (don't know why!). Don't do that for "putBufferNumber". */ | |
1616 if (*cmd != 'p') | |
1617 coloncmd(":buffer %d", bufp->b_fnum); | |
1618 else | |
1619 { | |
33 | 1620 buf->initDone = TRUE; |
7 | 1621 |
1622 /* handle any postponed key commands */ | |
1623 handle_key_queue(); | |
1624 } | |
1625 | |
1626 /* =====================================================================*/ | |
1627 } | |
1628 else if (streq((char *)cmd, "setFullName")) | |
1629 { | |
1630 if (buf == NULL) | |
1631 { | |
1618 | 1632 nbdebug((" invalid buffer identifier in setFullName\n")); |
1633 EMSG("E643: invalid buffer identifier in setFullName"); | |
7 | 1634 return FAIL; |
1635 } | |
1636 vim_free(buf->displayname); | |
1637 buf->displayname = nb_unquote(args, NULL); | |
1638 | |
1639 netbeansReadFile = 0; /* don't try to open disk file */ | |
1640 do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, | |
1743 | 1641 ECMD_HIDE + ECMD_OLDBUF, curwin); |
7 | 1642 netbeansReadFile = 1; |
1643 buf->bufp = curbuf; | |
1644 maketitle(); | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1645 #if defined(FEAT_MENU) && defined(FEAT_GUI) |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1646 if (gui.in_use) |
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1647 gui_update_menus(0); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1648 #endif |
7 | 1649 /* =====================================================================*/ |
1650 } | |
1651 else if (streq((char *)cmd, "editFile")) | |
1652 { | |
1653 if (buf == NULL) | |
1654 { | |
1618 | 1655 nbdebug((" invalid buffer identifier in editFile\n")); |
1656 EMSG("E644: invalid buffer identifier in editFile"); | |
7 | 1657 return FAIL; |
1658 } | |
1659 /* Edit a file: like create + setFullName + read the file. */ | |
1660 vim_free(buf->displayname); | |
1661 buf->displayname = nb_unquote(args, NULL); | |
1662 do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, | |
1743 | 1663 ECMD_HIDE + ECMD_OLDBUF, curwin); |
7 | 1664 buf->bufp = curbuf; |
33 | 1665 buf->initDone = TRUE; |
3263 | 1666 do_update = 1; |
7 | 1667 #if defined(FEAT_TITLE) |
1668 maketitle(); | |
1669 #endif | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1670 #if defined(FEAT_MENU) && defined(FEAT_GUI) |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1671 if (gui.in_use) |
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1672 gui_update_menus(0); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1673 #endif |
7 | 1674 /* =====================================================================*/ |
1675 } | |
1676 else if (streq((char *)cmd, "setVisible")) | |
1677 { | |
1678 if (buf == NULL || buf->bufp == NULL) | |
1679 { | |
1618 | 1680 nbdebug((" invalid buffer identifier in setVisible\n")); |
1681 /* This message was commented out, probably because it can | |
1682 * happen when shutting down. */ | |
1683 if (p_verbose > 0) | |
1684 EMSG("E645: invalid buffer identifier in setVisible"); | |
7 | 1685 return FAIL; |
1686 } | |
33 | 1687 if (streq((char *)args, "T") && buf->bufp != curbuf) |
7 | 1688 { |
1689 exarg_T exarg; | |
1690 exarg.cmd = (char_u *)"goto"; | |
1691 exarg.forceit = FALSE; | |
33 | 1692 dosetvisible = TRUE; |
7 | 1693 goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum); |
3263 | 1694 do_update = 1; |
33 | 1695 dosetvisible = FALSE; |
7 | 1696 |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1697 #ifdef FEAT_GUI |
7 | 1698 /* Side effect!!!. */ |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1699 if (gui.in_use) |
7 | 1700 gui_mch_set_foreground(); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1701 #endif |
7 | 1702 } |
1703 /* =====================================================================*/ | |
1704 } | |
1705 else if (streq((char *)cmd, "raise")) | |
1706 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1707 #ifdef FEAT_GUI |
7 | 1708 /* Bring gvim to the foreground. */ |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1709 if (gui.in_use) |
7 | 1710 gui_mch_set_foreground(); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1711 #endif |
7 | 1712 /* =====================================================================*/ |
1713 } | |
1714 else if (streq((char *)cmd, "setModified")) | |
1715 { | |
1600 | 1716 int prev_b_changed; |
1717 | |
7 | 1718 if (buf == NULL || buf->bufp == NULL) |
1719 { | |
1618 | 1720 nbdebug((" invalid buffer identifier in setModified\n")); |
1721 /* This message was commented out, probably because it can | |
1722 * happen when shutting down. */ | |
1723 if (p_verbose > 0) | |
1724 EMSG("E646: invalid buffer identifier in setModified"); | |
7 | 1725 return FAIL; |
1726 } | |
1600 | 1727 prev_b_changed = buf->bufp->b_changed; |
7 | 1728 if (streq((char *)args, "T")) |
1600 | 1729 buf->bufp->b_changed = TRUE; |
7 | 1730 else |
1731 { | |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9375
diff
changeset
|
1732 stat_T st; |
7 | 1733 |
1734 /* Assume NetBeans stored the file. Reset the timestamp to | |
1735 * avoid "file changed" warnings. */ | |
1736 if (buf->bufp->b_ffname != NULL | |
1737 && mch_stat((char *)buf->bufp->b_ffname, &st) >= 0) | |
1738 buf_store_time(buf->bufp, &st, buf->bufp->b_ffname); | |
1600 | 1739 buf->bufp->b_changed = FALSE; |
7 | 1740 } |
1741 buf->modified = buf->bufp->b_changed; | |
1600 | 1742 if (prev_b_changed != buf->bufp->b_changed) |
1743 { | |
1744 check_status(buf->bufp); | |
1745 redraw_tabline = TRUE; | |
1746 #ifdef FEAT_TITLE | |
1747 maketitle(); | |
1748 #endif | |
1749 update_screen(0); | |
1750 } | |
7 | 1751 /* =====================================================================*/ |
1752 } | |
33 | 1753 else if (streq((char *)cmd, "setModtime")) |
1754 { | |
840 | 1755 if (buf == NULL || buf->bufp == NULL) |
1618 | 1756 nbdebug((" invalid buffer identifier in setModtime\n")); |
840 | 1757 else |
1758 buf->bufp->b_mtime = atoi((char *)args); | |
33 | 1759 /* =====================================================================*/ |
1760 } | |
1761 else if (streq((char *)cmd, "setReadOnly")) | |
1762 { | |
840 | 1763 if (buf == NULL || buf->bufp == NULL) |
1618 | 1764 nbdebug((" invalid buffer identifier in setReadOnly\n")); |
840 | 1765 else if (streq((char *)args, "T")) |
33 | 1766 buf->bufp->b_p_ro = TRUE; |
1767 else | |
1768 buf->bufp->b_p_ro = FALSE; | |
1769 /* =====================================================================*/ | |
1770 } | |
7 | 1771 else if (streq((char *)cmd, "setMark")) |
1772 { | |
1773 /* not yet */ | |
1774 /* =====================================================================*/ | |
1775 } | |
1776 else if (streq((char *)cmd, "showBalloon")) | |
1777 { | |
12871
1a450ce6980c
patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents:
12513
diff
changeset
|
1778 #if defined(FEAT_BEVAL_GUI) |
7 | 1779 static char *text = NULL; |
1780 | |
1781 /* | |
1782 * Set up the Balloon Expression Evaluation area. | |
1783 * Ignore 'ballooneval' here. | |
1784 * The text pointer must remain valid for a while. | |
1785 */ | |
1786 if (balloonEval != NULL) | |
1787 { | |
1788 vim_free(text); | |
1789 text = nb_unquote(args, NULL); | |
1790 if (text != NULL) | |
1791 gui_mch_post_balloon(balloonEval, (char_u *)text); | |
1792 } | |
1793 #endif | |
1794 /* =====================================================================*/ | |
1795 } | |
1796 else if (streq((char *)cmd, "setDot")) | |
1797 { | |
1798 pos_T *pos; | |
1799 #ifdef NBDEBUG | |
1800 char_u *s; | |
1801 #endif | |
1802 | |
1803 if (buf == NULL || buf->bufp == NULL) | |
1804 { | |
1618 | 1805 nbdebug((" invalid buffer identifier in setDot\n")); |
1806 EMSG("E647: invalid buffer identifier in setDot"); | |
7 | 1807 return FAIL; |
1808 } | |
1809 | |
659 | 1810 nb_set_curbuf(buf->bufp); |
1811 | |
7 | 1812 /* Don't want Visual mode now. */ |
1813 if (VIsual_active) | |
1814 end_visual_mode(); | |
1815 #ifdef NBDEBUG | |
1816 s = args; | |
1817 #endif | |
1818 pos = get_off_or_lnum(buf->bufp, &args); | |
1819 if (pos) | |
1820 { | |
1821 curwin->w_cursor = *pos; | |
1822 check_cursor(); | |
1823 #ifdef FEAT_FOLDING | |
1824 foldOpenCursor(); | |
1825 #endif | |
1826 } | |
1827 else | |
1884 | 1828 { |
7 | 1829 nbdebug((" BAD POSITION in setDot: %s\n", s)); |
1884 | 1830 } |
7 | 1831 |
1832 /* gui_update_cursor(TRUE, FALSE); */ | |
1833 /* update_curbuf(NOT_VALID); */ | |
1834 update_topline(); /* scroll to show the line */ | |
1835 update_screen(VALID); | |
1836 setcursor(); | |
2745 | 1837 cursor_on(); |
13150
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1838 out_flush_cursor(TRUE, FALSE); |
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1839 |
7 | 1840 /* Quit a hit-return or more prompt. */ |
1841 if (State == HITRETURN || State == ASKMORE) | |
1842 { | |
1843 #ifdef FEAT_GUI_GTK | |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
1844 if (gui.in_use && gtk_main_level() > 0) |
7 | 1845 gtk_main_quit(); |
1846 #endif | |
1847 } | |
1848 /* =====================================================================*/ | |
1849 } | |
1850 else if (streq((char *)cmd, "close")) | |
1851 { | |
1852 #ifdef NBDEBUG | |
1853 char *name = "<NONE>"; | |
1854 #endif | |
1855 | |
1856 if (buf == NULL) | |
1857 { | |
1618 | 1858 nbdebug((" invalid buffer identifier in close\n")); |
1859 EMSG("E648: invalid buffer identifier in close"); | |
7 | 1860 return FAIL; |
1861 } | |
1862 | |
1863 #ifdef NBDEBUG | |
1864 if (buf->displayname != NULL) | |
1865 name = buf->displayname; | |
1866 #endif | |
1618 | 1867 if (buf->bufp == NULL) |
1868 { | |
1869 nbdebug((" invalid buffer identifier in close\n")); | |
1870 /* This message was commented out, probably because it can | |
1871 * happen when shutting down. */ | |
1872 if (p_verbose > 0) | |
1873 EMSG("E649: invalid buffer identifier in close"); | |
1874 } | |
7 | 1875 nbdebug((" CLOSE %d: %s\n", bufno, name)); |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1876 #ifdef FEAT_GUI |
7 | 1877 need_mouse_correct = TRUE; |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1878 #endif |
7 | 1879 if (buf->bufp != NULL) |
1880 do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD, | |
1881 buf->bufp->b_fnum, TRUE); | |
924 | 1882 buf->bufp = NULL; |
1883 buf->initDone = FALSE; | |
3263 | 1884 do_update = 1; |
7 | 1885 /* =====================================================================*/ |
1886 } | |
1887 else if (streq((char *)cmd, "setStyle")) /* obsolete... */ | |
1888 { | |
1618 | 1889 nbdebug((" setStyle is obsolete!\n")); |
7 | 1890 /* =====================================================================*/ |
1891 } | |
1892 else if (streq((char *)cmd, "setExitDelay")) | |
1893 { | |
33 | 1894 /* Only used in version 2.1. */ |
7 | 1895 /* =====================================================================*/ |
1896 } | |
1897 else if (streq((char *)cmd, "defineAnnoType")) | |
1898 { | |
1899 #ifdef FEAT_SIGNS | |
1900 int typeNum; | |
1901 char_u *typeName; | |
1902 char_u *tooltip; | |
1903 char_u *p; | |
1904 char_u *glyphFile; | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1905 int parse_error = FALSE; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1906 char_u *fg; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1907 char_u *bg; |
7 | 1908 |
1909 if (buf == NULL) | |
1910 { | |
1618 | 1911 nbdebug((" invalid buffer identifier in defineAnnoType\n")); |
1912 EMSG("E650: invalid buffer identifier in defineAnnoType"); | |
7 | 1913 return FAIL; |
1914 } | |
1915 | |
27 | 1916 cp = (char *)args; |
1917 typeNum = strtol(cp, &cp, 10); | |
1918 args = (char_u *)cp; | |
7 | 1919 args = skipwhite(args); |
1920 typeName = (char_u *)nb_unquote(args, &args); | |
1921 args = skipwhite(args + 1); | |
1922 tooltip = (char_u *)nb_unquote(args, &args); | |
1923 args = skipwhite(args + 1); | |
1924 | |
1925 p = (char_u *)nb_unquote(args, &args); | |
1926 glyphFile = vim_strsave_escaped(p, escape_chars); | |
1927 vim_free(p); | |
1928 | |
1929 args = skipwhite(args + 1); | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1930 p = skiptowhite(args); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1931 if (*p != NUL) |
7 | 1932 { |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1933 *p = NUL; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1934 p = skipwhite(p + 1); |
7 | 1935 } |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1936 fg = vim_strsave(args); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1937 bg = vim_strsave(p); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1938 if (STRLEN(fg) > MAX_COLOR_LENGTH || STRLEN(bg) > MAX_COLOR_LENGTH) |
7 | 1939 { |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1940 EMSG("E532: highlighting color name too long in defineAnnoType"); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1941 vim_free(typeName); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1942 parse_error = TRUE; |
7 | 1943 } |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1944 else if (typeName != NULL && tooltip != NULL && glyphFile != NULL) |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1945 addsigntype(buf, typeNum, typeName, tooltip, glyphFile, fg, bg); |
7 | 1946 else |
1947 vim_free(typeName); | |
1948 | |
1949 /* don't free typeName; it's used directly in addsigntype() */ | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1950 vim_free(fg); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1951 vim_free(bg); |
7 | 1952 vim_free(tooltip); |
1953 vim_free(glyphFile); | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1954 if (parse_error) |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
1955 return FAIL; |
7 | 1956 |
1957 #endif | |
1958 /* =====================================================================*/ | |
1959 } | |
1960 else if (streq((char *)cmd, "addAnno")) | |
1961 { | |
1962 #ifdef FEAT_SIGNS | |
1963 int serNum; | |
1964 int localTypeNum; | |
1965 int typeNum; | |
1966 pos_T *pos; | |
1967 | |
1968 if (buf == NULL || buf->bufp == NULL) | |
1969 { | |
1618 | 1970 nbdebug((" invalid buffer identifier in addAnno\n")); |
1971 EMSG("E651: invalid buffer identifier in addAnno"); | |
7 | 1972 return FAIL; |
1973 } | |
1974 | |
3263 | 1975 do_update = 1; |
7 | 1976 |
27 | 1977 cp = (char *)args; |
1978 serNum = strtol(cp, &cp, 10); | |
7 | 1979 |
1980 /* Get the typenr specific for this buffer and convert it to | |
1981 * the global typenumber, as used for the sign name. */ | |
27 | 1982 localTypeNum = strtol(cp, &cp, 10); |
1983 args = (char_u *)cp; | |
7 | 1984 typeNum = mapsigntype(buf, localTypeNum); |
1985 | |
1986 pos = get_off_or_lnum(buf->bufp, &args); | |
1987 | |
27 | 1988 cp = (char *)args; |
14730
193471015e1a
patch 8.1.0377: xdiff doesn't use the Vim memory allocation functions
Christian Brabandt <cb@256bit.org>
parents:
13380
diff
changeset
|
1989 vim_ignored = (int)strtol(cp, &cp, 10); |
27 | 1990 args = (char_u *)cp; |
7 | 1991 # ifdef NBDEBUG |
14730
193471015e1a
patch 8.1.0377: xdiff doesn't use the Vim memory allocation functions
Christian Brabandt <cb@256bit.org>
parents:
13380
diff
changeset
|
1992 if (vim_ignored != -1) |
7 | 1993 { |
1618 | 1994 nbdebug((" partial line annotation -- Not Yet Implemented!\n")); |
7 | 1995 } |
1996 # endif | |
1997 if (serNum >= GUARDEDOFFSET) | |
1998 { | |
1618 | 1999 nbdebug((" too many annotations! ignoring...\n")); |
7 | 2000 return FAIL; |
2001 } | |
2002 if (pos) | |
2003 { | |
1816 | 2004 coloncmd(":sign place %d line=%ld name=%d buffer=%d", |
7 | 2005 serNum, pos->lnum, typeNum, buf->bufp->b_fnum); |
2006 if (typeNum == curPCtype) | |
2007 coloncmd(":sign jump %d buffer=%d", serNum, | |
2008 buf->bufp->b_fnum); | |
2009 } | |
2010 #endif | |
2011 /* =====================================================================*/ | |
2012 } | |
2013 else if (streq((char *)cmd, "removeAnno")) | |
2014 { | |
2015 #ifdef FEAT_SIGNS | |
2016 int serNum; | |
2017 | |
2018 if (buf == NULL || buf->bufp == NULL) | |
2019 { | |
1618 | 2020 nbdebug((" invalid buffer identifier in removeAnno\n")); |
7 | 2021 return FAIL; |
2022 } | |
3263 | 2023 do_update = 1; |
27 | 2024 cp = (char *)args; |
2025 serNum = strtol(cp, &cp, 10); | |
2026 args = (char_u *)cp; | |
7 | 2027 coloncmd(":sign unplace %d buffer=%d", |
2028 serNum, buf->bufp->b_fnum); | |
2029 redraw_buf_later(buf->bufp, NOT_VALID); | |
2030 #endif | |
2031 /* =====================================================================*/ | |
2032 } | |
2033 else if (streq((char *)cmd, "moveAnnoToFront")) | |
2034 { | |
2035 #ifdef FEAT_SIGNS | |
1618 | 2036 nbdebug((" moveAnnoToFront: Not Yet Implemented!\n")); |
7 | 2037 #endif |
2038 /* =====================================================================*/ | |
2039 } | |
2040 else if (streq((char *)cmd, "guard") || streq((char *)cmd, "unguard")) | |
2041 { | |
2042 int len; | |
2043 pos_T first; | |
2044 pos_T last; | |
2045 pos_T *pos; | |
2046 int un = (cmd[0] == 'u'); | |
2047 static int guardId = GUARDEDOFFSET; | |
2048 | |
2049 if (skip >= SKIP_STOP) | |
2050 { | |
2051 nbdebug((" Skipping %s command\n", (char *) cmd)); | |
2052 return OK; | |
2053 } | |
2054 | |
2055 nb_init_graphics(); | |
2056 | |
2057 if (buf == NULL || buf->bufp == NULL) | |
2058 { | |
1618 | 2059 nbdebug((" invalid buffer identifier in %s command\n", cmd)); |
7 | 2060 return FAIL; |
2061 } | |
659 | 2062 nb_set_curbuf(buf->bufp); |
27 | 2063 cp = (char *)args; |
2064 off = strtol(cp, &cp, 10); | |
2065 len = strtol(cp, NULL, 10); | |
2066 args = (char_u *)cp; | |
7 | 2067 pos = off2pos(buf->bufp, off); |
3263 | 2068 do_update = 1; |
7 | 2069 if (!pos) |
2070 nbdebug((" no such start pos in %s, %ld\n", cmd, off)); | |
2071 else | |
2072 { | |
2073 first = *pos; | |
2074 pos = off2pos(buf->bufp, off + len - 1); | |
33 | 2075 if (pos != NULL && pos->col == 0) |
2076 { | |
7 | 2077 /* |
2078 * In Java Swing the offset is a position between 2 | |
2079 * characters. If col == 0 then we really want the | |
2080 * previous line as the end. | |
2081 */ | |
2082 pos = off2pos(buf->bufp, off + len - 2); | |
2083 } | |
2084 if (!pos) | |
2085 nbdebug((" no such end pos in %s, %ld\n", | |
2086 cmd, off + len - 1)); | |
2087 else | |
2088 { | |
2089 long lnum; | |
2090 last = *pos; | |
2091 /* set highlight for region */ | |
2092 nbdebug((" %sGUARD %ld,%d to %ld,%d\n", (un) ? "UN" : "", | |
2093 first.lnum, first.col, | |
2094 last.lnum, last.col)); | |
2095 #ifdef FEAT_SIGNS | |
2096 for (lnum = first.lnum; lnum <= last.lnum; lnum++) | |
2097 { | |
2098 if (un) | |
2099 { | |
2100 /* never used */ | |
2101 } | |
2102 else | |
2103 { | |
2104 if (buf_findsigntype_id(buf->bufp, lnum, | |
2105 GUARDED) == 0) | |
2106 { | |
2107 coloncmd( | |
1816 | 2108 ":sign place %d line=%ld name=%d buffer=%d", |
7 | 2109 guardId++, lnum, GUARDED, |
2110 buf->bufp->b_fnum); | |
2111 } | |
2112 } | |
2113 } | |
2114 #endif | |
2115 redraw_buf_later(buf->bufp, NOT_VALID); | |
2116 } | |
2117 } | |
2118 /* =====================================================================*/ | |
2119 } | |
2120 else if (streq((char *)cmd, "startAtomic")) | |
2121 { | |
2122 inAtomic = 1; | |
2123 /* =====================================================================*/ | |
2124 } | |
2125 else if (streq((char *)cmd, "endAtomic")) | |
2126 { | |
2127 inAtomic = 0; | |
2128 if (needupdate) | |
2129 { | |
3263 | 2130 do_update = 1; |
7 | 2131 needupdate = 0; |
2132 } | |
2133 /* =====================================================================*/ | |
2134 } | |
2135 else if (streq((char *)cmd, "save")) | |
2136 { | |
33 | 2137 /* |
10226
7a4fb555c83a
commit https://github.com/vim/vim/commit/9af418427652562384744648d7d173a4bfebba95
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
2138 * NOTE - This command is obsolete wrt NetBeans. It's left in |
33 | 2139 * only for historical reasons. |
2140 */ | |
7 | 2141 if (buf == NULL || buf->bufp == NULL) |
2142 { | |
1618 | 2143 nbdebug((" invalid buffer identifier in %s command\n", cmd)); |
7 | 2144 return FAIL; |
2145 } | |
2146 | |
2147 /* the following is taken from ex_cmds.c (do_wqall function) */ | |
2148 if (bufIsChanged(buf->bufp)) | |
2149 { | |
2150 /* Only write if the buffer can be written. */ | |
2151 if (p_write | |
2152 && !buf->bufp->b_p_ro | |
2153 && buf->bufp->b_ffname != NULL | |
2154 #ifdef FEAT_QUICKFIX | |
2155 && !bt_dontwrite(buf->bufp) | |
2156 #endif | |
2157 ) | |
2158 { | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9434
diff
changeset
|
2159 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9434
diff
changeset
|
2160 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9434
diff
changeset
|
2161 set_bufref(&bufref, buf->bufp); |
7 | 2162 buf_write_all(buf->bufp, FALSE); |
2163 /* an autocommand may have deleted the buffer */ | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9434
diff
changeset
|
2164 if (!bufref_valid(&bufref)) |
7 | 2165 buf->bufp = NULL; |
2166 } | |
2167 } | |
1618 | 2168 else |
2169 { | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2170 nbdebug((" Buffer has no changes!\n")); |
1618 | 2171 } |
7 | 2172 /* =====================================================================*/ |
2173 } | |
2174 else if (streq((char *)cmd, "netbeansBuffer")) | |
2175 { | |
2176 if (buf == NULL || buf->bufp == NULL) | |
2177 { | |
1618 | 2178 nbdebug((" invalid buffer identifier in %s command\n", cmd)); |
7 | 2179 return FAIL; |
2180 } | |
2181 if (*args == 'T') | |
2182 { | |
2183 buf->bufp->b_netbeans_file = TRUE; | |
2184 buf->bufp->b_was_netbeans_file = TRUE; | |
2185 } | |
2186 else | |
2187 buf->bufp->b_netbeans_file = FALSE; | |
2188 /* =====================================================================*/ | |
2189 } | |
33 | 2190 else if (streq((char *)cmd, "specialKeys")) |
2191 { | |
2192 special_keys(args); | |
2193 /* =====================================================================*/ | |
2194 } | |
2195 else if (streq((char *)cmd, "actionMenuItem")) | |
2196 { | |
2197 /* not used yet */ | |
2198 /* =====================================================================*/ | |
2199 } | |
7 | 2200 else if (streq((char *)cmd, "version")) |
2201 { | |
33 | 2202 /* not used yet */ |
7 | 2203 } |
1618 | 2204 else |
2205 { | |
2206 nbdebug(("Unrecognised command: %s\n", cmd)); | |
2207 } | |
7 | 2208 /* |
2209 * Unrecognized command is ignored. | |
2210 */ | |
2211 } | |
3263 | 2212 if (inAtomic && do_update) |
7 | 2213 { |
2214 needupdate = 1; | |
3263 | 2215 do_update = 0; |
7 | 2216 } |
2217 | |
33 | 2218 /* |
2219 * Is this needed? I moved the netbeans_Xt_connect() later during startup | |
10226
7a4fb555c83a
commit https://github.com/vim/vim/commit/9af418427652562384744648d7d173a4bfebba95
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
2220 * and it may no longer be necessary. If it's not needed then needupdate |
3263 | 2221 * and do_update can also be removed. |
33 | 2222 */ |
3263 | 2223 if (buf != NULL && buf->initDone && do_update) |
7 | 2224 { |
2225 update_screen(NOT_VALID); | |
2226 setcursor(); | |
2745 | 2227 cursor_on(); |
13150
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
2228 out_flush_cursor(TRUE, FALSE); |
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
2229 |
7 | 2230 /* Quit a hit-return or more prompt. */ |
2231 if (State == HITRETURN || State == ASKMORE) | |
2232 { | |
2233 #ifdef FEAT_GUI_GTK | |
2532
c067eb3e5904
Fix crash when using netbeans in a terminal when compiled with GUI support.
Bram Moolenaar <bram@vim.org>
parents:
2520
diff
changeset
|
2234 if (gui.in_use && gtk_main_level() > 0) |
7 | 2235 gtk_main_quit(); |
2236 #endif | |
2237 } | |
2238 } | |
2239 | |
2240 return retval; | |
2241 } | |
2242 | |
2243 | |
2244 /* | |
659 | 2245 * If "buf" is not the current buffer try changing to a window that edits this |
2246 * buffer. If there is no such window then close the current buffer and set | |
2247 * the current buffer as "buf". | |
2248 */ | |
2249 static void | |
1492 | 2250 nb_set_curbuf(buf_T *buf) |
659 | 2251 { |
6677 | 2252 if (curbuf != buf) { |
2253 if (buf_jump_open_win(buf) != NULL) | |
2254 return; | |
2255 if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf) != NULL) | |
2256 return; | |
659 | 2257 set_curbuf(buf, DOBUF_GOTO); |
6677 | 2258 } |
659 | 2259 } |
2260 | |
2261 /* | |
7 | 2262 * Process a vim colon command. |
2263 */ | |
2264 static void | |
2265 coloncmd(char *cmd, ...) | |
2266 { | |
2267 char buf[1024]; | |
2268 va_list ap; | |
2269 | |
2270 va_start(ap, cmd); | |
11653
67cf0d45b006
patch 8.0.0709: libvterm cannot use vsnprintf()
Christian Brabandt <cb@256bit.org>
parents:
10646
diff
changeset
|
2271 vim_vsnprintf(buf, sizeof(buf), cmd, ap); |
7 | 2272 va_end(ap); |
2273 | |
2274 nbdebug((" COLONCMD %s\n", buf)); | |
2275 | |
2276 /* ALT_INPUT_LOCK_ON; */ | |
2277 do_cmdline((char_u *)buf, NULL, NULL, DOCMD_NOWAIT | DOCMD_KEYTYPED); | |
2278 /* ALT_INPUT_LOCK_OFF; */ | |
2279 | |
2280 setcursor(); /* restore the cursor position */ | |
13150
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
2281 out_flush_cursor(TRUE, FALSE); |
7 | 2282 } |
2283 | |
2284 | |
2285 /* | |
33 | 2286 * Parse the specialKeys argument and issue the appropriate map commands. |
2287 */ | |
2288 static void | |
2289 special_keys(char_u *args) | |
2290 { | |
2291 char *save_str = nb_unquote(args, NULL); | |
2292 char *tok = strtok(save_str, " "); | |
2293 char *sep; | |
10646
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2294 #define KEYBUFLEN 64 |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2295 char keybuf[KEYBUFLEN]; |
33 | 2296 char cmdbuf[256]; |
2297 | |
2298 while (tok != NULL) | |
2299 { | |
2300 int i = 0; | |
2301 | |
2302 if ((sep = strchr(tok, '-')) != NULL) | |
2303 { | |
36 | 2304 *sep = NUL; |
33 | 2305 while (*tok) |
2306 { | |
2307 switch (*tok) | |
2308 { | |
2309 case 'A': | |
2310 case 'M': | |
2311 case 'C': | |
2312 case 'S': | |
2313 keybuf[i++] = *tok; | |
2314 keybuf[i++] = '-'; | |
2315 break; | |
2316 } | |
2317 tok++; | |
2318 } | |
2319 tok++; | |
2320 } | |
2321 | |
10646
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2322 if (strlen(tok) + i < KEYBUFLEN) |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2323 { |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2324 strcpy(&keybuf[i], tok); |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2325 vim_snprintf(cmdbuf, sizeof(cmdbuf), |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2326 "<silent><%s> :nbkey %s<CR>", keybuf, keybuf); |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2327 do_map(0, (char_u *)cmdbuf, NORMAL, FALSE); |
8cff35d5f5dc
patch 8.0.0213: Netbeans specialKeys command does not check argument length
Christian Brabandt <cb@256bit.org>
parents:
10226
diff
changeset
|
2328 } |
33 | 2329 tok = strtok(NULL, " "); |
2330 } | |
2331 vim_free(save_str); | |
2332 } | |
2333 | |
2210 | 2334 void |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
2335 ex_nbclose(exarg_T *eap UNUSED) |
2210 | 2336 { |
2337 netbeans_close(); | |
2338 } | |
33 | 2339 |
2340 void | |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
2341 ex_nbkey(exarg_T *eap) |
33 | 2342 { |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2343 (void)netbeans_keystring(eap->arg); |
33 | 2344 } |
2345 | |
2210 | 2346 void |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
2347 ex_nbstart( |
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
2348 exarg_T *eap) |
2210 | 2349 { |
2595 | 2350 #ifdef FEAT_GUI |
2351 # if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK) \ | |
2639 | 2352 && !defined(FEAT_GUI_W32) |
2595 | 2353 if (gui.in_use) |
2354 { | |
2639 | 2355 EMSG(_("E838: netbeans is not supported with this GUI")); |
2356 return; | |
2595 | 2357 } |
2358 # endif | |
2359 #endif | |
2210 | 2360 netbeans_open((char *)eap->arg, FALSE); |
2361 } | |
33 | 2362 |
2363 /* | |
7 | 2364 * Initialize highlights and signs for use by netbeans (mostly obsolete) |
2365 */ | |
2366 static void | |
2367 nb_init_graphics(void) | |
2368 { | |
2369 static int did_init = FALSE; | |
2370 | |
2371 if (!did_init) | |
2372 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
2373 coloncmd(":highlight NBGuarded guibg=Cyan guifg=Black" |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
2374 " ctermbg=LightCyan ctermfg=Black"); |
7 | 2375 coloncmd(":sign define %d linehl=NBGuarded", GUARDED); |
2376 | |
2377 did_init = TRUE; | |
2378 } | |
2379 } | |
2380 | |
2381 /* | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2382 * Convert key to netbeans name. This uses the global "mod_mask". |
7 | 2383 */ |
2384 static void | |
2385 netbeans_keyname(int key, char *buf) | |
2386 { | |
2387 char *name = 0; | |
2388 char namebuf[2]; | |
2389 int ctrl = 0; | |
2390 int shift = 0; | |
2391 int alt = 0; | |
2392 | |
2393 if (mod_mask & MOD_MASK_CTRL) | |
2394 ctrl = 1; | |
2395 if (mod_mask & MOD_MASK_SHIFT) | |
2396 shift = 1; | |
2397 if (mod_mask & MOD_MASK_ALT) | |
2398 alt = 1; | |
2399 | |
2400 | |
2401 switch (key) | |
2402 { | |
2403 case K_F1: name = "F1"; break; | |
2404 case K_S_F1: name = "F1"; shift = 1; break; | |
2405 case K_F2: name = "F2"; break; | |
2406 case K_S_F2: name = "F2"; shift = 1; break; | |
2407 case K_F3: name = "F3"; break; | |
2408 case K_S_F3: name = "F3"; shift = 1; break; | |
2409 case K_F4: name = "F4"; break; | |
2410 case K_S_F4: name = "F4"; shift = 1; break; | |
2411 case K_F5: name = "F5"; break; | |
2412 case K_S_F5: name = "F5"; shift = 1; break; | |
2413 case K_F6: name = "F6"; break; | |
2414 case K_S_F6: name = "F6"; shift = 1; break; | |
2415 case K_F7: name = "F7"; break; | |
2416 case K_S_F7: name = "F7"; shift = 1; break; | |
2417 case K_F8: name = "F8"; break; | |
2418 case K_S_F8: name = "F8"; shift = 1; break; | |
2419 case K_F9: name = "F9"; break; | |
2420 case K_S_F9: name = "F9"; shift = 1; break; | |
2421 case K_F10: name = "F10"; break; | |
2422 case K_S_F10: name = "F10"; shift = 1; break; | |
2423 case K_F11: name = "F11"; break; | |
2424 case K_S_F11: name = "F11"; shift = 1; break; | |
2425 case K_F12: name = "F12"; break; | |
2426 case K_S_F12: name = "F12"; shift = 1; break; | |
2427 default: | |
2428 if (key >= ' ' && key <= '~') | |
2429 { | |
2430 /* Allow ASCII characters. */ | |
2431 name = namebuf; | |
2432 namebuf[0] = key; | |
2433 namebuf[1] = NUL; | |
2434 } | |
2435 else | |
2436 name = "X"; | |
2437 break; | |
2438 } | |
2439 | |
2440 buf[0] = '\0'; | |
2441 if (ctrl) | |
2442 strcat(buf, "C"); | |
2443 if (shift) | |
2444 strcat(buf, "S"); | |
2445 if (alt) | |
2446 strcat(buf, "M"); /* META */ | |
2447 if (ctrl || shift || alt) | |
2448 strcat(buf, "-"); | |
2449 strcat(buf, name); | |
2450 } | |
2451 | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
2452 #if defined(FEAT_BEVAL) || defined(PROTO) |
7 | 2453 /* |
2454 * Function to be called for balloon evaluation. Grabs the text under the | |
2455 * cursor and sends it to the debugger for evaluation. The debugger should | |
2456 * respond with a showBalloon command when there is a useful result. | |
2457 */ | |
183 | 2458 void |
7 | 2459 netbeans_beval_cb( |
2460 BalloonEval *beval, | |
1884 | 2461 int state UNUSED) |
7 | 2462 { |
183 | 2463 win_T *wp; |
7 | 2464 char_u *text; |
183 | 2465 linenr_T lnum; |
7 | 2466 int col; |
2770 | 2467 char *buf; |
7 | 2468 char_u *p; |
2469 | |
2470 /* Don't do anything when 'ballooneval' is off, messages scrolled the | |
2471 * windows up or we have no connection. */ | |
12871
1a450ce6980c
patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents:
12513
diff
changeset
|
2472 if (!can_use_beval() || !NETBEANS_OPEN) |
7 | 2473 return; |
2474 | |
183 | 2475 if (get_beval_info(beval, TRUE, &wp, &lnum, &text, &col) == OK) |
7 | 2476 { |
2477 /* Send debugger request. Only when the text is of reasonable | |
2478 * length. */ | |
2479 if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL) | |
2480 { | |
2770 | 2481 buf = (char *)alloc(MAXPATHL * 2 + 25); |
2482 if (buf != NULL) | |
33 | 2483 { |
2770 | 2484 p = nb_quote(text); |
2485 if (p != NULL) | |
2486 { | |
2487 vim_snprintf(buf, MAXPATHL * 2 + 25, | |
2488 "0:balloonText=%d \"%s\"\n", r_cmdno, p); | |
2489 vim_free(p); | |
2490 } | |
2491 nbdebug(("EVT: %s", buf)); | |
2492 nb_send(buf, "netbeans_beval_cb"); | |
2493 vim_free(buf); | |
33 | 2494 } |
7 | 2495 } |
2496 vim_free(text); | |
2497 } | |
2498 } | |
2499 #endif | |
2500 | |
2501 /* | |
7743
6069f43cea4e
commit https://github.com/vim/vim/commit/e0874f8cbcddfcf9965a85ba35199964efb1d01a
Christian Brabandt <cb@256bit.org>
parents:
7408
diff
changeset
|
2502 * Return TRUE when the netbeans connection is active. |
2210 | 2503 */ |
2504 int | |
2505 netbeans_active(void) | |
2506 { | |
2507 return NETBEANS_OPEN; | |
2508 } | |
2509 | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
2510 /* |
7 | 2511 * Tell netbeans that the window was opened, ready for commands. |
2512 */ | |
2513 void | |
2271
2b33a7678e7b
Fix compiler warnings for shadowed variables. Make 'conceal' a long instead
Bram Moolenaar <bram@vim.org>
parents:
2241
diff
changeset
|
2514 netbeans_open(char *params, int doabort) |
7 | 2515 { |
2516 char *cmd = "0:startupDone=0\n"; | |
2517 | |
2210 | 2518 if (NETBEANS_OPEN) |
2519 { | |
2520 EMSG(_("E511: netbeans already connected")); | |
7 | 2521 return; |
2210 | 2522 } |
2523 | |
2271
2b33a7678e7b
Fix compiler warnings for shadowed variables. Make 'conceal' a long instead
Bram Moolenaar <bram@vim.org>
parents:
2241
diff
changeset
|
2524 if (netbeans_connect(params, doabort) != OK) |
7 | 2525 return; |
183 | 2526 |
7 | 2527 nbdebug(("EVT: %s", cmd)); |
2528 nb_send(cmd, "netbeans_startup_done"); | |
2210 | 2529 |
2530 /* update the screen after having added the gutter */ | |
2531 changed_window_setting(); | |
2532 update_screen(CLEAR); | |
2533 setcursor(); | |
2745 | 2534 cursor_on(); |
13150
808625d4b71b
patch 8.0.1449: slow redrawing with DirectX
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
2535 out_flush_cursor(TRUE, FALSE); |
7 | 2536 } |
2537 | |
33 | 2538 /* |
2539 * Tell netbeans that we're exiting. This should be called right | |
2540 * before calling exit. | |
2541 */ | |
2542 void | |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
2543 netbeans_send_disconnect(void) |
33 | 2544 { |
2545 char buf[128]; | |
2546 | |
2210 | 2547 if (NETBEANS_OPEN) |
33 | 2548 { |
944 | 2549 sprintf(buf, "0:disconnect=%d\n", r_cmdno); |
33 | 2550 nbdebug(("EVT: %s", buf)); |
2551 nb_send(buf, "netbeans_disconnect"); | |
2552 } | |
2553 } | |
2554 | |
9052
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2555 #if defined(FEAT_EVAL) || defined(PROTO) |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2556 int |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2557 set_ref_in_nb_channel(int copyID) |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2558 { |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2559 int abort = FALSE; |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2560 typval_T tv; |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2561 |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2562 if (nb_channel != NULL) |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2563 { |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2564 tv.v_type = VAR_CHANNEL; |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2565 tv.vval.v_channel = nb_channel; |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2566 abort = set_ref_in_item(&tv, copyID, NULL, NULL); |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2567 } |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2568 return abort; |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2569 } |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2570 #endif |
3a6b66c02d6d
commit https://github.com/vim/vim/commit/3266c85a44a637862b0ed6e531680c6ab2897ab5
Christian Brabandt <cb@256bit.org>
parents:
8267
diff
changeset
|
2571 |
2592 | 2572 #if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO) |
7 | 2573 /* |
2574 * Tell netbeans that the window was moved or resized. | |
2575 */ | |
2576 void | |
2577 netbeans_frame_moved(int new_x, int new_y) | |
2578 { | |
2579 char buf[128]; | |
2580 | |
2210 | 2581 if (!NETBEANS_OPEN) |
7 | 2582 return; |
2583 | |
2584 sprintf(buf, "0:geometry=%d %d %d %d %d\n", | |
944 | 2585 r_cmdno, (int)Columns, (int)Rows, new_x, new_y); |
33 | 2586 /*nbdebug(("EVT: %s", buf)); happens too many times during a move */ |
7 | 2587 nb_send(buf, "netbeans_frame_moved"); |
2588 } | |
2589 #endif | |
2590 | |
2591 /* | |
33 | 2592 * Tell netbeans the user opened or activated a file. |
2593 */ | |
2594 void | |
2595 netbeans_file_activated(buf_T *bufp) | |
2596 { | |
2597 int bufno = nb_getbufno(bufp); | |
2598 nbbuf_T *bp = nb_get_buf(bufno); | |
2599 char buffer[2*MAXPATHL]; | |
2600 char_u *q; | |
2601 | |
2210 | 2602 if (!NETBEANS_OPEN || !bufp->b_netbeans_file || dosetvisible) |
33 | 2603 return; |
2604 | |
2605 q = nb_quote(bufp->b_ffname); | |
840 | 2606 if (q == NULL || bp == NULL) |
33 | 2607 return; |
2608 | |
272 | 2609 vim_snprintf(buffer, sizeof(buffer), "%d:fileOpened=%d \"%s\" %s %s\n", |
33 | 2610 bufno, |
2611 bufno, | |
2612 (char *)q, | |
2613 "T", /* open in NetBeans */ | |
2614 "F"); /* modified */ | |
2615 | |
2616 vim_free(q); | |
2617 nbdebug(("EVT: %s", buffer)); | |
2618 | |
2619 nb_send(buffer, "netbeans_file_opened"); | |
2620 } | |
2621 | |
2622 /* | |
7 | 2623 * Tell netbeans the user opened a file. |
2624 */ | |
2625 void | |
33 | 2626 netbeans_file_opened(buf_T *bufp) |
7 | 2627 { |
33 | 2628 int bufno = nb_getbufno(bufp); |
7 | 2629 char buffer[2*MAXPATHL]; |
2630 char_u *q; | |
33 | 2631 nbbuf_T *bp = nb_get_buf(nb_getbufno(bufp)); |
2632 int bnum; | |
7 | 2633 |
2210 | 2634 if (!NETBEANS_OPEN) |
7 | 2635 return; |
2636 | |
33 | 2637 q = nb_quote(bufp->b_ffname); |
7 | 2638 if (q == NULL) |
2639 return; | |
33 | 2640 if (bp != NULL) |
2641 bnum = bufno; | |
2642 else | |
2643 bnum = 0; | |
2644 | |
272 | 2645 vim_snprintf(buffer, sizeof(buffer), "%d:fileOpened=%d \"%s\" %s %s\n", |
33 | 2646 bnum, |
7 | 2647 0, |
2648 (char *)q, | |
2649 "T", /* open in NetBeans */ | |
2650 "F"); /* modified */ | |
2651 | |
2652 vim_free(q); | |
2653 nbdebug(("EVT: %s", buffer)); | |
2654 | |
2655 nb_send(buffer, "netbeans_file_opened"); | |
13170
6559e98f3e74
patch 8.0.1459: cannot handle change of directory
Christian Brabandt <cb@256bit.org>
parents:
13150
diff
changeset
|
2656 if (p_acd && vim_chdirfile(bufp->b_ffname, "auto") == OK) |
7 | 2657 shorten_fnames(TRUE); |
2658 } | |
2659 | |
2660 /* | |
1781 | 2661 * Tell netbeans that a file was deleted or wiped out. |
7 | 2662 */ |
2663 void | |
1781 | 2664 netbeans_file_killed(buf_T *bufp) |
7 | 2665 { |
2666 int bufno = nb_getbufno(bufp); | |
2667 nbbuf_T *nbbuf = nb_get_buf(bufno); | |
2668 char buffer[2*MAXPATHL]; | |
2669 | |
2210 | 2670 if (!NETBEANS_OPEN || bufno == -1) |
7 | 2671 return; |
1781 | 2672 |
2673 nbdebug(("netbeans_file_killed:\n")); | |
2674 nbdebug((" Killing bufno: %d", bufno)); | |
7 | 2675 |
944 | 2676 sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno); |
7 | 2677 |
2678 nbdebug(("EVT: %s", buffer)); | |
2679 | |
1781 | 2680 nb_send(buffer, "netbeans_file_killed"); |
7 | 2681 |
2682 if (nbbuf != NULL) | |
2683 nbbuf->bufp = NULL; | |
2684 } | |
2685 | |
2686 /* | |
2687 * Get a pointer to the Netbeans buffer for Vim buffer "bufp". | |
2688 * Return NULL if there is no such buffer or changes are not to be reported. | |
2689 * Otherwise store the buffer number in "*bufnop". | |
2690 */ | |
2691 static nbbuf_T * | |
2692 nb_bufp2nbbuf_fire(buf_T *bufp, int *bufnop) | |
2693 { | |
2694 int bufno; | |
2695 nbbuf_T *nbbuf; | |
2696 | |
2210 | 2697 if (!NETBEANS_OPEN || !netbeansFireChanges) |
7 | 2698 return NULL; /* changes are not reported at all */ |
2699 | |
2700 bufno = nb_getbufno(bufp); | |
2701 if (bufno <= 0) | |
2702 return NULL; /* file is not known to NetBeans */ | |
2703 | |
2704 nbbuf = nb_get_buf(bufno); | |
2705 if (nbbuf != NULL && !nbbuf->fireChanges) | |
2706 return NULL; /* changes in this buffer are not reported */ | |
2707 | |
2708 *bufnop = bufno; | |
2709 return nbbuf; | |
2710 } | |
2711 | |
2712 /* | |
2713 * Tell netbeans the user inserted some text. | |
2714 */ | |
2715 void | |
2716 netbeans_inserted( | |
2717 buf_T *bufp, | |
2718 linenr_T linenr, | |
2719 colnr_T col, | |
2720 char_u *txt, | |
2721 int newlen) | |
2722 { | |
2723 char_u *buf; | |
2724 int bufno; | |
2725 nbbuf_T *nbbuf; | |
2726 pos_T pos; | |
2727 long off; | |
2728 char_u *p; | |
2729 char_u *newtxt; | |
2730 | |
2210 | 2731 if (!NETBEANS_OPEN) |
2732 return; | |
2733 | |
7 | 2734 nbbuf = nb_bufp2nbbuf_fire(bufp, &bufno); |
2735 if (nbbuf == NULL) | |
2736 return; | |
2737 | |
33 | 2738 /* Don't mark as modified for initial read */ |
2739 if (nbbuf->insertDone) | |
2740 nbbuf->modified = 1; | |
7 | 2741 |
2742 pos.lnum = linenr; | |
2743 pos.col = col; | |
2744 off = pos2off(bufp, &pos); | |
2745 | |
2746 /* send the "insert" EVT */ | |
2747 newtxt = alloc(newlen + 1); | |
416 | 2748 vim_strncpy(newtxt, txt, newlen); |
7 | 2749 p = nb_quote(newtxt); |
2750 if (p != NULL) | |
2751 { | |
33 | 2752 buf = alloc(128 + 2*newlen); |
944 | 2753 sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n", |
2754 bufno, r_cmdno, off, p); | |
7 | 2755 nbdebug(("EVT: %s", buf)); |
2756 nb_send((char *)buf, "netbeans_inserted"); | |
33 | 2757 vim_free(p); |
2758 vim_free(buf); | |
7 | 2759 } |
2760 vim_free(newtxt); | |
2761 } | |
2762 | |
2763 /* | |
2764 * Tell netbeans some bytes have been removed. | |
2765 */ | |
2766 void | |
2767 netbeans_removed( | |
2768 buf_T *bufp, | |
2769 linenr_T linenr, | |
2770 colnr_T col, | |
2771 long len) | |
2772 { | |
2773 char_u buf[128]; | |
2774 int bufno; | |
2775 nbbuf_T *nbbuf; | |
2776 pos_T pos; | |
2777 long off; | |
2778 | |
2210 | 2779 if (!NETBEANS_OPEN) |
2780 return; | |
2781 | |
7 | 2782 nbbuf = nb_bufp2nbbuf_fire(bufp, &bufno); |
2783 if (nbbuf == NULL) | |
2784 return; | |
2785 | |
2786 if (len < 0) | |
2787 { | |
1618 | 2788 nbdebug(("Negative len %ld in netbeans_removed()!\n", len)); |
7 | 2789 return; |
2790 } | |
2791 | |
2792 nbbuf->modified = 1; | |
2793 | |
2794 pos.lnum = linenr; | |
2795 pos.col = col; | |
2796 | |
2797 off = pos2off(bufp, &pos); | |
2798 | |
944 | 2799 sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, r_cmdno, off, len); |
7 | 2800 nbdebug(("EVT: %s", buf)); |
2801 nb_send((char *)buf, "netbeans_removed"); | |
2802 } | |
2803 | |
2804 /* | |
2047
85da03763130
updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents:
1956
diff
changeset
|
2805 * Send netbeans an unmodified command. |
7 | 2806 */ |
2807 void | |
1884 | 2808 netbeans_unmodified(buf_T *bufp UNUSED) |
7 | 2809 { |
2520 | 2810 /* This is a no-op, because NetBeans considers a buffer modified |
7 | 2811 * even when all changes have been undone. */ |
2812 } | |
2813 | |
2814 /* | |
10226
7a4fb555c83a
commit https://github.com/vim/vim/commit/9af418427652562384744648d7d173a4bfebba95
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
2815 * Send a button release event back to netbeans. It's up to netbeans |
7 | 2816 * to decide what to do (if anything) with this event. |
2817 */ | |
2818 void | |
2819 netbeans_button_release(int button) | |
2820 { | |
2821 char buf[128]; | |
2822 int bufno; | |
2823 | |
2210 | 2824 if (!NETBEANS_OPEN) |
2825 return; | |
2826 | |
7 | 2827 bufno = nb_getbufno(curbuf); |
2828 | |
2829 if (bufno >= 0 && curwin != NULL && curwin->w_buffer == curbuf) | |
2830 { | |
12513
3ca08bf99396
patch 8.0.1135: W_WINCOL() is always the same
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
2831 int col = mouse_col - curwin->w_wincol |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
2832 - ((curwin->w_p_nu || curwin->w_p_rnu) ? 9 : 1); |
7 | 2833 long off = pos2off(curbuf, &curwin->w_cursor); |
2834 | |
2835 /* sync the cursor position */ | |
944 | 2836 sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off); |
7 | 2837 nbdebug(("EVT: %s", buf)); |
2838 nb_send(buf, "netbeans_button_release[newDotAndMark]"); | |
2839 | |
944 | 2840 sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, r_cmdno, |
7 | 2841 button, (long)curwin->w_cursor.lnum, col); |
2842 nbdebug(("EVT: %s", buf)); | |
2843 nb_send(buf, "netbeans_button_release"); | |
2844 } | |
2845 } | |
2846 | |
2847 | |
2848 /* | |
1186 | 2849 * Send a keypress event back to netbeans. This usually simulates some |
33 | 2850 * kind of function key press. This function operates on a key code. |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2851 * Return TRUE when the key was sent, FALSE when the command has been |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2852 * postponed. |
7 | 2853 */ |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2854 int |
7 | 2855 netbeans_keycommand(int key) |
2856 { | |
33 | 2857 char keyName[60]; |
2858 | |
2859 netbeans_keyname(key, keyName); | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2860 return netbeans_keystring((char_u *)keyName); |
33 | 2861 } |
2862 | |
2863 | |
2864 /* | |
1186 | 2865 * Send a keypress event back to netbeans. This usually simulates some |
33 | 2866 * kind of function key press. This function operates on a key string. |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2867 * Return TRUE when the key was sent, FALSE when the command has been |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2868 * postponed. |
33 | 2869 */ |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2870 static int |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2871 netbeans_keystring(char_u *keyName) |
33 | 2872 { |
7 | 2873 char buf[2*MAXPATHL]; |
33 | 2874 int bufno = nb_getbufno(curbuf); |
7 | 2875 long off; |
2876 char_u *q; | |
2877 | |
2210 | 2878 if (!NETBEANS_OPEN) |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2879 return TRUE; |
7 | 2880 |
2881 if (bufno == -1) | |
2882 { | |
2883 nbdebug(("got keycommand for non-NetBeans buffer, opening...\n")); | |
2884 q = curbuf->b_ffname == NULL ? (char_u *)"" | |
2885 : nb_quote(curbuf->b_ffname); | |
2886 if (q == NULL) | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2887 return TRUE; |
272 | 2888 vim_snprintf(buf, sizeof(buf), "0:fileOpened=%d \"%s\" %s %s\n", 0, |
7 | 2889 q, |
2890 "T", /* open in NetBeans */ | |
2891 "F"); /* modified */ | |
2892 if (curbuf->b_ffname != NULL) | |
2893 vim_free(q); | |
2894 nbdebug(("EVT: %s", buf)); | |
2895 nb_send(buf, "netbeans_keycommand"); | |
2896 | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2897 postpone_keycommand(keyName); |
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2898 return FALSE; |
7 | 2899 } |
2900 | |
2901 /* sync the cursor position */ | |
2902 off = pos2off(curbuf, &curwin->w_cursor); | |
944 | 2903 sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off); |
7 | 2904 nbdebug(("EVT: %s", buf)); |
2905 nb_send(buf, "netbeans_keycommand"); | |
2906 | |
2907 /* To work on Win32 you must apply patch to ExtEditor module | |
2908 * from ExtEdCaret.java.diff - make EVT_newDotAndMark handler | |
2909 * more synchronous | |
2910 */ | |
2911 | |
2912 /* now send keyCommand event */ | |
272 | 2913 vim_snprintf(buf, sizeof(buf), "%d:keyCommand=%d \"%s\"\n", |
944 | 2914 bufno, r_cmdno, keyName); |
7 | 2915 nbdebug(("EVT: %s", buf)); |
2916 nb_send(buf, "netbeans_keycommand"); | |
2917 | |
2918 /* New: do both at once and include the lnum/col. */ | |
272 | 2919 vim_snprintf(buf, sizeof(buf), "%d:keyAtPos=%d \"%s\" %ld %ld/%ld\n", |
944 | 2920 bufno, r_cmdno, keyName, |
7 | 2921 off, (long)curwin->w_cursor.lnum, (long)curwin->w_cursor.col); |
2922 nbdebug(("EVT: %s", buf)); | |
2923 nb_send(buf, "netbeans_keycommand"); | |
2048
351bf13db807
updated for version 7.2.334
Bram Moolenaar <bram@zimbu.org>
parents:
2047
diff
changeset
|
2924 return TRUE; |
7 | 2925 } |
2926 | |
2927 | |
2928 /* | |
2929 * Send a save event to netbeans. | |
2930 */ | |
2931 void | |
2932 netbeans_save_buffer(buf_T *bufp) | |
2933 { | |
2934 char_u buf[64]; | |
2935 int bufno; | |
2936 nbbuf_T *nbbuf; | |
2937 | |
2210 | 2938 if (!NETBEANS_OPEN) |
2939 return; | |
2940 | |
7 | 2941 nbbuf = nb_bufp2nbbuf_fire(bufp, &bufno); |
2942 if (nbbuf == NULL) | |
2943 return; | |
2944 | |
2945 nbbuf->modified = 0; | |
2946 | |
944 | 2947 sprintf((char *)buf, "%d:save=%d\n", bufno, r_cmdno); |
7 | 2948 nbdebug(("EVT: %s", buf)); |
2949 nb_send((char *)buf, "netbeans_save_buffer"); | |
2950 } | |
2951 | |
2952 | |
2953 /* | |
2954 * Send remove command to netbeans (this command has been turned off). | |
2955 */ | |
2956 void | |
2957 netbeans_deleted_all_lines(buf_T *bufp) | |
2958 { | |
2959 char_u buf[64]; | |
2960 int bufno; | |
2961 nbbuf_T *nbbuf; | |
2962 | |
2210 | 2963 if (!NETBEANS_OPEN) |
2964 return; | |
2965 | |
7 | 2966 nbbuf = nb_bufp2nbbuf_fire(bufp, &bufno); |
2967 if (nbbuf == NULL) | |
2968 return; | |
2969 | |
33 | 2970 /* Don't mark as modified for initial read */ |
2971 if (nbbuf->insertDone) | |
2972 nbbuf->modified = 1; | |
7 | 2973 |
944 | 2974 sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, r_cmdno); |
7 | 2975 nbdebug(("EVT(suppressed): %s", buf)); |
2976 /* nb_send(buf, "netbeans_deleted_all_lines"); */ | |
2977 } | |
2978 | |
2979 | |
2980 /* | |
2981 * See if the lines are guarded. The top and bot parameters are from | |
2982 * u_savecommon(), these are the line above the change and the line below the | |
2983 * change. | |
2984 */ | |
2985 int | |
2986 netbeans_is_guarded(linenr_T top, linenr_T bot) | |
2987 { | |
2988 signlist_T *p; | |
2989 int lnum; | |
2990 | |
2210 | 2991 if (!NETBEANS_OPEN) |
2992 return FALSE; | |
2993 | |
7 | 2994 for (p = curbuf->b_signlist; p != NULL; p = p->next) |
2995 if (p->id >= GUARDEDOFFSET) | |
2996 for (lnum = top + 1; lnum < bot; lnum++) | |
2997 if (lnum == p->lnum) | |
2998 return TRUE; | |
2999 | |
3000 return FALSE; | |
3001 } | |
3002 | |
2592 | 3003 #if defined(FEAT_GUI_X11) || defined(PROTO) |
7 | 3004 /* |
3005 * We have multiple signs to draw at the same location. Draw the | |
3006 * multi-sign indicator instead. This is the Motif version. | |
3007 */ | |
3008 void | |
3009 netbeans_draw_multisign_indicator(int row) | |
3010 { | |
3011 int i; | |
3012 int y; | |
3013 int x; | |
3014 | |
2210 | 3015 if (!NETBEANS_OPEN) |
3016 return; | |
3017 | |
7 | 3018 x = 0; |
3019 y = row * gui.char_height + 2; | |
3020 | |
3021 for (i = 0; i < gui.char_height - 3; i++) | |
3022 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y++); | |
3023 | |
3024 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+0, y); | |
3025 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y); | |
3026 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+4, y++); | |
3027 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+1, y); | |
3028 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y); | |
3029 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++); | |
3030 XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y); | |
3031 } | |
2592 | 3032 #endif /* FEAT_GUI_X11 */ |
7 | 3033 |
2278
0b3be97064e5
Various small fixes from Dominique Pelle.
Bram Moolenaar <bram@vim.org>
parents:
2271
diff
changeset
|
3034 #if defined(FEAT_GUI_GTK) && !defined(PROTO) |
7 | 3035 /* |
3036 * We have multiple signs to draw at the same location. Draw the | |
3037 * multi-sign indicator instead. This is the GTK/Gnome version. | |
3038 */ | |
3039 void | |
3040 netbeans_draw_multisign_indicator(int row) | |
3041 { | |
3042 int i; | |
3043 int y; | |
3044 int x; | |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3045 #if GTK_CHECK_VERSION(3,0,0) |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3046 cairo_t *cr = NULL; |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3047 #else |
7 | 3048 GdkDrawable *drawable = gui.drawarea->window; |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3049 #endif |
7 | 3050 |
2210 | 3051 if (!NETBEANS_OPEN) |
3052 return; | |
3053 | |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3054 #if GTK_CHECK_VERSION(3,0,0) |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3055 cr = cairo_create(gui.surface); |
9624
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
3056 cairo_set_source_rgba(cr, |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
3057 gui.fgcolor->red, gui.fgcolor->green, gui.fgcolor->blue, |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
3058 gui.fgcolor->alpha); |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3059 #endif |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3060 |
7 | 3061 x = 0; |
3062 y = row * gui.char_height + 2; | |
3063 | |
3064 for (i = 0; i < gui.char_height - 3; i++) | |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3065 #if GTK_CHECK_VERSION(3,0,0) |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3066 cairo_rectangle(cr, x+2, y++, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3067 #else |
7 | 3068 gdk_draw_point(drawable, gui.text_gc, x+2, y++); |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3069 #endif |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3070 |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3071 #if GTK_CHECK_VERSION(3,0,0) |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3072 cairo_rectangle(cr, x+0, y, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3073 cairo_rectangle(cr, x+2, y, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3074 cairo_rectangle(cr, x+4, y++, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3075 cairo_rectangle(cr, x+1, y, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3076 cairo_rectangle(cr, x+2, y, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3077 cairo_rectangle(cr, x+3, y++, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3078 cairo_rectangle(cr, x+2, y, 1, 1); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3079 #else |
7 | 3080 gdk_draw_point(drawable, gui.text_gc, x+0, y); |
3081 gdk_draw_point(drawable, gui.text_gc, x+2, y); | |
3082 gdk_draw_point(drawable, gui.text_gc, x+4, y++); | |
3083 gdk_draw_point(drawable, gui.text_gc, x+1, y); | |
3084 gdk_draw_point(drawable, gui.text_gc, x+2, y); | |
3085 gdk_draw_point(drawable, gui.text_gc, x+3, y++); | |
3086 gdk_draw_point(drawable, gui.text_gc, x+2, y); | |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3087 #endif |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3088 |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3089 #if GTK_CHECK_VERSION(3,0,0) |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3090 cairo_destroy(cr); |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
3091 #endif |
7 | 3092 } |
3093 #endif /* FEAT_GUI_GTK */ | |
3094 | |
3095 /* | |
3096 * If the mouse is clicked in the gutter of a line with multiple | |
3097 * annotations, cycle through the set of signs. | |
3098 */ | |
3099 void | |
3100 netbeans_gutter_click(linenr_T lnum) | |
3101 { | |
3102 signlist_T *p; | |
3103 | |
2210 | 3104 if (!NETBEANS_OPEN) |
3105 return; | |
3106 | |
7 | 3107 for (p = curbuf->b_signlist; p != NULL; p = p->next) |
3108 { | |
3109 if (p->lnum == lnum && p->next && p->next->lnum == lnum) | |
3110 { | |
3111 signlist_T *tail; | |
3112 | |
3113 /* remove "p" from list, reinsert it at the tail of the sublist */ | |
3114 if (p->prev) | |
3115 p->prev->next = p->next; | |
3116 else | |
3117 curbuf->b_signlist = p->next; | |
3118 p->next->prev = p->prev; | |
3119 /* now find end of sublist and insert p */ | |
3120 for (tail = p->next; | |
3121 tail->next && tail->next->lnum == lnum | |
3122 && tail->next->id < GUARDEDOFFSET; | |
3123 tail = tail->next) | |
3124 ; | |
3125 /* tail now points to last entry with same lnum (except | |
3126 * that "guarded" annotations are always last) */ | |
3127 p->next = tail->next; | |
3128 if (tail->next) | |
3129 tail->next->prev = p; | |
3130 p->prev = tail; | |
3131 tail->next = p; | |
3132 update_debug_sign(curbuf, lnum); | |
3133 break; | |
3134 } | |
3135 } | |
3136 } | |
3137 | |
3138 /* | |
2047
85da03763130
updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents:
1956
diff
changeset
|
3139 * Add a sign of the requested type at the requested location. |
7 | 3140 * |
3141 * Reverse engineering: | |
3142 * Apparently an annotation is defined the first time it is used in a buffer. | |
3143 * When the same annotation is used in two buffers, the second time we do not | |
3144 * need to define a new sign name but reuse the existing one. But since the | |
3145 * ID number used in the second buffer starts counting at one again, a mapping | |
3146 * is made from the ID specifically for the buffer to the global sign name | |
3147 * (which is a number). | |
3148 * | |
3149 * globalsignmap[] stores the signs that have been defined globally. | |
3150 * buf->signmapused[] maps buffer-local annotation IDs to an index in | |
3151 * globalsignmap[]. | |
3152 */ | |
3153 static void | |
3154 addsigntype( | |
3155 nbbuf_T *buf, | |
3156 int typeNum, | |
3157 char_u *typeName, | |
1884 | 3158 char_u *tooltip UNUSED, |
7 | 3159 char_u *glyphFile, |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3160 char_u *fg, |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3161 char_u *bg) |
7 | 3162 { |
3163 int i, j; | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3164 int use_fg = (*fg && STRCMP(fg, "none") != 0); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3165 int use_bg = (*bg && STRCMP(bg, "none") != 0); |
7 | 3166 |
3167 for (i = 0; i < globalsignmapused; i++) | |
3168 if (STRCMP(typeName, globalsignmap[i]) == 0) | |
3169 break; | |
3170 | |
3171 if (i == globalsignmapused) /* not found; add it to global map */ | |
3172 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3173 nbdebug(("DEFINEANNOTYPE(%d,%s,%s,%s,%s,%s)\n", |
7 | 3174 typeNum, typeName, tooltip, glyphFile, fg, bg)); |
3175 if (use_fg || use_bg) | |
3176 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3177 char fgbuf[2 * (8 + MAX_COLOR_LENGTH) + 1]; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3178 char bgbuf[2 * (8 + MAX_COLOR_LENGTH) + 1]; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3179 char *ptr; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3180 int value; |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3181 |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3182 value = strtol((char *)fg, &ptr, 10); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3183 if (ptr != (char *)fg) |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3184 sprintf(fgbuf, "guifg=#%06x", value & 0xFFFFFF); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3185 else |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3186 sprintf(fgbuf, "guifg=%s ctermfg=%s", fg, fg); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3187 |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3188 value = strtol((char *)bg, &ptr, 10); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3189 if (ptr != (char *)bg) |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3190 sprintf(bgbuf, "guibg=#%06x", value & 0xFFFFFF); |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3191 else |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3192 sprintf(bgbuf, "guibg=%s ctermbg=%s", bg, bg); |
7 | 3193 |
3194 coloncmd(":highlight NB_%s %s %s", typeName, (use_fg) ? fgbuf : "", | |
3195 (use_bg) ? bgbuf : ""); | |
3196 if (*glyphFile == NUL) | |
3197 /* no glyph, line highlighting only */ | |
3198 coloncmd(":sign define %d linehl=NB_%s", i + 1, typeName); | |
3199 else if (vim_strsize(glyphFile) <= 2) | |
3200 /* one- or two-character glyph name, use as text glyph with | |
3201 * texthl */ | |
3202 coloncmd(":sign define %d text=%s texthl=NB_%s", i + 1, | |
3203 glyphFile, typeName); | |
3204 else | |
3205 /* glyph, line highlighting */ | |
3206 coloncmd(":sign define %d icon=%s linehl=NB_%s", i + 1, | |
3207 glyphFile, typeName); | |
3208 } | |
3209 else | |
3210 /* glyph, no line highlighting */ | |
3211 coloncmd(":sign define %d icon=%s", i + 1, glyphFile); | |
3212 | |
3213 if (STRCMP(typeName,"CurrentPC") == 0) | |
3214 curPCtype = typeNum; | |
3215 | |
3216 if (globalsignmapused == globalsignmaplen) | |
3217 { | |
3218 if (globalsignmaplen == 0) /* first allocation */ | |
3219 { | |
3220 globalsignmaplen = 20; | |
3221 globalsignmap = (char **)alloc_clear(globalsignmaplen*sizeof(char *)); | |
3222 } | |
3223 else /* grow it */ | |
3224 { | |
3225 int incr; | |
3226 int oldlen = globalsignmaplen; | |
6596 | 3227 char **t_globalsignmap = globalsignmap; |
7 | 3228 |
3229 globalsignmaplen *= 2; | |
3230 incr = globalsignmaplen - oldlen; | |
3231 globalsignmap = (char **)vim_realloc(globalsignmap, | |
3232 globalsignmaplen * sizeof(char *)); | |
6596 | 3233 if (globalsignmap == NULL) |
3234 { | |
3235 vim_free(t_globalsignmap); | |
3236 globalsignmaplen = 0; | |
3237 return; | |
3238 } | |
2215
cccb71c2c5c1
Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents:
2213
diff
changeset
|
3239 vim_memset(globalsignmap + oldlen, 0, incr * sizeof(char *)); |
7 | 3240 } |
3241 } | |
3242 | |
3243 globalsignmap[i] = (char *)typeName; | |
3244 globalsignmapused = i + 1; | |
3245 } | |
3246 | |
3247 /* check local map; should *not* be found! */ | |
3248 for (j = 0; j < buf->signmapused; j++) | |
3249 if (buf->signmap[j] == i + 1) | |
3250 return; | |
3251 | |
3252 /* add to local map */ | |
3253 if (buf->signmapused == buf->signmaplen) | |
3254 { | |
3255 if (buf->signmaplen == 0) /* first allocation */ | |
3256 { | |
3257 buf->signmaplen = 5; | |
2445
04dae202d316
Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents:
2278
diff
changeset
|
3258 buf->signmap = (int *)alloc_clear(buf->signmaplen * sizeof(int)); |
7 | 3259 } |
3260 else /* grow it */ | |
3261 { | |
3262 int incr; | |
3263 int oldlen = buf->signmaplen; | |
6596 | 3264 int *t_signmap = buf->signmap; |
2445
04dae202d316
Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents:
2278
diff
changeset
|
3265 |
7 | 3266 buf->signmaplen *= 2; |
3267 incr = buf->signmaplen - oldlen; | |
3268 buf->signmap = (int *)vim_realloc(buf->signmap, | |
2445
04dae202d316
Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents:
2278
diff
changeset
|
3269 buf->signmaplen * sizeof(int)); |
6596 | 3270 if (buf->signmap == NULL) |
3271 { | |
3272 vim_free(t_signmap); | |
3273 buf->signmaplen = 0; | |
3274 return; | |
3275 } | |
2445
04dae202d316
Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents:
2278
diff
changeset
|
3276 vim_memset(buf->signmap + oldlen, 0, incr * sizeof(int)); |
7 | 3277 } |
3278 } | |
3279 | |
3280 buf->signmap[buf->signmapused++] = i + 1; | |
3281 | |
3282 } | |
3283 | |
3284 | |
3285 /* | |
3286 * See if we have the requested sign type in the buffer. | |
3287 */ | |
3288 static int | |
3289 mapsigntype(nbbuf_T *buf, int localsigntype) | |
3290 { | |
3291 if (--localsigntype >= 0 && localsigntype < buf->signmapused) | |
3292 return buf->signmap[localsigntype]; | |
3293 | |
3294 return 0; | |
3295 } | |
3296 | |
3297 | |
3298 /* | |
3299 * Compute length of buffer, don't print anything. | |
3300 */ | |
3301 static long | |
3302 get_buf_size(buf_T *bufp) | |
3303 { | |
3304 linenr_T lnum; | |
3305 long char_count = 0; | |
3306 int eol_size; | |
3307 long last_check = 100000L; | |
3308 | |
3309 if (bufp->b_ml.ml_flags & ML_EMPTY) | |
3310 return 0; | |
3311 else | |
3312 { | |
3313 if (get_fileformat(bufp) == EOL_DOS) | |
3314 eol_size = 2; | |
3315 else | |
3316 eol_size = 1; | |
3317 for (lnum = 1; lnum <= bufp->b_ml.ml_line_count; ++lnum) | |
3318 { | |
1956 | 3319 char_count += (long)STRLEN(ml_get_buf(bufp, lnum, FALSE)) |
3320 + eol_size; | |
7 | 3321 /* Check for a CTRL-C every 100000 characters */ |
3322 if (char_count > last_check) | |
3323 { | |
3324 ui_breakcheck(); | |
3325 if (got_int) | |
3326 return char_count; | |
3327 last_check = char_count + 100000L; | |
3328 } | |
3329 } | |
3330 /* Correction for when last line doesn't have an EOL. */ | |
6933 | 3331 if (!bufp->b_p_eol && (bufp->b_p_bin || !bufp->b_p_fixeol)) |
7 | 3332 char_count -= eol_size; |
3333 } | |
3334 | |
3335 return char_count; | |
3336 } | |
3337 | |
3338 /* | |
3339 * Convert character offset to lnum,col | |
3340 */ | |
3341 static pos_T * | |
3342 off2pos(buf_T *buf, long offset) | |
3343 { | |
3344 linenr_T lnum; | |
3345 static pos_T pos; | |
3346 | |
3347 pos.lnum = 0; | |
3348 pos.col = 0; | |
3349 #ifdef FEAT_VIRTUALEDIT | |
3350 pos.coladd = 0; | |
3351 #endif | |
3352 | |
3353 if (!(buf->b_ml.ml_flags & ML_EMPTY)) | |
3354 { | |
3355 if ((lnum = ml_find_line_or_offset(buf, (linenr_T)0, &offset)) < 0) | |
3356 return NULL; | |
3357 pos.lnum = lnum; | |
3358 pos.col = offset; | |
3359 } | |
3360 | |
3361 return &pos; | |
3362 } | |
3363 | |
3364 /* | |
3365 * Convert an argument in the form "1234" to an offset and compute the | |
3366 * lnum/col from it. Convert an argument in the form "123/12" directly to a | |
3367 * lnum/col. | |
3368 * "argp" is advanced to after the argument. | |
3369 * Return a pointer to the position, NULL if something is wrong. | |
3370 */ | |
3371 static pos_T * | |
3372 get_off_or_lnum(buf_T *buf, char_u **argp) | |
3373 { | |
3374 static pos_T mypos; | |
3375 long off; | |
3376 | |
3377 off = strtol((char *)*argp, (char **)argp, 10); | |
3378 if (**argp == '/') | |
3379 { | |
3380 mypos.lnum = (linenr_T)off; | |
3381 ++*argp; | |
3382 mypos.col = strtol((char *)*argp, (char **)argp, 10); | |
3383 #ifdef FEAT_VIRTUALEDIT | |
3384 mypos.coladd = 0; | |
3385 #endif | |
3386 return &mypos; | |
3387 } | |
3388 return off2pos(buf, off); | |
3389 } | |
3390 | |
3391 | |
3392 /* | |
667 | 3393 * Convert (lnum,col) to byte offset in the file. |
7 | 3394 */ |
3395 static long | |
3396 pos2off(buf_T *buf, pos_T *pos) | |
3397 { | |
3398 long offset = 0; | |
3399 | |
3400 if (!(buf->b_ml.ml_flags & ML_EMPTY)) | |
3401 { | |
3402 if ((offset = ml_find_line_or_offset(buf, pos->lnum, 0)) < 0) | |
3403 return 0; | |
3404 offset += pos->col; | |
3405 } | |
3406 | |
3407 return offset; | |
3408 } | |
3409 | |
3410 | |
33 | 3411 /* |
10226
7a4fb555c83a
commit https://github.com/vim/vim/commit/9af418427652562384744648d7d173a4bfebba95
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
3412 * This message is printed after NetBeans opens a new file. It's |
33 | 3413 * similar to the message readfile() uses, but since NetBeans |
3414 * doesn't normally call readfile, we do our own. | |
3415 */ | |
3416 static void | |
7829
2a8d6b2dd925
commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents:
7803
diff
changeset
|
3417 print_read_msg(nbbuf_T *buf) |
33 | 3418 { |
3419 int lnum = buf->bufp->b_ml.ml_line_count; | |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9375
diff
changeset
|
3420 off_T nchars = buf->bufp->b_orig_size; |
33 | 3421 char_u c; |
3422 | |
3423 msg_add_fname(buf->bufp, buf->bufp->b_ffname); | |
3424 c = FALSE; | |
3425 | |
3426 if (buf->bufp->b_p_ro) | |
3427 { | |
3428 STRCAT(IObuff, shortmess(SHM_RO) ? _("[RO]") : _("[readonly]")); | |
3429 c = TRUE; | |
3430 } | |
3431 if (!buf->bufp->b_start_eol) | |
3432 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3433 STRCAT(IObuff, shortmess(SHM_LAST) ? _("[noeol]") |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3434 : _("[Incomplete last line]")); |
33 | 3435 c = TRUE; |
3436 } | |
3437 msg_add_lines(c, (long)lnum, nchars); | |
3438 | |
3439 /* Now display it */ | |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13170
diff
changeset
|
3440 VIM_CLEAR(keep_msg); |
33 | 3441 msg_scrolled_ign = TRUE; |
3442 msg_trunc_attr(IObuff, FALSE, 0); | |
3443 msg_scrolled_ign = FALSE; | |
3444 } | |
3445 | |
3446 | |
3447 /* | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3448 * Print a message after NetBeans writes the file. This message should be |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3449 * identical to the standard message a non-netbeans user would see when |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3450 * writing a file. |
33 | 3451 */ |
3452 static void | |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9375
diff
changeset
|
3453 print_save_msg(nbbuf_T *buf, off_T nchars) |
33 | 3454 { |
3455 char_u c; | |
3456 char_u *p; | |
3457 | |
3458 if (nchars >= 0) | |
3459 { | |
2209
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3460 /* put fname in IObuff with quotes */ |
d0ddf7ba1630
Included the patch to support netbeans in a terminal.
Bram Moolenaar <bram@vim.org>
parents:
2199
diff
changeset
|
3461 msg_add_fname(buf->bufp, buf->bufp->b_ffname); |
33 | 3462 c = FALSE; |
3463 | |
3464 msg_add_lines(c, buf->bufp->b_ml.ml_line_count, | |
2241
60da25e3aab7
Correct use of long instead of off_t for file size. (James Vega)
Bram Moolenaar <bram@vim.org>
parents:
2215
diff
changeset
|
3465 buf->bufp->b_orig_size); |
33 | 3466 |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13170
diff
changeset
|
3467 VIM_CLEAR(keep_msg); |
33 | 3468 msg_scrolled_ign = TRUE; |
3469 p = msg_trunc_attr(IObuff, FALSE, 0); | |
3470 if ((msg_scrolled && !need_wait_return) || !buf->initDone) | |
3471 { | |
3472 /* Need to repeat the message after redrawing when: | |
3473 * - When reading from stdin (the screen will be cleared next). | |
3474 * - When restart_edit is set (otherwise there will be a delay | |
3475 * before redrawing). | |
3476 * - When the screen was scrolled but there is no wait-return | |
3477 * prompt. */ | |
678 | 3478 set_keep_msg(p, 0); |
33 | 3479 } |
3480 msg_scrolled_ign = FALSE; | |
3481 /* add_to_input_buf((char_u *)"\f", 1); */ | |
3482 } | |
3483 else | |
3484 { | |
2768 | 3485 char_u msgbuf[IOSIZE]; |
3486 | |
3487 vim_snprintf((char *)msgbuf, IOSIZE, | |
3488 _("E505: %s is read-only (add ! to override)"), IObuff); | |
3489 nbdebug((" %s\n", msgbuf)); | |
3490 emsg(msgbuf); | |
33 | 3491 } |
3492 } | |
3493 | |
7 | 3494 #endif /* defined(FEAT_NETBEANS_INTG) */ |