diff options
author | Richard M. Stallman <rms@gnu.org> | 2002-04-22 22:33:36 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 2002-04-22 22:33:36 +0000 |
commit | 757056173a96a66a1af8ec4bfa8d8e342ad4bc48 (patch) | |
tree | 73c0bfa0e9d002ffb143a676e6dfd91c1e876d09 /src/cmds.c | |
parent | ef77c878f0cbd3ffc965054f601c8c4f799519a3 (diff) | |
download | emacs-757056173a96a66a1af8ec4bfa8d8e342ad4bc48.tar.gz |
(Fend_of_line): Handle intangible text in mid line.
Diffstat (limited to 'src/cmds.c')
-rw-r--r-- | src/cmds.c | 29 |
1 files changed, 28 insertions, 1 deletions
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; } |