changeset 56551:a98f5bbbf5bc

(move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after we have ensured that the glyph fits on the current line (or returned MOVE_LINE_CONTINUED otherwise).
author Kim F. Storm <storm@cua.dk>
date Mon, 26 Jul 2004 23:16:48 +0000
parents 371bf470dbbf
children 12ee8343c078
files src/xdisp.c
diffstat 1 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Mon Jul 26 23:16:23 2004 +0000
+++ b/src/xdisp.c	Mon Jul 26 23:16:48 2004 +0000
@@ -5649,9 +5649,13 @@
     {
       int x, i, ascent = 0, descent = 0;
 
-      /* Stop when ZV or TO_CHARPOS reached.  */
+      /* Stop when ZV reached.
+         We used to stop here when TO_CHARPOS reached as well, but that is
+         too soon if this glyph does not fit on this line.  So we handle it
+         explicitly below.  */
       if (!get_next_display_element (it)
-	  || BUFFER_POS_REACHED_P ())
+	  || (it->truncate_lines_p
+	      && BUFFER_POS_REACHED_P ()))
 	{
 	  result = MOVE_POS_MATCH_OR_ZV;
 	  break;
@@ -5711,6 +5715,8 @@
 	      /* We want to leave anything reaching TO_X to the caller.  */
 	      if ((op & MOVE_TO_X) && new_x > to_x)
 		{
+		  if (BUFFER_POS_REACHED_P ())
+		    goto buffer_pos_reached;
 		  it->current_x = x;
 		  result = MOVE_X_REACHED;
 		  break;
@@ -5772,6 +5778,8 @@
 		  result = MOVE_LINE_CONTINUED;
 		  break;
 		}
+	      else if (BUFFER_POS_REACHED_P ())
+		goto buffer_pos_reached;
 	      else if (new_x > it->first_visible_x)
 		{
 		  /* Glyph is visible.  Increment number of glyphs that
@@ -5788,6 +5796,15 @@
 	  if (result != MOVE_UNDEFINED)
 	    break;
 	}
+      else if (BUFFER_POS_REACHED_P ())
+	{
+	buffer_pos_reached:
+	  it->current_x = x;
+	  it->max_ascent = ascent;
+	  it->max_descent = descent;
+	  result = MOVE_POS_MATCH_OR_ZV;
+	  break;
+	}
       else if ((op & MOVE_TO_X) && it->current_x >= to_x)
 	{
 	  /* Stop when TO_X specified and reached.  This check is