diff options
| author | Richard M. Stallman | 1994-04-04 00:44:27 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-04-04 00:44:27 +0000 |
| commit | 853cf34623affd852129ad834015a91a16982ded (patch) | |
| tree | 9c7f17c6430b984ae9712e10e277ff7e27dcb127 /src | |
| parent | 514e46817a2d71dad0d599248ed2f053392f9c8d (diff) | |
| download | emacs-853cf34623affd852129ad834015a91a16982ded.tar.gz emacs-853cf34623affd852129ad834015a91a16982ded.zip | |
(display_text_line): Properly handle charstarts for hscroll,
and for continuation in mid character.
(message2): Call frame_up_to_date_hook.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xdisp.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index a00b5293619..f626bc83a48 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -237,6 +237,8 @@ message2 (m, len) | |||
| 237 | echo_area_display (); | 237 | echo_area_display (); |
| 238 | update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1); | 238 | update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1); |
| 239 | do_pending_window_change (); | 239 | do_pending_window_change (); |
| 240 | if (frame_up_to_date_hook != 0 && ! gc_in_progress) | ||
| 241 | (*frame_up_to_date_hook) (XFRAME (XWINDOW (minibuf_window)->frame)); | ||
| 240 | } | 242 | } |
| 241 | } | 243 | } |
| 242 | 244 | ||
| @@ -2092,7 +2094,8 @@ display_text_line (w, start, vpos, hpos, taboffset) | |||
| 2092 | { | 2094 | { |
| 2093 | /* Record which glyph starts a character, | 2095 | /* Record which glyph starts a character, |
| 2094 | and the character position of that character. */ | 2096 | and the character position of that character. */ |
| 2095 | charstart[p1 - p1start] = pos; | 2097 | if (p1 >= p1start) |
| 2098 | charstart[p1 - p1start] = pos; | ||
| 2096 | 2099 | ||
| 2097 | if (p1 >= endp) | 2100 | if (p1 >= endp) |
| 2098 | break; | 2101 | break; |
| @@ -2280,19 +2283,31 @@ display_text_line (w, start, vpos, hpos, taboffset) | |||
| 2280 | p1++; | 2283 | p1++; |
| 2281 | } | 2284 | } |
| 2282 | 2285 | ||
| 2283 | /* For all the glyphs occupied by this character, except for the | 2286 | /* Do nothing here for a char that's entirely off the left edge. */ |
| 2284 | first, store -1 in charstarts. */ | 2287 | if (p1 >= p1start) |
| 2285 | if (p1 != p1prev) | ||
| 2286 | { | 2288 | { |
| 2287 | int *p2x = &charstart[p1prev - p1start] + 1; | 2289 | /* For all the glyphs occupied by this character, except for the |
| 2288 | int *p2 = &charstart[p1 - p1start]; | 2290 | first, store -1 in charstarts. */ |
| 2289 | while (p2x != p2) | 2291 | if (p1 != p1prev) |
| 2290 | *p2x++ = -1; | 2292 | { |
| 2293 | int *p2x = &charstart[p1prev - p1start]; | ||
| 2294 | int *p2 = &charstart[p1 - p1start]; | ||
| 2295 | |||
| 2296 | /* The window's left column should always | ||
| 2297 | contain a character position. | ||
| 2298 | And don't clobber anything to the left of that. */ | ||
| 2299 | if (p1prev < p1start) | ||
| 2300 | { | ||
| 2301 | charstart[0] = pos; | ||
| 2302 | p2x = charstart; | ||
| 2303 | } | ||
| 2304 | |||
| 2305 | /* This loop skips over the char p2x initially points to. */ | ||
| 2306 | while (++p2x != p2) | ||
| 2307 | *p2x = -1; | ||
| 2308 | } | ||
| 2291 | } | 2309 | } |
| 2292 | else | 2310 | |
| 2293 | /* If this character took up no space, | ||
| 2294 | erase all mention of it from charstart. */ | ||
| 2295 | charstart[p1 - p1start] = 0; | ||
| 2296 | pos++; | 2311 | pos++; |
| 2297 | } | 2312 | } |
| 2298 | 2313 | ||