From: Richard M. Stallman Date: Mon, 22 Apr 2002 22:33:36 +0000 (+0000) Subject: (Fend_of_line): Handle intangible text in mid line. X-Git-Tag: ttn-vms-21-2-B4~15476 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fda3de70e18b1281f685f56ecd9ec4178cbeb5f8;p=emacs.git (Fend_of_line): Handle intangible text in mid line. --- diff --git a/src/cmds.c b/src/cmds.c index 09362a7f5de..40990d074b8 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -179,6 +179,7 @@ DEFUN ("end-of-line", Fend_of_line, Send_of_line, 0, 1, "p", 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 @@ boundaries bind `inhibit-field-text-motion' to t. */) (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; }