Commit | Line | Data |
---|---|---|
1d490896 JB |
1 | READLINE PATCH REPORT |
2 | ===================== | |
3 | ||
4 | Readline-Release: 6.0 | |
5 | Patch-ID: readline60-001 | |
6 | ||
7 | Bug-Reported-by: Nicolai Lissner <nlissne@linux01.org> | |
8 | Bug-Reference-ID: <20090412020510.GA29658@lilith> | |
9 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00104.html | |
10 | ||
11 | Bug-Description: | |
12 | ||
13 | If a SIGWINCH arrives while bash is performing redisplay, multi-line prompts | |
14 | are displayed incorrectly due to the display code being called recursively. | |
15 | ||
16 | Patch: | |
17 | ||
18 | *** ../readline-6.0/readline.h 2009-01-04 14:32:33.000000000 -0500 | |
19 | --- readline.h 2009-04-13 08:47:00.000000000 -0400 | |
20 | *************** | |
21 | *** 815,820 **** | |
22 | #define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */ | |
23 | #define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */ | |
24 | ||
25 | ! #define RL_STATE_DONE 0x800000 /* done; accepted line */ | |
26 | ||
27 | #define RL_SETSTATE(x) (rl_readline_state |= (x)) | |
28 | --- 815,821 ---- | |
29 | #define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */ | |
30 | #define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */ | |
31 | + #define RL_STATE_REDISPLAYING 0x800000 /* updating terminal display */ | |
32 | ||
33 | ! #define RL_STATE_DONE 0x1000000 /* done; accepted line */ | |
34 | ||
35 | #define RL_SETSTATE(x) (rl_readline_state |= (x)) | |
36 | *** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500 | |
37 | --- display.c 2009-04-13 08:29:54.000000000 -0400 | |
38 | *************** | |
39 | *** 513,516 **** | |
40 | --- 513,517 ---- | |
41 | data structures. */ | |
42 | _rl_block_sigint (); | |
43 | + RL_SETSTATE (RL_STATE_REDISPLAYING); | |
44 | ||
45 | if (!rl_display_prompt) | |
46 | *************** | |
47 | *** 1237,1240 **** | |
48 | --- 1238,1242 ---- | |
49 | } | |
50 | ||
51 | + RL_UNSETSTATE (RL_STATE_REDISPLAYING); | |
52 | _rl_release_sigint (); | |
53 | } | |
54 | *** ../readline-6.0/terminal.c 2009-01-04 14:32:34.000000000 -0500 | |
55 | --- terminal.c 2009-04-13 08:43:00.000000000 -0400 | |
56 | *************** | |
57 | *** 356,360 **** | |
58 | if (CUSTOM_REDISPLAY_FUNC ()) | |
59 | rl_forced_update_display (); | |
60 | ! else | |
61 | _rl_redisplay_after_sigwinch (); | |
62 | } | |
63 | --- 356,360 ---- | |
64 | if (CUSTOM_REDISPLAY_FUNC ()) | |
65 | rl_forced_update_display (); | |
66 | ! else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0) | |
67 | _rl_redisplay_after_sigwinch (); | |
68 | } | |
69 | *** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500 | |
70 | --- patchlevel 2009-05-09 12:01:06.000000000 -0400 | |
71 | *************** | |
72 | *** 1,3 **** | |
73 | # Do not edit -- exists only for use by patch | |
74 | ||
75 | ! 0 | |
76 | --- 1,3 ---- | |
77 | # Do not edit -- exists only for use by patch | |
78 | ||
79 | ! 1 | |
80 | READLINE PATCH REPORT | |
81 | ===================== | |
82 | ||
83 | Readline-Release: 6.0 | |
84 | Patch-ID: readline60-002 | |
85 | ||
86 | Bug-Reported-by: Matt Zyzik <matt.zyzik@nyu.edu> | |
87 | Bug-Reference-ID: <20090319015542.696F62B8E8@ice.filescope.com> | |
88 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00149.html | |
89 | ||
90 | Bug-Description: | |
91 | ||
92 | When not in a locale supporting multibyte characters, readline will occasionally | |
93 | not erase characters between the cursor position and the end of the line | |
94 | when killing text backwards. | |
95 | ||
96 | Patch: | |
97 | ||
98 | *** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500 | |
99 | --- display.c 2009-04-14 14:00:18.000000000 -0400 | |
100 | *************** | |
101 | *** 1775,1779 **** | |
102 | adjust col_lendiff based on the difference between _rl_last_c_pos | |
103 | and _rl_screenwidth */ | |
104 | ! if (col_lendiff && (_rl_last_c_pos < _rl_screenwidth)) | |
105 | #endif | |
106 | { | |
107 | --- 1775,1779 ---- | |
108 | adjust col_lendiff based on the difference between _rl_last_c_pos | |
109 | and _rl_screenwidth */ | |
110 | ! if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth))) | |
111 | #endif | |
112 | { | |
113 | *** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500 | |
114 | --- patchlevel 2009-05-09 12:01:06.000000000 -0400 | |
115 | *************** | |
116 | *** 1,3 **** | |
117 | # Do not edit -- exists only for use by patch | |
118 | ||
119 | ! 1 | |
120 | --- 1,3 ---- | |
121 | # Do not edit -- exists only for use by patch | |
122 | ||
123 | ! 2 | |
124 | READLINE PATCH REPORT | |
125 | ===================== | |
126 | ||
127 | Readline-Release: 6.0 | |
128 | Patch-ID: readline60-003 | |
129 | ||
130 | Bug-Reported-by: Andreas Schwab <schwab@linux-m68k.org> | |
131 | Bug-Reference-ID: <m21vrhhx08.fsf@igel.home> | |
132 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-04/msg00160.html | |
133 | ||
134 | Bug-Description: | |
135 | ||
136 | If the prompt length exactly matches the screen width, and the prompt ends | |
137 | with invisible characters, readline positions the cursor incorrectly. | |
138 | ||
139 | Patch: | |
140 | ||
141 | *** ../readline-6.0/display.c 2009-01-04 14:32:32.000000000 -0500 | |
142 | --- display.c 2009-04-25 21:42:18.000000000 -0400 | |
143 | *************** | |
144 | *** 1895,1898 **** | |
145 | --- 1897,1904 ---- | |
146 | woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); | |
147 | cpos = _rl_last_c_pos; | |
148 | + | |
149 | + if (cpos == 0 && cpos == new) | |
150 | + return; | |
151 | + | |
152 | #if defined (HANDLE_MULTIBYTE) | |
153 | /* If we have multibyte characters, NEW is indexed by the buffer point in | |
154 | *************** | |
155 | *** 1908,1914 **** | |
156 | desired display position. */ | |
157 | if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ | |
158 | ! (prompt_physical_chars > _rl_screenwidth && | |
159 | _rl_last_v_pos == prompt_last_screen_line && | |
160 | ! wrap_offset >= woff && | |
161 | new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset))) | |
162 | /* XXX last comparison might need to be >= */ | |
163 | --- 1914,1920 ---- | |
164 | desired display position. */ | |
165 | if ((new > prompt_last_invisible) || /* XXX - don't use woff here */ | |
166 | ! (prompt_physical_chars >= _rl_screenwidth && | |
167 | _rl_last_v_pos == prompt_last_screen_line && | |
168 | ! wrap_offset >= woff && dpos >= woff && | |
169 | new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset))) | |
170 | /* XXX last comparison might need to be >= */ | |
171 | *** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500 | |
172 | --- patchlevel 2009-05-09 12:01:06.000000000 -0400 | |
173 | *************** | |
174 | *** 1,3 **** | |
175 | # Do not edit -- exists only for use by patch | |
176 | ||
177 | ! 2 | |
178 | --- 1,3 ---- | |
179 | # Do not edit -- exists only for use by patch | |
180 | ||
181 | ! 3 | |
182 | READLINE PATCH REPORT | |
183 | ===================== | |
184 | ||
185 | Readline-Release: 6.0 | |
186 | Patch-ID: readline60-004 | |
187 | ||
188 | Bug-Reported-by: jim@jim.sh | |
189 | Bug-Reference-ID: <200905262140.n4QLeO4X030664@psychosis.jim.sh> | |
190 | Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-05/msg00074.html | |
191 | ||
192 | Bug-Description: | |
193 | ||
194 | There are occasional cursor positioning errors when using readline's | |
195 | horizontal scroll mode. | |
196 | ||
197 | Patch: | |
198 | ||
199 | *** ../readline-6.0-patched/display.c 2009-05-22 12:32:25.000000000 -0400 | |
200 | --- display.c 2009-05-29 23:32:20.000000000 -0400 | |
201 | *************** | |
202 | *** 1190,1196 **** | |
203 | line[t - 1] = '>'; | |
204 | ||
205 | ! if (!rl_display_fixed || forced_display || lmargin != last_lmargin) | |
206 | { | |
207 | forced_display = 0; | |
208 | update_line (&visible_line[last_lmargin], | |
209 | &invisible_line[lmargin], | |
210 | --- 1192,1200 ---- | |
211 | line[t - 1] = '>'; | |
212 | ||
213 | ! if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin) | |
214 | { | |
215 | forced_display = 0; | |
216 | + o_cpos = _rl_last_c_pos; | |
217 | + cpos_adjusted = 0; | |
218 | update_line (&visible_line[last_lmargin], | |
219 | &invisible_line[lmargin], | |
220 | *************** | |
221 | *** 1200,1203 **** | |
222 | --- 1204,1214 ---- | |
223 | 0); | |
224 | ||
225 | + if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && | |
226 | + cpos_adjusted == 0 && | |
227 | + _rl_last_c_pos != o_cpos && | |
228 | + _rl_last_c_pos > wrap_offset && | |
229 | + o_cpos < prompt_last_invisible) | |
230 | + _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ | |
231 | + | |
232 | /* If the visible new line is shorter than the old, but the number | |
233 | of invisible characters is greater, and we are at the end of | |
234 | *** ../readline-6.0/patchlevel 2008-11-18 11:01:14.000000000 -0500 | |
235 | --- patchlevel 2009-05-09 12:01:06.000000000 -0400 | |
236 | *************** | |
237 | *** 1,3 **** | |
238 | # Do not edit -- exists only for use by patch | |
239 | ||
240 | ! 3 | |
241 | --- 1,3 ---- | |
242 | # Do not edit -- exists only for use by patch | |
243 | ||
244 | ! 4 |