# HG changeset patch # User Richard M. Stallman # Date 765420267 0 # Node ID a26e7181f36b6f6cd47261362e88aafd5420023c # Parent cb14d76e993c97d3d1045c55b7a5d958f1dccd0b (display_text_line): Properly handle charstarts for hscroll, and for continuation in mid character. (message2): Call frame_up_to_date_hook. diff -r cb14d76e993c -r a26e7181f36b src/xdisp.c --- a/src/xdisp.c Mon Apr 04 00:43:13 1994 +0000 +++ b/src/xdisp.c Mon Apr 04 00:44:27 1994 +0000 @@ -237,6 +237,8 @@ echo_area_display (); update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1); do_pending_window_change (); + if (frame_up_to_date_hook != 0 && ! gc_in_progress) + (*frame_up_to_date_hook) (XFRAME (XWINDOW (minibuf_window)->frame)); } } @@ -2092,7 +2094,8 @@ { /* Record which glyph starts a character, and the character position of that character. */ - charstart[p1 - p1start] = pos; + if (p1 >= p1start) + charstart[p1 - p1start] = pos; if (p1 >= endp) break; @@ -2280,19 +2283,31 @@ p1++; } - /* For all the glyphs occupied by this character, except for the - first, store -1 in charstarts. */ - if (p1 != p1prev) + /* Do nothing here for a char that's entirely off the left edge. */ + if (p1 >= p1start) { - int *p2x = &charstart[p1prev - p1start] + 1; - int *p2 = &charstart[p1 - p1start]; - while (p2x != p2) - *p2x++ = -1; + /* For all the glyphs occupied by this character, except for the + first, store -1 in charstarts. */ + if (p1 != p1prev) + { + int *p2x = &charstart[p1prev - p1start]; + int *p2 = &charstart[p1 - p1start]; + + /* The window's left column should always + contain a character position. + And don't clobber anything to the left of that. */ + if (p1prev < p1start) + { + charstart[0] = pos; + p2x = charstart; + } + + /* This loop skips over the char p2x initially points to. */ + while (++p2x != p2) + *p2x = -1; + } } - else - /* If this character took up no space, - erase all mention of it from charstart. */ - charstart[p1 - p1start] = 0; + pos++; }