Mercurial > emacs
changeset 80693:842392852afc
(move_it_to): When stopping at a charpos, check if that's a continued
multi-char glyph; if so, advance to the actual glyph.
(try_window): Check scroll margin on bottom window edge too.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 08 Aug 2008 15:50:53 +0000 |
parents | 80c6b8023a44 |
children | 2a233b85cfc7 |
files | src/xdisp.c |
diffstat | 1 files changed, 25 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Fri Aug 08 15:49:52 2008 +0000 +++ b/src/xdisp.c Fri Aug 08 15:50:53 2008 +0000 @@ -6932,6 +6932,30 @@ out: + /* On text terminals, we may stop at the end of a line in the middle + of a multi-character glyph. If the glyph itself is continued, + i.e. it is actually displayed on the next line, don't treat this + stopping point as valid; move to the next line instead (unless + that brings us offscreen). */ + if (!FRAME_WINDOW_P (it->f) + && op & MOVE_TO_POS + && IT_CHARPOS (*it) == to_charpos + && it->what == IT_CHARACTER + && it->nglyphs > 1 + && it->line_wrap == WINDOW_WRAP + && it->current_x == it->last_visible_x - 1 + && it->c != '\n' + && it->c != '\t' + && it->vpos < XFASTINT (it->w->window_end_vpos)) + { + it->continuation_lines_width += it->current_x; + it->current_x = it->hpos = it->max_ascent = it->max_descent = 0; + it->current_y += it->max_ascent + it->max_descent; + ++it->vpos; + last_height = it->max_ascent + it->max_descent; + last_max_ascent = it->max_ascent; + } + TRACE_MOVE ((stderr, "move_it_to: reached %d\n", reached)); } @@ -13665,7 +13689,7 @@ seems to give wrong results. We don't want to recenter when the last line is partly visible, we want to allow that case to be handled in the usual way. */ - || (w->cursor.y + 1) > it.last_visible_y) + || w->cursor.y > it.last_visible_y - this_scroll_margin - 1) { w->cursor.vpos = -1; clear_glyph_matrix (w->desired_matrix);