From: Eli Zaretskii Date: Tue, 8 Jul 2014 15:12:39 +0000 (+0300) Subject: Fix bug #17969 with vertical-motion through continuation lines with TABs. X-Git-Tag: emacs-24.3.93~82 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9aac592d887c360c9cae88db350ec69019ded573;p=emacs.git Fix bug #17969 with vertical-motion through continuation lines with TABs. src/xdisp.c (move_it_to): Adjust calculation of line_start_x to what x_produce_glyphs does when it generates a stretch glyph that represents a TAB. --- diff --git a/src/ChangeLog b/src/ChangeLog index 89621bd54ec..d2f1999b546 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-07-08 Eli Zaretskii + + * xdisp.c (move_it_to): Adjust calculation of line_start_x to what + x_produce_glyphs does when it generates a stretch glyph that + represents a TAB. (Bug#17969) + 2014-07-05 Eli Zaretskii * xdisp.c (pos_visible_p): If CHARPOS is at beginning of window, diff --git a/src/xdisp.c b/src/xdisp.c index 28752a42cb9..61d1fa24c68 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -9250,6 +9250,25 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos { line_start_x = it->current_x + it->pixel_width - it->last_visible_x; + if (FRAME_WINDOW_P (it->f)) + { + struct face *face = FACE_FROM_ID (it->f, it->face_id); + struct font *face_font = face->font; + + /* When display_line produces a continued line + that ends in a TAB, it skips a tab stop that + is closer than the font's space character + width (see x_produce_glyphs where it produces + the stretch glyph which represents a TAB). + We need to reproduce the same logic here. */ + eassert (face_font); + if (face_font) + { + if (line_start_x < face_font->space_width) + line_start_x + += it->tab_width * face_font->space_width; + } + } set_iterator_to_next (it, 0); } }