aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1994-04-04 00:44:27 +0000
committerRichard M. Stallman1994-04-04 00:44:27 +0000
commit853cf34623affd852129ad834015a91a16982ded (patch)
tree9c7f17c6430b984ae9712e10e277ff7e27dcb127 /src
parent514e46817a2d71dad0d599248ed2f053392f9c8d (diff)
downloademacs-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.c39
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