Mercurial > emacs
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; }