changeset 44754:628a697e2315

(Fend_of_line): Handle intangible text in mid line.
author Richard M. Stallman <rms@gnu.org>
date Mon, 22 Apr 2002 22:33:36 +0000
parents 55f9c8874c01
children 52388a234829
files src/cmds.c
diffstat 1 files changed, 28 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/cmds.c	Mon Apr 22 18:27:39 2002 +0000
+++ b/src/cmds.c	Mon Apr 22 22:33:36 2002 +0000
@@ -179,6 +179,7 @@
        doc: /* Move point to end of current line.
 With argument N not nil or 1, move forward N - 1 lines first.
 If point reaches the beginning or end of buffer, it stops there.
+To ignore intangibility, bind `inhibit-text-motion-hooks' to t.
 
 This command does not move point across a field boundary unless doing so
 would move beyond there to a different line; if N is nil or 1, and
@@ -187,12 +188,38 @@
      (n)
      Lisp_Object n;
 {
+  int newpos;
+
   if (NILP (n))
     XSETFASTINT (n, 1);
   else
     CHECK_NUMBER (n);
 
-  SET_PT (XINT (Fline_end_position (n)));
+  while (1)
+    {
+      newpos = XINT (Fline_end_position (n));
+      SET_PT (newpos);
+
+      if (PT > newpos
+	  && FETCH_CHAR (PT - 1) == '\n')
+	{
+	  /* If we skipped over a newline that follows
+	     an invisible intangible run,
+	     move back to the last tangible position
+	     within the line.  */
+
+	  SET_PT (PT - 1);
+	  break;
+	}
+      else if (PT > newpos && PT < ZV
+	       && FETCH_CHAR (PT) != '\n')
+	/* If we skipped something intangible
+	   and now we're not really at eol,
+	   keep going.  */
+	n = make_number (1);
+      else
+	break;
+    }
 
   return Qnil;
 }