changeset 22245:94da16d936b6

(compute_motion): Check for past vpos/hpos target before skipping invisible chars.
author Richard M. Stallman <rms@gnu.org>
date Mon, 25 May 1998 22:33:38 +0000
parents 41c88b9489c3
children afacb0a7e251
files src/indent.c
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/indent.c	Mon May 25 22:32:58 1998 +0000
+++ b/src/indent.c	Mon May 25 22:33:38 1998 +0000
@@ -1095,6 +1095,26 @@
 	  int pos_here = pos;
 	  int newpos;
 
+	  /* Don't skip invisible if we are already at the margin.  */
+	  if (vpos > tovpos || vpos == tovpos && hpos >= tohpos)
+	    {
+	      if (contin_hpos && prev_hpos == 0
+		  && hpos > tohpos
+		  && (contin_hpos == width || wide_column_end_hpos > width))
+		{ /* Line breaks because we can't put the character at the
+		     previous line any more.  It is not the multi-column
+		     character continued in middle.  Go back to previous
+		     buffer position, screen position, and set tab offset
+		     to previous value.  It's the beginning of the
+		     line.  */
+		  pos = prev_pos;
+		  pos_byte = prev_pos_byte;
+		  hpos = prev_hpos;
+		  tab_offset = prev_tab_offset;
+		}
+	      break;
+	    }
+
 	  /* If the caller says that the screen position came from an earlier
 	     call to compute_motion, then we've already accounted for the
 	     overlay strings at point.  This is only true the first time