Commit | Line | Data |
---|---|---|
6dca1d21 JB |
1 | READLINE PATCH REPORT |
2 | ===================== | |
3 | ||
4 | Readline-Release: 5.2 | |
5 | Patch-ID: readline52-001 | |
6 | ||
7 | Bug-Reported-by: ebb9@byu.net | |
8 | Bug-Reference-ID: <45540862.9030900@byu.net> | |
9 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00017.html | |
10 | http://lists.gnu.org/archive/html/bug-bash/2006-11/msg00016.html | |
11 | ||
12 | Bug-Description: | |
13 | ||
14 | In some cases, code that is intended to be used in the presence of multibyte | |
15 | characters is called when no such characters are present, leading to incorrect | |
16 | display position calculations and incorrect redisplay. | |
17 | ||
18 | Patch: | |
19 | ||
20 | *** ../readline-5.2/display.c Thu Sep 14 14:20:12 2006 | |
21 | --- display.c Mon Nov 13 17:55:57 2006 | |
22 | *************** | |
23 | *** 2381,2384 **** | |
24 | --- 2409,2414 ---- | |
25 | if (end <= start) | |
26 | return 0; | |
27 | + if (MB_CUR_MAX == 1 || rl_byte_oriented) | |
28 | + return (end - start); | |
29 | ||
30 | memset (&ps, 0, sizeof (mbstate_t)); | |
31 | ||
32 | READLINE PATCH REPORT | |
33 | ===================== | |
34 | ||
35 | Readline-Release: 5.2 | |
36 | Patch-ID: readline52-002 | |
37 | ||
38 | Bug-Reported-by: Magnus Svensson <msvensson@mysql.com> | |
39 | Bug-Reference-ID: <45BDC44D.80609@mysql.com> | |
40 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html | |
41 | ||
42 | Bug-Description: | |
43 | ||
44 | Readline neglects to reallocate the array it uses to keep track of wrapped | |
45 | screen lines when increasing its size. This will eventually result in | |
46 | segmentation faults when given sufficiently long input. | |
47 | ||
48 | Patch: | |
49 | ||
50 | *** ../readline-5.2-patched/display.c Thu Sep 14 14:20:12 2006 | |
51 | --- display.c Fri Feb 2 20:23:17 2007 | |
52 | *************** | |
53 | *** 561,574 **** | |
54 | --- 561,586 ---- | |
55 | wrap_offset = prompt_invis_chars_first_line = 0; | |
56 | } | |
57 | ||
58 | + #if defined (HANDLE_MULTIBYTE) | |
59 | #define CHECK_INV_LBREAKS() \ | |
60 | do { \ | |
61 | if (newlines >= (inv_lbsize - 2)) \ | |
62 | { \ | |
63 | inv_lbsize *= 2; \ | |
64 | inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ | |
65 | + _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \ | |
66 | } \ | |
67 | } while (0) | |
68 | + #else | |
69 | + #define CHECK_INV_LBREAKS() \ | |
70 | + do { \ | |
71 | + if (newlines >= (inv_lbsize - 2)) \ | |
72 | + { \ | |
73 | + inv_lbsize *= 2; \ | |
74 | + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ | |
75 | + } \ | |
76 | + } while (0) | |
77 | + #endif /* HANDLE_MULTIBYTE */ | |
78 | ||
79 | #if defined (HANDLE_MULTIBYTE) | |
80 | #define CHECK_LPOS() \ | |
81 | ||
82 | READLINE PATCH REPORT | |
83 | ===================== | |
84 | ||
85 | Readline-Release: 5.2 | |
86 | Patch-ID: readline52-003 | |
87 | ||
88 | Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru> | |
89 | Bug-Reference-ID: <1171795523.8021.18.camel@localhost> | |
90 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html | |
91 | ||
92 | Bug-Description: | |
93 | ||
94 | When moving the cursor, bash sometimes misplaces the cursor when the prompt | |
95 | contains two or more multibyte characters. The particular circumstance that | |
96 | uncovered the problem was having the (multibyte) current directory name in | |
97 | the prompt string. | |
98 | ||
99 | Patch: | |
100 | ||
101 | *** ../readline-5.2.2/display.c Fri Jan 19 13:34:50 2007 | |
102 | --- display.c Sat Mar 10 17:25:44 2007 | |
103 | *************** | |
104 | *** 1745,1749 **** | |
105 | { | |
106 | dpos = _rl_col_width (data, 0, new); | |
107 | ! if (dpos > prompt_last_invisible) /* XXX - don't use woff here */ | |
108 | { | |
109 | dpos -= woff; | |
110 | --- 1745,1752 ---- | |
111 | { | |
112 | dpos = _rl_col_width (data, 0, new); | |
113 | ! /* Use NEW when comparing against the last invisible character in the | |
114 | ! prompt string, since they're both buffer indices and DPOS is a | |
115 | ! desired display position. */ | |
116 | ! if (new > prompt_last_invisible) /* XXX - don't use woff here */ | |
117 | { | |
118 | dpos -= woff; | |
119 | ||
120 | READLINE PATCH REPORT | |
121 | ===================== | |
122 | ||
123 | Readline-Release: 5.2 | |
124 | Patch-ID: readline52-004 | |
125 | ||
126 | Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru> | |
127 | Bug-Reference-ID: <1173636022.7039.36.camel@localhost> | |
128 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html | |
129 | ||
130 | Bug-Description: | |
131 | ||
132 | When restoring the original prompt after finishing an incremental search, | |
133 | bash sometimes places the cursor incorrectly if the primary prompt contains | |
134 | invisible characters. | |
135 | ||
136 | Patch: | |
137 | ||
138 | *** ../readline-5.2.3/display.c Fri Apr 20 13:30:16 2007 | |
139 | --- display.c Fri Apr 20 15:17:01 2007 | |
140 | *************** | |
141 | *** 1599,1604 **** | |
142 | if (temp > 0) | |
143 | { | |
144 | _rl_output_some_chars (nfd, temp); | |
145 | ! _rl_last_c_pos += _rl_col_width (nfd, 0, temp);; | |
146 | } | |
147 | } | |
148 | --- 1599,1618 ---- | |
149 | if (temp > 0) | |
150 | { | |
151 | + /* If nfd begins at the prompt, or before the invisible | |
152 | + characters in the prompt, we need to adjust _rl_last_c_pos | |
153 | + in a multibyte locale to account for the wrap offset and | |
154 | + set cpos_adjusted accordingly. */ | |
155 | _rl_output_some_chars (nfd, temp); | |
156 | ! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
157 | ! { | |
158 | ! _rl_last_c_pos += _rl_col_width (nfd, 0, temp); | |
159 | ! if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) | |
160 | ! { | |
161 | ! _rl_last_c_pos -= wrap_offset; | |
162 | ! cpos_adjusted = 1; | |
163 | ! } | |
164 | ! } | |
165 | ! else | |
166 | ! _rl_last_c_pos += temp; | |
167 | } | |
168 | } | |
169 | *************** | |
170 | *** 1608,1613 **** | |
171 | --- 1622,1639 ---- | |
172 | if (temp > 0) | |
173 | { | |
174 | + /* If nfd begins at the prompt, or before the invisible | |
175 | + characters in the prompt, we need to adjust _rl_last_c_pos | |
176 | + in a multibyte locale to account for the wrap offset and | |
177 | + set cpos_adjusted accordingly. */ | |
178 | _rl_output_some_chars (nfd, temp); | |
179 | _rl_last_c_pos += col_temp; /* XXX */ | |
180 | + if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
181 | + { | |
182 | + if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) | |
183 | + { | |
184 | + _rl_last_c_pos -= wrap_offset; | |
185 | + cpos_adjusted = 1; | |
186 | + } | |
187 | + } | |
188 | } | |
189 | lendiff = (oe - old) - (ne - new); | |
190 | ||
191 | READLINE PATCH REPORT | |
192 | ===================== | |
193 | ||
194 | Readline-Release: 5.2 | |
195 | Patch-ID: readline52-005 | |
196 | ||
197 | Bug-Reported-by: Thomas Loeber <ifp@loeber1.de> | |
198 | Bug-Reference-ID: <200703082223.08919.ifp@loeber1.de> | |
199 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html | |
200 | ||
201 | Bug-Description: | |
202 | ||
203 | When rl_read_key returns -1, indicating that readline's controlling terminal | |
204 | has been invalidated for some reason (e.g., receiving a SIGHUP), the error | |
205 | status was not reported correctly to the caller. This could cause input | |
206 | loops. | |
207 | ||
208 | Patch: | |
209 | ||
210 | *** ../readline-5.2/complete.c Fri Jul 28 11:35:49 2006 | |
211 | --- complete.c Tue Mar 13 08:50:16 2007 | |
212 | *************** | |
213 | *** 429,433 **** | |
214 | if (c == 'n' || c == 'N' || c == RUBOUT) | |
215 | return (0); | |
216 | ! if (c == ABORT_CHAR) | |
217 | _rl_abort_internal (); | |
218 | if (for_pager && (c == NEWLINE || c == RETURN)) | |
219 | --- 440,444 ---- | |
220 | if (c == 'n' || c == 'N' || c == RUBOUT) | |
221 | return (0); | |
222 | ! if (c == ABORT_CHAR || c < 0) | |
223 | _rl_abort_internal (); | |
224 | if (for_pager && (c == NEWLINE || c == RETURN)) | |
225 | *** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 | |
226 | --- input.c Wed May 2 16:07:59 2007 | |
227 | *************** | |
228 | *** 514,518 **** | |
229 | int size; | |
230 | { | |
231 | ! int mb_len = 0; | |
232 | size_t mbchar_bytes_length; | |
233 | wchar_t wc; | |
234 | --- 522,526 ---- | |
235 | int size; | |
236 | { | |
237 | ! int mb_len, c; | |
238 | size_t mbchar_bytes_length; | |
239 | wchar_t wc; | |
240 | *************** | |
241 | *** 521,531 **** | |
242 | memset(&ps, 0, sizeof (mbstate_t)); | |
243 | memset(&ps_back, 0, sizeof (mbstate_t)); | |
244 | ! | |
245 | while (mb_len < size) | |
246 | { | |
247 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
248 | ! mbchar[mb_len++] = rl_read_key (); | |
249 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
250 | ||
251 | mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); | |
252 | if (mbchar_bytes_length == (size_t)(-1)) | |
253 | --- 529,545 ---- | |
254 | memset(&ps, 0, sizeof (mbstate_t)); | |
255 | memset(&ps_back, 0, sizeof (mbstate_t)); | |
256 | ! | |
257 | ! mb_len = 0; | |
258 | while (mb_len < size) | |
259 | { | |
260 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
261 | ! c = rl_read_key (); | |
262 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
263 | ||
264 | + if (c < 0) | |
265 | + break; | |
266 | + | |
267 | + mbchar[mb_len++] = c; | |
268 | + | |
269 | mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); | |
270 | if (mbchar_bytes_length == (size_t)(-1)) | |
271 | *************** | |
272 | *** 565,569 **** | |
273 | c = first; | |
274 | memset (mb, 0, mlen); | |
275 | ! for (i = 0; i < mlen; i++) | |
276 | { | |
277 | mb[i] = (char)c; | |
278 | --- 579,583 ---- | |
279 | c = first; | |
280 | memset (mb, 0, mlen); | |
281 | ! for (i = 0; c >= 0 && i < mlen; i++) | |
282 | { | |
283 | mb[i] = (char)c; | |
284 | *** ../readline-5.2/isearch.c Mon Dec 26 17:18:53 2005 | |
285 | --- isearch.c Fri Mar 9 14:30:59 2007 | |
286 | *************** | |
287 | *** 328,333 **** | |
288 | ||
289 | f = (rl_command_func_t *)NULL; | |
290 | ! | |
291 | ! /* Translate the keys we do something with to opcodes. */ | |
292 | if (c >= 0 && _rl_keymap[c].type == ISFUNC) | |
293 | { | |
294 | --- 328,340 ---- | |
295 | ||
296 | f = (rl_command_func_t *)NULL; | |
297 | ! | |
298 | ! if (c < 0) | |
299 | ! { | |
300 | ! cxt->sflags |= SF_FAILED; | |
301 | ! cxt->history_pos = cxt->last_found_line; | |
302 | ! return -1; | |
303 | ! } | |
304 | ! | |
305 | ! /* Translate the keys we do something with to opcodes. */ | |
306 | if (c >= 0 && _rl_keymap[c].type == ISFUNC) | |
307 | { | |
308 | *** ../readline-5.2/misc.c Mon Dec 26 17:20:46 2005 | |
309 | --- misc.c Fri Mar 9 14:44:11 2007 | |
310 | *************** | |
311 | *** 147,150 **** | |
312 | --- 147,152 ---- | |
313 | rl_clear_message (); | |
314 | RL_UNSETSTATE(RL_STATE_NUMERICARG); | |
315 | + if (key < 0) | |
316 | + return -1; | |
317 | return (_rl_dispatch (key, _rl_keymap)); | |
318 | } | |
319 | *** ../readline-5.2/readline.c Wed Aug 16 15:00:36 2006 | |
320 | --- readline.c Fri Mar 9 14:47:24 2007 | |
321 | *************** | |
322 | *** 646,649 **** | |
323 | --- 669,677 ---- | |
324 | { | |
325 | nkey = _rl_subseq_getchar (cxt->okey); | |
326 | + if (nkey < 0) | |
327 | + { | |
328 | + _rl_abort_internal (); | |
329 | + return -1; | |
330 | + } | |
331 | r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); | |
332 | cxt->flags |= KSEQ_DISPATCHED; | |
333 | *** ../readline-5.2/text.c Fri Jul 28 11:55:27 2006 | |
334 | --- text.c Sun Mar 25 13:41:38 2007 | |
335 | *************** | |
336 | *** 858,861 **** | |
337 | --- 864,870 ---- | |
338 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
339 | ||
340 | + if (c < 0) | |
341 | + return -1; | |
342 | + | |
343 | #if defined (HANDLE_SIGNALS) | |
344 | if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) | |
345 | *************** | |
346 | *** 1521,1524 **** | |
347 | --- 1530,1536 ---- | |
348 | mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); | |
349 | ||
350 | + if (mb_len <= 0) | |
351 | + return -1; | |
352 | + | |
353 | if (count < 0) | |
354 | return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); | |
355 | *************** | |
356 | *** 1537,1540 **** | |
357 | --- 1549,1555 ---- | |
358 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
359 | ||
360 | + if (c < 0) | |
361 | + return -1; | |
362 | + | |
363 | if (count < 0) | |
364 | return (_rl_char_search_internal (-count, bdir, c)); | |
365 | *** ../readline-5.2/vi_mode.c Sat Jul 29 16:42:28 2006 | |
366 | --- vi_mode.c Fri Mar 9 15:02:11 2007 | |
367 | *************** | |
368 | *** 887,890 **** | |
369 | --- 887,897 ---- | |
370 | c = rl_read_key (); | |
371 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
372 | + | |
373 | + if (c < 0) | |
374 | + { | |
375 | + *nextkey = 0; | |
376 | + return -1; | |
377 | + } | |
378 | + | |
379 | *nextkey = c; | |
380 | ||
381 | *************** | |
382 | *** 903,906 **** | |
383 | --- 910,918 ---- | |
384 | c = rl_read_key (); /* real command */ | |
385 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
386 | + if (c < 0) | |
387 | + { | |
388 | + *nextkey = 0; | |
389 | + return -1; | |
390 | + } | |
391 | *nextkey = c; | |
392 | } | |
393 | *************** | |
394 | *** 1225,1236 **** | |
395 | _rl_callback_generic_arg *data; | |
396 | { | |
397 | #if defined (HANDLE_MULTIBYTE) | |
398 | ! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); | |
399 | #else | |
400 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
401 | ! _rl_vi_last_search_char = rl_read_key (); | |
402 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
403 | #endif | |
404 | ||
405 | _rl_callback_func = 0; | |
406 | _rl_want_redisplay = 1; | |
407 | --- 1243,1262 ---- | |
408 | _rl_callback_generic_arg *data; | |
409 | { | |
410 | + int c; | |
411 | #if defined (HANDLE_MULTIBYTE) | |
412 | ! c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); | |
413 | #else | |
414 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
415 | ! c = rl_read_key (); | |
416 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
417 | #endif | |
418 | ||
419 | + if (c <= 0) | |
420 | + return -1; | |
421 | + | |
422 | + #if !defined (HANDLE_MULTIBYTE) | |
423 | + _rl_vi_last_search_char = c; | |
424 | + #endif | |
425 | + | |
426 | _rl_callback_func = 0; | |
427 | _rl_want_redisplay = 1; | |
428 | *************** | |
429 | *** 1248,1251 **** | |
430 | --- 1274,1278 ---- | |
431 | int count, key; | |
432 | { | |
433 | + int c; | |
434 | #if defined (HANDLE_MULTIBYTE) | |
435 | static char *target; | |
436 | *************** | |
437 | *** 1294,1302 **** | |
438 | { | |
439 | #if defined (HANDLE_MULTIBYTE) | |
440 | ! _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); | |
441 | #else | |
442 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
443 | ! _rl_vi_last_search_char = rl_read_key (); | |
444 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
445 | #endif | |
446 | } | |
447 | --- 1321,1335 ---- | |
448 | { | |
449 | #if defined (HANDLE_MULTIBYTE) | |
450 | ! c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); | |
451 | ! if (c <= 0) | |
452 | ! return -1; | |
453 | ! _rl_vi_last_search_mblen = c; | |
454 | #else | |
455 | RL_SETSTATE(RL_STATE_MOREINPUT); | |
456 | ! c = rl_read_key (); | |
457 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
458 | + if (c < 0) | |
459 | + return -1; | |
460 | + _rl_vi_last_search_char = c; | |
461 | #endif | |
462 | } | |
463 | *************** | |
464 | *** 1468,1471 **** | |
465 | --- 1501,1507 ---- | |
466 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
467 | ||
468 | + if (c < 0) | |
469 | + return -1; | |
470 | + | |
471 | #if defined (HANDLE_MULTIBYTE) | |
472 | if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
473 | *************** | |
474 | *** 1486,1489 **** | |
475 | --- 1522,1528 ---- | |
476 | _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); | |
477 | ||
478 | + if (c < 0) | |
479 | + return -1; | |
480 | + | |
481 | _rl_callback_func = 0; | |
482 | _rl_want_redisplay = 1; | |
483 | *************** | |
484 | *** 1517,1520 **** | |
485 | --- 1556,1562 ---- | |
486 | _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); | |
487 | ||
488 | + if (c < 0) | |
489 | + return -1; | |
490 | + | |
491 | return (_rl_vi_change_char (count, c, mb)); | |
492 | } | |
493 | *************** | |
494 | *** 1651,1655 **** | |
495 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
496 | ||
497 | ! if (ch < 'a' || ch > 'z') | |
498 | { | |
499 | rl_ding (); | |
500 | --- 1693,1697 ---- | |
501 | RL_UNSETSTATE(RL_STATE_MOREINPUT); | |
502 | ||
503 | ! if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ | |
504 | { | |
505 | rl_ding (); | |
506 | *************** | |
507 | *** 1703,1707 **** | |
508 | return 0; | |
509 | } | |
510 | ! else if (ch < 'a' || ch > 'z') | |
511 | { | |
512 | rl_ding (); | |
513 | --- 1745,1749 ---- | |
514 | return 0; | |
515 | } | |
516 | ! else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ | |
517 | { | |
518 | rl_ding (); | |
519 | ||
520 | READLINE PATCH REPORT | |
521 | ===================== | |
522 | ||
523 | Readline-Release: 5.2 | |
524 | Patch-ID: readline52-006 | |
525 | ||
526 | Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru> | |
527 | Bug-Reference-ID: <1178376645.9063.25.camel@localhost> | |
528 | Bug-Reference-URL: http://bugs.gentoo.org/177095 | |
529 | ||
530 | Bug-Description: | |
531 | ||
532 | The readline display code miscalculated the screen position when performing | |
533 | a redisplay in which the new text occupies more screen space that the old, | |
534 | but takes fewer bytes to do so (e.g., when replacing a shorter string | |
535 | containing multibyte characters with a longer one containing only ASCII). | |
536 | ||
537 | Patch: | |
538 | ||
539 | *** ../readline-5.2/display.c Thu Apr 26 11:38:22 2007 | |
540 | --- display.c Thu Jul 12 23:10:10 2007 | |
541 | *************** | |
542 | *** 1519,1527 **** | |
543 | /* Non-zero if we're increasing the number of lines. */ | |
544 | int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; | |
545 | /* Sometimes it is cheaper to print the characters rather than | |
546 | use the terminal's capabilities. If we're growing the number | |
547 | of lines, make sure we actually cause the new line to wrap | |
548 | around on auto-wrapping terminals. */ | |
549 | ! if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) | |
550 | { | |
551 | /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and | |
552 | --- 1568,1596 ---- | |
553 | /* Non-zero if we're increasing the number of lines. */ | |
554 | int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; | |
555 | + /* If col_lendiff is > 0, implying that the new string takes up more | |
556 | + screen real estate than the old, but lendiff is < 0, meaning that it | |
557 | + takes fewer bytes, we need to just output the characters starting | |
558 | + from the first difference. These will overwrite what is on the | |
559 | + display, so there's no reason to do a smart update. This can really | |
560 | + only happen in a multibyte environment. */ | |
561 | + if (lendiff < 0) | |
562 | + { | |
563 | + _rl_output_some_chars (nfd, temp); | |
564 | + _rl_last_c_pos += _rl_col_width (nfd, 0, temp); | |
565 | + /* If nfd begins before any invisible characters in the prompt, | |
566 | + adjust _rl_last_c_pos to account for wrap_offset and set | |
567 | + cpos_adjusted to let the caller know. */ | |
568 | + if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) | |
569 | + { | |
570 | + _rl_last_c_pos -= wrap_offset; | |
571 | + cpos_adjusted = 1; | |
572 | + } | |
573 | + return; | |
574 | + } | |
575 | /* Sometimes it is cheaper to print the characters rather than | |
576 | use the terminal's capabilities. If we're growing the number | |
577 | of lines, make sure we actually cause the new line to wrap | |
578 | around on auto-wrapping terminals. */ | |
579 | ! else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) | |
580 | { | |
581 | /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and | |
582 | ||
583 | READLINE PATCH REPORT | |
584 | ===================== | |
585 | ||
586 | Readline-Release: 5.2 | |
587 | Patch-ID: readline52-007 | |
588 | ||
589 | Bug-Reported-by: Tom Bjorkholm <tom.bjorkholm@ericsson.com> | |
590 | Bug-Reference-ID: <AEA1A32F001C6B4F98614B5B80D7647D01C075E9@esealmw115.eemea.ericsson.se> | |
591 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html | |
592 | ||
593 | ||
594 | Bug-Description: | |
595 | ||
596 | An off-by-one error in readline's input buffering caused readline to drop | |
597 | each 511th character of buffered input (e.g., when pasting a large amount | |
598 | of data into a terminal window). | |
599 | ||
600 | Patch: | |
601 | ||
602 | *** ../readline-5.2/input.c Wed Aug 16 15:15:16 2006 | |
603 | --- input.c Tue Jul 17 09:24:21 2007 | |
604 | *************** | |
605 | *** 134,139 **** | |
606 | ||
607 | *key = ibuffer[pop_index++]; | |
608 | ! | |
609 | if (pop_index >= ibuffer_len) | |
610 | pop_index = 0; | |
611 | ||
612 | --- 134,142 ---- | |
613 | ||
614 | *key = ibuffer[pop_index++]; | |
615 | ! #if 0 | |
616 | if (pop_index >= ibuffer_len) | |
617 | + #else | |
618 | + if (pop_index > ibuffer_len) | |
619 | + #endif | |
620 | pop_index = 0; | |
621 | ||
622 | *************** | |
623 | *** 251,255 **** | |
624 | { | |
625 | k = (*rl_getc_function) (rl_instream); | |
626 | ! rl_stuff_char (k); | |
627 | if (k == NEWLINE || k == RETURN) | |
628 | break; | |
629 | --- 254,259 ---- | |
630 | { | |
631 | k = (*rl_getc_function) (rl_instream); | |
632 | ! if (rl_stuff_char (k) == 0) | |
633 | ! break; /* some problem; no more room */ | |
634 | if (k == NEWLINE || k == RETURN) | |
635 | break; | |
636 | *************** | |
637 | *** 374,378 **** | |
638 | --- 378,386 ---- | |
639 | } | |
640 | ibuffer[push_index++] = key; | |
641 | + #if 0 | |
642 | if (push_index >= ibuffer_len) | |
643 | + #else | |
644 | + if (push_index > ibuffer_len) | |
645 | + #endif | |
646 | push_index = 0; | |
647 | ||
648 | READLINE PATCH REPORT | |
649 | ===================== | |
650 | ||
651 | Readline-Release: 5.2 | |
652 | Patch-ID: readline52-008 | |
653 | ||
654 | Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de> | |
655 | Bug-Reference-ID: <4702ED8A.5000503@thequod.de> | |
656 | Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/119938 | |
657 | ||
658 | Bug-Description: | |
659 | ||
660 | When updating the display after displaying, for instance, a list of possible | |
661 | completions, readline will place the cursor at the wrong position if the | |
662 | prompt contains invisible characters and a newline. | |
663 | ||
664 | Patch: | |
665 | ||
666 | *** ../readline-5.2-patched/display.c Mon Aug 6 14:26:29 2007 | |
667 | --- display.c Wed Oct 10 22:43:58 2007 | |
668 | *************** | |
669 | *** 1049,1053 **** | |
670 | else | |
671 | tx = nleft; | |
672 | ! if (_rl_last_c_pos > tx) | |
673 | { | |
674 | _rl_backspace (_rl_last_c_pos - tx); /* XXX */ | |
675 | --- 1049,1053 ---- | |
676 | else | |
677 | tx = nleft; | |
678 | ! if (tx >= 0 && _rl_last_c_pos > tx) | |
679 | { | |
680 | _rl_backspace (_rl_last_c_pos - tx); /* XXX */ | |
681 | *************** | |
682 | *** 1205,1209 **** | |
683 | { | |
684 | register char *ofd, *ols, *oe, *nfd, *nls, *ne; | |
685 | ! int temp, lendiff, wsatend, od, nd; | |
686 | int current_invis_chars; | |
687 | int col_lendiff, col_temp; | |
688 | --- 1205,1209 ---- | |
689 | { | |
690 | register char *ofd, *ols, *oe, *nfd, *nls, *ne; | |
691 | ! int temp, lendiff, wsatend, od, nd, o_cpos; | |
692 | int current_invis_chars; | |
693 | int col_lendiff, col_temp; | |
694 | *************** | |
695 | *** 1466,1469 **** | |
696 | --- 1466,1471 ---- | |
697 | } | |
698 | ||
699 | + o_cpos = _rl_last_c_pos; | |
700 | + | |
701 | /* When this function returns, _rl_last_c_pos is correct, and an absolute | |
702 | cursor postion in multibyte mode, but a buffer index when not in a | |
703 | *************** | |
704 | *** 1475,1479 **** | |
705 | invisible characters in the prompt string. Let's see if setting this when | |
706 | we make sure we're at the end of the drawn prompt string works. */ | |
707 | ! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars) | |
708 | cpos_adjusted = 1; | |
709 | #endif | |
710 | --- 1477,1483 ---- | |
711 | invisible characters in the prompt string. Let's see if setting this when | |
712 | we make sure we're at the end of the drawn prompt string works. */ | |
713 | ! if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && | |
714 | ! (_rl_last_c_pos > 0 || o_cpos > 0) && | |
715 | ! _rl_last_c_pos == prompt_physical_chars) | |
716 | cpos_adjusted = 1; | |
717 | #endif | |
718 | ||
719 | READLINE PATCH REPORT | |
720 | ===================== | |
721 | ||
722 | Readline-Release: 5.2 | |
723 | Patch-ID: readline52-009 | |
724 | ||
725 | Bug-Reported-by: dAniel hAhler <ubuntu@thequod.de> | |
726 | Bug-Reference-ID: | |
727 | Bug-Reference-URL: | |
728 | ||
729 | Bug-Description: | |
730 | ||
731 | Under some circumstances, readline will incorrectly display a prompt string | |
732 | containing invisible characters after the final newline. | |
733 | ||
734 | Patch: | |
735 | ||
736 | *** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 | |
737 | --- display.c 2007-11-10 17:51:29.000000000 -0500 | |
738 | *************** | |
739 | *** 392,396 **** | |
740 | local_prompt = expand_prompt (p, &prompt_visible_length, | |
741 | &prompt_last_invisible, | |
742 | ! (int *)NULL, | |
743 | &prompt_physical_chars); | |
744 | c = *t; *t = '\0'; | |
745 | --- 420,424 ---- | |
746 | local_prompt = expand_prompt (p, &prompt_visible_length, | |
747 | &prompt_last_invisible, | |
748 | ! &prompt_invis_chars_first_line, | |
749 | &prompt_physical_chars); | |
750 | c = *t; *t = '\0'; | |
751 | *************** | |
752 | *** 399,403 **** | |
753 | local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, | |
754 | (int *)NULL, | |
755 | ! &prompt_invis_chars_first_line, | |
756 | (int *)NULL); | |
757 | *t = c; | |
758 | --- 427,431 ---- | |
759 | local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, | |
760 | (int *)NULL, | |
761 | ! (int *)NULL, | |
762 | (int *)NULL); | |
763 | *t = c; | |
764 | ||
765 | READLINE PATCH REPORT | |
766 | ===================== | |
767 | ||
768 | Readline-Release: 5.2 | |
769 | Patch-ID: readline52-010 | |
770 | ||
771 | Bug-Reported-by: Miroslav Lichvar <mlichvar@redhat.com> | |
772 | Bug-Reference-ID: Fri, 02 Nov 2007 14:07:45 +0100 | |
773 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-11/msg00000.html | |
774 | ||
775 | Bug-Description: | |
776 | ||
777 | In certain cases when outputting characters at the end of the line, | |
778 | e.g., when displaying the prompt string, readline positions the cursor | |
779 | incorrectly if the prompt string contains invisible characters and the | |
780 | text being drawn begins before the last invisible character in the line. | |
781 | ||
782 | Patch: | |
783 | ||
784 | *** ../readline-5.2-patched/display.c 2007-08-25 13:47:08.000000000 -0400 | |
785 | --- display.c 2007-11-10 17:51:29.000000000 -0500 | |
786 | *************** | |
787 | *** 1566,1574 **** | |
788 | else | |
789 | { | |
790 | - /* We have horizontal scrolling and we are not inserting at | |
791 | - the end. We have invisible characters in this line. This | |
792 | - is a dumb update. */ | |
793 | _rl_output_some_chars (nfd, temp); | |
794 | _rl_last_c_pos += col_temp; | |
795 | return; | |
796 | } | |
797 | --- 1619,1632 ---- | |
798 | else | |
799 | { | |
800 | _rl_output_some_chars (nfd, temp); | |
801 | _rl_last_c_pos += col_temp; | |
802 | + /* If nfd begins before any invisible characters in the prompt, | |
803 | + adjust _rl_last_c_pos to account for wrap_offset and set | |
804 | + cpos_adjusted to let the caller know. */ | |
805 | + if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible)) | |
806 | + { | |
807 | + _rl_last_c_pos -= wrap_offset; | |
808 | + cpos_adjusted = 1; | |
809 | + } | |
810 | return; | |
811 | } | |
812 | ||
813 | READLINE PATCH REPORT | |
814 | ===================== | |
815 | ||
816 | Readline-Release: 5.2 | |
817 | Patch-ID: readline52-011 | |
818 | ||
819 | Bug-Reported-by: Uwe Doering <gemini@geminix.org> | |
820 | Bug-Reference-ID: <46F3DD72.2090801@geminix.org> | |
821 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-09/msg00102.html | |
822 | ||
823 | Bug-Description: | |
824 | ||
825 | There is an off-by-one error in the code that buffers characters received | |
826 | very quickly in succession, causing characters to be dropped. | |
827 | ||
828 | Patch: | |
829 | ||
830 | *** ../readline-5.2-patched/input.c 2007-08-25 13:47:10.000000000 -0400 | |
831 | --- input.c 2007-10-12 22:55:25.000000000 -0400 | |
832 | *************** | |
833 | *** 155,159 **** | |
834 | pop_index--; | |
835 | if (pop_index < 0) | |
836 | ! pop_index = ibuffer_len - 1; | |
837 | ibuffer[pop_index] = key; | |
838 | return (1); | |
839 | --- 155,159 ---- | |
840 | pop_index--; | |
841 | if (pop_index < 0) | |
842 | ! pop_index = ibuffer_len; | |
843 | ibuffer[pop_index] = key; | |
844 | return (1); | |
845 | ||
846 | READLINE PATCH REPORT | |
847 | ===================== | |
848 | ||
849 | Readline-Release: 5.2 | |
850 | Patch-ID: readline52-012 | |
851 | ||
852 | Bug-Reported-by: Chet Ramey <chet.ramey@case.edu> | |
853 | Bug-Reference-ID: | |
854 | Bug-Reference-URL: | |
855 | ||
856 | Bug-Description: | |
857 | ||
858 | This updates the options required to create shared libraries on several | |
859 | systems, including Mac OS X 10.5 (darwin9.x), FreeBSD, NetBSD, OpenBSD, | |
860 | AIX, and HP/UX. | |
861 | ||
862 | Patch: | |
863 | ||
864 | *** ../readline-5.2-patched/support/shobj-conf 2006-04-11 09:15:43.000000000 -0400 | |
865 | --- support/shobj-conf 2007-12-06 23:46:41.000000000 -0500 | |
866 | *************** | |
867 | *** 11,15 **** | |
868 | # chet@po.cwru.edu | |
869 | ||
870 | ! # Copyright (C) 1996-2002 Free Software Foundation, Inc. | |
871 | # | |
872 | # This program is free software; you can redistribute it and/or modify | |
873 | --- 11,15 ---- | |
874 | # chet@po.cwru.edu | |
875 | ||
876 | ! # Copyright (C) 1996-2007 Free Software Foundation, Inc. | |
877 | # | |
878 | # This program is free software; you can redistribute it and/or modify | |
879 | *************** | |
880 | *** 115,119 **** | |
881 | ;; | |
882 | ||
883 | ! freebsd2* | netbsd*) | |
884 | SHOBJ_CFLAGS=-fpic | |
885 | SHOBJ_LD=ld | |
886 | --- 115,119 ---- | |
887 | ;; | |
888 | ||
889 | ! freebsd2*) | |
890 | SHOBJ_CFLAGS=-fpic | |
891 | SHOBJ_LD=ld | |
892 | *************** | |
893 | *** 126,130 **** | |
894 | # FreeBSD-3.x ELF | |
895 | freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) | |
896 | ! SHOBJ_CFLAGS=-fpic | |
897 | SHOBJ_LD='${CC}' | |
898 | ||
899 | --- 126,130 ---- | |
900 | # FreeBSD-3.x ELF | |
901 | freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*) | |
902 | ! SHOBJ_CFLAGS=-fPIC | |
903 | SHOBJ_LD='${CC}' | |
904 | ||
905 | *************** | |
906 | *** 143,147 **** | |
907 | ||
908 | # Darwin/MacOS X | |
909 | ! darwin8*) | |
910 | SHOBJ_STATUS=supported | |
911 | SHLIB_STATUS=supported | |
912 | --- 143,147 ---- | |
913 | ||
914 | # Darwin/MacOS X | |
915 | ! darwin[89]*) | |
916 | SHOBJ_STATUS=supported | |
917 | SHLIB_STATUS=supported | |
918 | *************** | |
919 | *** 154,158 **** | |
920 | SHLIB_LIBSUFF='dylib' | |
921 | ||
922 | ! SHOBJ_LDFLAGS='-undefined dynamic_lookup' | |
923 | SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' | |
924 | ||
925 | --- 154,158 ---- | |
926 | SHLIB_LIBSUFF='dylib' | |
927 | ||
928 | ! SHOBJ_LDFLAGS='-dynamiclib -dynamic -undefined dynamic_lookup -arch_only `/usr/bin/arch`' | |
929 | SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' | |
930 | ||
931 | *************** | |
932 | *** 172,176 **** | |
933 | ||
934 | case "${host_os}" in | |
935 | ! darwin[78]*) SHOBJ_LDFLAGS='' | |
936 | SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' | |
937 | ;; | |
938 | --- 172,176 ---- | |
939 | ||
940 | case "${host_os}" in | |
941 | ! darwin[789]*) SHOBJ_LDFLAGS='' | |
942 | SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' | |
943 | ;; | |
944 | *************** | |
945 | *** 183,187 **** | |
946 | ;; | |
947 | ||
948 | ! openbsd*) | |
949 | SHOBJ_CFLAGS=-fPIC | |
950 | SHOBJ_LD='${CC}' | |
951 | --- 183,187 ---- | |
952 | ;; | |
953 | ||
954 | ! openbsd*|netbsd*) | |
955 | SHOBJ_CFLAGS=-fPIC | |
956 | SHOBJ_LD='${CC}' | |
957 | *************** | |
958 | *** 248,252 **** | |
959 | ;; | |
960 | ||
961 | ! aix4.[2-9]*-*gcc*) # lightly tested by jik@cisco.com | |
962 | SHOBJ_CFLAGS=-fpic | |
963 | SHOBJ_LD='ld' | |
964 | --- 248,252 ---- | |
965 | ;; | |
966 | ||
967 | ! aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com | |
968 | SHOBJ_CFLAGS=-fpic | |
969 | SHOBJ_LD='ld' | |
970 | *************** | |
971 | *** 259,263 **** | |
972 | ;; | |
973 | ||
974 | ! aix4.[2-9]*) | |
975 | SHOBJ_CFLAGS=-K | |
976 | SHOBJ_LD='ld' | |
977 | --- 259,263 ---- | |
978 | ;; | |
979 | ||
980 | ! aix4.[2-9]*|aix[5-9].*) | |
981 | SHOBJ_CFLAGS=-K | |
982 | SHOBJ_LD='ld' | |
983 | *************** | |
984 | *** 330,334 **** | |
985 | # if you have problems linking here, moving the `-Wl,+h,$@' from | |
986 | # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work | |
987 | ! SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' | |
988 | ||
989 | SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' | |
990 | --- 330,334 ---- | |
991 | # if you have problems linking here, moving the `-Wl,+h,$@' from | |
992 | # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work | |
993 | ! SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' | |
994 | ||
995 | SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' | |
996 | ||
997 | READLINE PATCH REPORT | |
998 | ===================== | |
999 | ||
1000 | Readline-Release: 5.2 | |
1001 | Patch-ID: readline52-013 | |
1002 | ||
1003 | Bug-Reported-by: slinkp <stuff@slinkp.com> | |
1004 | Bug-Reference-ID: <da52a26a-9f38-4861-a918-14d3482b539d@c65g2000hsa.googlegroups.com> | |
1005 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2008-05/msg00085.html | |
1006 | ||
1007 | Bug-Description: | |
1008 | ||
1009 | The presence of invisible characters in a prompt longer than the screenwidth | |
1010 | with invisible characters on the first and last prompt lines caused readline | |
1011 | to place the cursor in the wrong physical location. | |
1012 | ||
1013 | Patch: | |
1014 | ||
1015 | *** ../readline-5.2-patched/display.c 2007-12-14 21:12:40.000000000 -0500 | |
1016 | --- display.c 2008-10-23 09:39:46.000000000 -0400 | |
1017 | *************** | |
1018 | *** 911,914 **** | |
1019 | --- 944,951 ---- | |
1020 | OFFSET (which has already been calculated above). */ | |
1021 | ||
1022 | + #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) | |
1023 | + #define WRAP_OFFSET(line, offset) ((line == 0) \ | |
1024 | + ? (offset ? INVIS_FIRST() : 0) \ | |
1025 | + : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) | |
1026 | #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) | |
1027 | #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) | |
1028 | *************** | |
1029 | *** 945,949 **** | |
1030 | _rl_last_c_pos > wrap_offset && | |
1031 | o_cpos < prompt_last_invisible) | |
1032 | ! _rl_last_c_pos -= wrap_offset; | |
1033 | ||
1034 | /* If this is the line with the prompt, we might need to | |
1035 | --- 982,992 ---- | |
1036 | _rl_last_c_pos > wrap_offset && | |
1037 | o_cpos < prompt_last_invisible) | |
1038 | ! _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ | |
1039 | ! else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && | |
1040 | ! (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && | |
1041 | ! cpos_adjusted == 0 && | |
1042 | ! _rl_last_c_pos != o_cpos && | |
1043 | ! _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) | |
1044 | ! _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); | |
1045 | ||
1046 | /* If this is the line with the prompt, we might need to | |
1047 | *************** | |
1048 | *** 1205,1209 **** | |
1049 | { | |
1050 | register char *ofd, *ols, *oe, *nfd, *nls, *ne; | |
1051 | ! int temp, lendiff, wsatend, od, nd, o_cpos; | |
1052 | int current_invis_chars; | |
1053 | int col_lendiff, col_temp; | |
1054 | --- 1264,1268 ---- | |
1055 | { | |
1056 | register char *ofd, *ols, *oe, *nfd, *nls, *ne; | |
1057 | ! int temp, lendiff, wsatend, od, nd, twidth, o_cpos; | |
1058 | int current_invis_chars; | |
1059 | int col_lendiff, col_temp; | |
1060 | *************** | |
1061 | *** 1221,1225 **** | |
1062 | temp = _rl_last_c_pos; | |
1063 | else | |
1064 | ! temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset); | |
1065 | if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode | |
1066 | && _rl_last_v_pos == current_line - 1) | |
1067 | --- 1280,1284 ---- | |
1068 | temp = _rl_last_c_pos; | |
1069 | else | |
1070 | ! temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); | |
1071 | if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode | |
1072 | && _rl_last_v_pos == current_line - 1) | |
1073 | *************** | |
1074 | *** 1587,1599 **** | |
1075 | { | |
1076 | _rl_output_some_chars (nfd + lendiff, temp - lendiff); | |
1077 | - #if 1 | |
1078 | /* XXX -- this bears closer inspection. Fixes a redisplay bug | |
1079 | reported against bash-3.0-alpha by Andreas Schwab involving | |
1080 | multibyte characters and prompt strings with invisible | |
1081 | characters, but was previously disabled. */ | |
1082 | ! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); | |
1083 | ! #else | |
1084 | ! _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); | |
1085 | ! #endif | |
1086 | } | |
1087 | } | |
1088 | --- 1648,1660 ---- | |
1089 | { | |
1090 | _rl_output_some_chars (nfd + lendiff, temp - lendiff); | |
1091 | /* XXX -- this bears closer inspection. Fixes a redisplay bug | |
1092 | reported against bash-3.0-alpha by Andreas Schwab involving | |
1093 | multibyte characters and prompt strings with invisible | |
1094 | characters, but was previously disabled. */ | |
1095 | ! if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
1096 | ! twidth = _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); | |
1097 | ! else | |
1098 | ! twidth = temp - lendiff; | |
1099 | ! _rl_last_c_pos += twidth; | |
1100 | } | |
1101 | } | |
1102 | *************** | |
1103 | *** 1789,1793 **** | |
1104 | int cpos, dpos; /* current and desired cursor positions */ | |
1105 | ||
1106 | ! woff = W_OFFSET (_rl_last_v_pos, wrap_offset); | |
1107 | cpos = _rl_last_c_pos; | |
1108 | #if defined (HANDLE_MULTIBYTE) | |
1109 | --- 1850,1854 ---- | |
1110 | int cpos, dpos; /* current and desired cursor positions */ | |
1111 | ||
1112 | ! woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); | |
1113 | cpos = _rl_last_c_pos; | |
1114 | #if defined (HANDLE_MULTIBYTE) | |
1115 | *************** | |
1116 | *** 1803,1807 **** | |
1117 | prompt string, since they're both buffer indices and DPOS is a | |
1118 | desired display position. */ | |
1119 | ! if (new > prompt_last_invisible) /* XXX - don't use woff here */ | |
1120 | { | |
1121 | dpos -= woff; | |
1122 | --- 1864,1872 ---- | |
1123 | prompt string, since they're both buffer indices and DPOS is a | |
1124 | desired display position. */ | |
1125 | ! if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ | |
1126 | ! (prompt_physical_chars > _rl_screenwidth && | |
1127 | ! _rl_last_v_pos == prompt_last_screen_line && | |
1128 | ! wrap_offset != woff && | |
1129 | ! new > (prompt_last_invisible-_rl_screenwidth-wrap_offset))) | |
1130 | { | |
1131 | dpos -= woff; |