changeset 98076:638e09e81764

(move_it_to): When moving by vpos, ensure that the iterator advances to the next line if the current line ends in a continued tab.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 07 Sep 2008 14:16:15 +0000
parents 8d0e9f83831b
children 9fe85fbeb8eb
files src/xdisp.c
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Sun Sep 07 14:15:40 2008 +0000
+++ b/src/xdisp.c	Sun Sep 07 14:16:15 2008 +0000
@@ -7216,8 +7216,18 @@
 	     associated with the tab are displayed on the current
 	     line.  Since it->current_x does not include these glyphs,
 	     we use it->last_visible_x instead.  */
-	  it->continuation_lines_width +=
-	    (it->c == '\t') ? it->last_visible_x : it->current_x;
+	  if (it->c == '\t')
+	    {
+	      it->continuation_lines_width += it->last_visible_x;
+	      /* When moving by vpos, ensure that the iterator really
+		 advances to the next line (bug#847).  Fixme: do we
+		 need to do this in other circumstances?  */
+	      if ((op & MOVE_TO_VPOS)
+		  && !(op & (MOVE_TO_X | MOVE_TO_POS)))
+		set_iterator_to_next (it, 0);
+	    }
+	  else
+	    it->continuation_lines_width += it->current_x;
 	  break;
 
 	default: