1 To: [email protected] |
|
2 Subject: Patch 7.2.334 |
|
3 Fcc: outbox |
|
4 From: Bram Moolenaar <[email protected]> |
|
5 Mime-Version: 1.0 |
|
6 Content-Type: text/plain; charset=UTF-8 |
|
7 Content-Transfer-Encoding: 8bit |
|
8 ------------ |
|
9 |
|
10 Patch 7.2.334 |
|
11 Problem: Postponing keys in Netbeans interface does not work properly. |
|
12 Solution: Store the key string instead of the number. Avoid an infinite |
|
13 loop. (Mostly by Xavier de Gaye) |
|
14 Files: src/netbeans.c, src/proto/netbeans.pro |
|
15 |
|
16 |
|
17 *** ../vim-7.2.333/src/netbeans.c 2010-01-19 14:59:14.000000000 +0100 |
|
18 --- src/netbeans.c 2010-01-19 15:12:17.000000000 +0100 |
|
19 *************** |
|
20 *** 70,76 **** |
|
21 static pos_T *off2pos __ARGS((buf_T *, long)); |
|
22 static pos_T *get_off_or_lnum __ARGS((buf_T *buf, char_u **argp)); |
|
23 static long get_buf_size __ARGS((buf_T *)); |
|
24 ! static void netbeans_keystring __ARGS((int key, char *keystr)); |
|
25 static void special_keys __ARGS((char_u *args)); |
|
26 |
|
27 static void netbeans_connect __ARGS((void)); |
|
28 --- 70,77 ---- |
|
29 static pos_T *off2pos __ARGS((buf_T *, long)); |
|
30 static pos_T *get_off_or_lnum __ARGS((buf_T *buf, char_u **argp)); |
|
31 static long get_buf_size __ARGS((buf_T *)); |
|
32 ! static int netbeans_keystring __ARGS((char_u *keystr)); |
|
33 ! static void postpone_keycommand __ARGS((char_u *keystr)); |
|
34 static void special_keys __ARGS((char_u *args)); |
|
35 |
|
36 static void netbeans_connect __ARGS((void)); |
|
37 *************** |
|
38 *** 502,508 **** |
|
39 |
|
40 struct keyqueue |
|
41 { |
|
42 ! int key; |
|
43 struct keyqueue *next; |
|
44 struct keyqueue *prev; |
|
45 }; |
|
46 --- 503,509 ---- |
|
47 |
|
48 struct keyqueue |
|
49 { |
|
50 ! char_u *keystr; |
|
51 struct keyqueue *next; |
|
52 struct keyqueue *prev; |
|
53 }; |
|
54 *************** |
|
55 *** 514,526 **** |
|
56 |
|
57 /* |
|
58 * Queue up key commands sent from netbeans. |
|
59 */ |
|
60 static void |
|
61 ! postpone_keycommand(int key) |
|
62 { |
|
63 keyQ_T *node; |
|
64 |
|
65 node = (keyQ_T *)alloc(sizeof(keyQ_T)); |
|
66 |
|
67 if (keyHead.next == NULL) /* initialize circular queue */ |
|
68 { |
|
69 --- 515,531 ---- |
|
70 |
|
71 /* |
|
72 * Queue up key commands sent from netbeans. |
|
73 + * We store the string, because it may depend on the global mod_mask and |
|
74 + * :nbkey doesn't have a key number. |
|
75 */ |
|
76 static void |
|
77 ! postpone_keycommand(char_u *keystr) |
|
78 { |
|
79 keyQ_T *node; |
|
80 |
|
81 node = (keyQ_T *)alloc(sizeof(keyQ_T)); |
|
82 + if (node == NULL) |
|
83 + return; /* out of memory, drop the key */ |
|
84 |
|
85 if (keyHead.next == NULL) /* initialize circular queue */ |
|
86 { |
|
87 *************** |
|
88 *** 534,540 **** |
|
89 keyHead.prev->next = node; |
|
90 keyHead.prev = node; |
|
91 |
|
92 ! node->key = key; |
|
93 } |
|
94 |
|
95 /* |
|
96 --- 539,545 ---- |
|
97 keyHead.prev->next = node; |
|
98 keyHead.prev = node; |
|
99 |
|
100 ! node->keystr = vim_strsave(keystr); |
|
101 } |
|
102 |
|
103 /* |
|
104 *************** |
|
105 *** 543,557 **** |
|
106 static void |
|
107 handle_key_queue(void) |
|
108 { |
|
109 ! while (keyHead.next && keyHead.next != &keyHead) |
|
110 { |
|
111 /* first, unlink the node */ |
|
112 keyQ_T *node = keyHead.next; |
|
113 keyHead.next = node->next; |
|
114 node->next->prev = node->prev; |
|
115 |
|
116 ! /* now, send the keycommand */ |
|
117 ! netbeans_keycommand(node->key); |
|
118 |
|
119 /* Finally, dispose of the node */ |
|
120 vim_free(node); |
|
121 --- 548,567 ---- |
|
122 static void |
|
123 handle_key_queue(void) |
|
124 { |
|
125 ! int postponed = FALSE; |
|
126 ! |
|
127 ! while (!postponed && keyHead.next && keyHead.next != &keyHead) |
|
128 { |
|
129 /* first, unlink the node */ |
|
130 keyQ_T *node = keyHead.next; |
|
131 keyHead.next = node->next; |
|
132 node->next->prev = node->prev; |
|
133 |
|
134 ! /* Now, send the keycommand. This may cause it to be postponed again |
|
135 ! * and change keyHead. */ |
|
136 ! if (node->keystr != NULL) |
|
137 ! postponed = !netbeans_keystring(node->keystr); |
|
138 ! vim_free(node->keystr); |
|
139 |
|
140 /* Finally, dispose of the node */ |
|
141 vim_free(node); |
|
142 *************** |
|
143 *** 2495,2501 **** |
|
144 } |
|
145 else |
|
146 { |
|
147 ! nbdebug((" Buffer has no changes!\n")); |
|
148 } |
|
149 /* =====================================================================*/ |
|
150 } |
|
151 --- 2505,2511 ---- |
|
152 } |
|
153 else |
|
154 { |
|
155 ! nbdebug((" Buffer has no changes!\n")); |
|
156 } |
|
157 /* =====================================================================*/ |
|
158 } |
|
159 *************** |
|
160 *** 2658,2664 **** |
|
161 ex_nbkey(eap) |
|
162 exarg_T *eap; |
|
163 { |
|
164 ! netbeans_keystring(0, (char *)eap->arg); |
|
165 } |
|
166 |
|
167 |
|
168 --- 2668,2674 ---- |
|
169 ex_nbkey(eap) |
|
170 exarg_T *eap; |
|
171 { |
|
172 ! (void)netbeans_keystring(eap->arg); |
|
173 } |
|
174 |
|
175 |
|
176 *************** |
|
177 *** 2680,2686 **** |
|
178 } |
|
179 |
|
180 /* |
|
181 ! * Convert key to netbeans name. |
|
182 */ |
|
183 static void |
|
184 netbeans_keyname(int key, char *buf) |
|
185 --- 2690,2696 ---- |
|
186 } |
|
187 |
|
188 /* |
|
189 ! * Convert key to netbeans name. This uses the global "mod_mask". |
|
190 */ |
|
191 static void |
|
192 netbeans_keyname(int key, char *buf) |
|
193 *************** |
|
194 *** 3127,3149 **** |
|
195 /* |
|
196 * Send a keypress event back to netbeans. This usually simulates some |
|
197 * kind of function key press. This function operates on a key code. |
|
198 */ |
|
199 ! void |
|
200 netbeans_keycommand(int key) |
|
201 { |
|
202 char keyName[60]; |
|
203 |
|
204 netbeans_keyname(key, keyName); |
|
205 ! netbeans_keystring(key, keyName); |
|
206 } |
|
207 |
|
208 |
|
209 /* |
|
210 * Send a keypress event back to netbeans. This usually simulates some |
|
211 * kind of function key press. This function operates on a key string. |
|
212 */ |
|
213 ! static void |
|
214 ! netbeans_keystring(int key, char *keyName) |
|
215 { |
|
216 char buf[2*MAXPATHL]; |
|
217 int bufno = nb_getbufno(curbuf); |
|
218 --- 3137,3163 ---- |
|
219 /* |
|
220 * Send a keypress event back to netbeans. This usually simulates some |
|
221 * kind of function key press. This function operates on a key code. |
|
222 + * Return TRUE when the key was sent, FALSE when the command has been |
|
223 + * postponed. |
|
224 */ |
|
225 ! int |
|
226 netbeans_keycommand(int key) |
|
227 { |
|
228 char keyName[60]; |
|
229 |
|
230 netbeans_keyname(key, keyName); |
|
231 ! return netbeans_keystring((char_u *)keyName); |
|
232 } |
|
233 |
|
234 |
|
235 /* |
|
236 * Send a keypress event back to netbeans. This usually simulates some |
|
237 * kind of function key press. This function operates on a key string. |
|
238 + * Return TRUE when the key was sent, FALSE when the command has been |
|
239 + * postponed. |
|
240 */ |
|
241 ! static int |
|
242 ! netbeans_keystring(char_u *keyName) |
|
243 { |
|
244 char buf[2*MAXPATHL]; |
|
245 int bufno = nb_getbufno(curbuf); |
|
246 *************** |
|
247 *** 3151,3157 **** |
|
248 char_u *q; |
|
249 |
|
250 if (!haveConnection) |
|
251 ! return; |
|
252 |
|
253 |
|
254 if (bufno == -1) |
|
255 --- 3165,3171 ---- |
|
256 char_u *q; |
|
257 |
|
258 if (!haveConnection) |
|
259 ! return TRUE; |
|
260 |
|
261 |
|
262 if (bufno == -1) |
|
263 *************** |
|
264 *** 3160,3166 **** |
|
265 q = curbuf->b_ffname == NULL ? (char_u *)"" |
|
266 : nb_quote(curbuf->b_ffname); |
|
267 if (q == NULL) |
|
268 ! return; |
|
269 vim_snprintf(buf, sizeof(buf), "0:fileOpened=%d \"%s\" %s %s\n", 0, |
|
270 q, |
|
271 "T", /* open in NetBeans */ |
|
272 --- 3174,3180 ---- |
|
273 q = curbuf->b_ffname == NULL ? (char_u *)"" |
|
274 : nb_quote(curbuf->b_ffname); |
|
275 if (q == NULL) |
|
276 ! return TRUE; |
|
277 vim_snprintf(buf, sizeof(buf), "0:fileOpened=%d \"%s\" %s %s\n", 0, |
|
278 q, |
|
279 "T", /* open in NetBeans */ |
|
280 *************** |
|
281 *** 3170,3178 **** |
|
282 nbdebug(("EVT: %s", buf)); |
|
283 nb_send(buf, "netbeans_keycommand"); |
|
284 |
|
285 ! if (key > 0) |
|
286 ! postpone_keycommand(key); |
|
287 ! return; |
|
288 } |
|
289 |
|
290 /* sync the cursor position */ |
|
291 --- 3184,3191 ---- |
|
292 nbdebug(("EVT: %s", buf)); |
|
293 nb_send(buf, "netbeans_keycommand"); |
|
294 |
|
295 ! postpone_keycommand(keyName); |
|
296 ! return FALSE; |
|
297 } |
|
298 |
|
299 /* sync the cursor position */ |
|
300 *************** |
|
301 *** 3198,3203 **** |
|
302 --- 3211,3217 ---- |
|
303 off, (long)curwin->w_cursor.lnum, (long)curwin->w_cursor.col); |
|
304 nbdebug(("EVT: %s", buf)); |
|
305 nb_send(buf, "netbeans_keycommand"); |
|
306 + return TRUE; |
|
307 } |
|
308 |
|
309 |
|
310 *** ../vim-7.2.333/src/proto/netbeans.pro 2009-01-06 16:13:42.000000000 +0100 |
|
311 --- src/proto/netbeans.pro 2010-01-19 13:31:01.000000000 +0100 |
|
312 *************** |
|
313 *** 16,22 **** |
|
314 void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); |
|
315 void netbeans_unmodified __ARGS((buf_T *bufp)); |
|
316 void netbeans_button_release __ARGS((int button)); |
|
317 ! void netbeans_keycommand __ARGS((int key)); |
|
318 void netbeans_save_buffer __ARGS((buf_T *bufp)); |
|
319 void netbeans_deleted_all_lines __ARGS((buf_T *bufp)); |
|
320 int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot)); |
|
321 --- 16,22 ---- |
|
322 void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); |
|
323 void netbeans_unmodified __ARGS((buf_T *bufp)); |
|
324 void netbeans_button_release __ARGS((int button)); |
|
325 ! int netbeans_keycommand __ARGS((int key)); |
|
326 void netbeans_save_buffer __ARGS((buf_T *bufp)); |
|
327 void netbeans_deleted_all_lines __ARGS((buf_T *bufp)); |
|
328 int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot)); |
|
329 *** ../vim-7.2.333/src/version.c 2010-01-19 14:59:14.000000000 +0100 |
|
330 --- src/version.c 2010-01-19 15:08:44.000000000 +0100 |
|
331 *************** |
|
332 *** 683,684 **** |
|
333 --- 683,686 ---- |
|
334 { /* Add new patch number below this line */ |
|
335 + /**/ |
|
336 + 334, |
|
337 /**/ |
|
338 |
|
339 -- |
|
340 hundred-and-one symptoms of being an internet addict: |
|
341 119. You are reading a book and look for the scroll bar to get to |
|
342 the next page. |
|
343 |
|
344 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\ |
|
345 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
|
346 \\\ download, build and distribute -- http://www.A-A-P.org /// |
|
347 \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |
|