]>
Commit | Line | Data |
---|---|---|
888cf725 | 1 | BASH PATCH REPORT |
2 | ================= | |
3 | ||
4 | Bash-Release: 2.05b | |
5 | Patch-ID: bash205b-006 | |
6 | ||
7 | Bug-Reported-by: clowenst@ucsd.edu | |
8 | Bug-Reference-ID: <156388ec.0212021151.51a48df1@posting.google.com> | |
9 | Bug-Reference-URL: | |
10 | ||
11 | Bug-Description: | |
12 | ||
13 | When running in a locale with multibyte characters, the readline display | |
14 | updater will use carriage returns when drawing the line, overwriting any | |
15 | partial output already on the screen and not terminated by a newline. | |
16 | ||
17 | Patch: | |
18 | ||
19 | *** ../bash-2.05b/lib/readline/display.c Tue Jun 4 10:54:47 2002 | |
20 | --- lib/readline/display.c Fri Sep 13 16:22:57 2002 | |
21 | *************** | |
22 | *** 71,75 **** | |
23 | ||
24 | #if defined (HANDLE_MULTIBYTE) | |
25 | ! static int _rl_col_width PARAMS((char *, int, int)); | |
26 | static int *_rl_wrapped_line; | |
27 | #else | |
28 | --- 71,75 ---- | |
29 | ||
30 | #if defined (HANDLE_MULTIBYTE) | |
31 | ! static int _rl_col_width PARAMS((const char *, int, int)); | |
32 | static int *_rl_wrapped_line; | |
33 | #else | |
34 | *************** | |
35 | *** 1349,1355 **** | |
36 | _rl_output_some_chars (nfd + lendiff, temp - lendiff); | |
37 | #if 0 | |
38 | - _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff) - col_lendiff; | |
39 | - #else | |
40 | _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); | |
41 | #endif | |
42 | } | |
43 | --- 1349,1355 ---- | |
44 | _rl_output_some_chars (nfd + lendiff, temp - lendiff); | |
45 | #if 0 | |
46 | _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff); | |
47 | + #else | |
48 | + _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff); | |
49 | #endif | |
50 | } | |
51 | *************** | |
52 | *** 1511,1516 **** | |
53 | /* If we have multibyte characters, NEW is indexed by the buffer point in | |
54 | a multibyte string, but _rl_last_c_pos is the display position. In | |
55 | ! this case, NEW's display position is not obvious. */ | |
56 | ! if ((MB_CUR_MAX == 1 || rl_byte_oriented ) && _rl_last_c_pos == new) return; | |
57 | #else | |
58 | if (_rl_last_c_pos == new) return; | |
59 | --- 1511,1523 ---- | |
60 | /* If we have multibyte characters, NEW is indexed by the buffer point in | |
61 | a multibyte string, but _rl_last_c_pos is the display position. In | |
62 | ! this case, NEW's display position is not obvious and must be | |
63 | ! calculated. */ | |
64 | ! if (MB_CUR_MAX == 1 || rl_byte_oriented) | |
65 | ! { | |
66 | ! if (_rl_last_c_pos == new) | |
67 | ! return; | |
68 | ! } | |
69 | ! else if (_rl_last_c_pos == _rl_col_width (data, 0, new)) | |
70 | ! return; | |
71 | #else | |
72 | if (_rl_last_c_pos == new) return; | |
73 | *************** | |
74 | *** 1595,1603 **** | |
75 | { | |
76 | if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
77 | ! { | |
78 | ! tputs (_rl_term_cr, 1, _rl_output_character_function); | |
79 | ! for (i = 0; i < new; i++) | |
80 | ! putc (data[i], rl_outstream); | |
81 | ! } | |
82 | else | |
83 | _rl_backspace (_rl_last_c_pos - new); | |
84 | --- 1602,1606 ---- | |
85 | { | |
86 | if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) | |
87 | ! _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new)); | |
88 | else | |
89 | _rl_backspace (_rl_last_c_pos - new); | |
90 | *************** | |
91 | *** 2118,2122 **** | |
92 | static int | |
93 | _rl_col_width (str, start, end) | |
94 | ! char *str; | |
95 | int start, end; | |
96 | { | |
97 | --- 2121,2125 ---- | |
98 | static int | |
99 | _rl_col_width (str, start, end) | |
100 | ! const char *str; | |
101 | int start, end; | |
102 | { | |
103 | *************** | |
104 | *** 2194,2196 **** | |
105 | } | |
106 | #endif /* HANDLE_MULTIBYTE */ | |
107 | - | |
108 | --- 2197,2198 ---- |