Mercurial > emacs
changeset 58354:36916d006f6b
(line-move-finish): New arg FORWARD.
Ignore invisible newlines, not intangible ones.
Conditions for acceptable stopping positions depend on FORWARD.
(line-move): Pass FORWARD arg to line-move-finish.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 20 Nov 2004 19:08:45 +0000 |
parents | fce468dd61ef |
children | 7c3e2674726f |
files | lisp/simple.el |
diffstat | 1 files changed, 16 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/simple.el Sat Nov 20 18:52:50 2004 +0000 +++ b/lisp/simple.el Sat Nov 20 19:08:45 2004 +0000 @@ -3107,6 +3107,7 @@ ;; for intermediate positions. (let ((inhibit-point-motion-hooks t) (opoint (point)) + (forward (> arg 0)) new line-end line-beg) (unwind-protect (progn @@ -3181,9 +3182,10 @@ ;; at least go to end of line. (beginning-of-line)) (t - (line-move-finish (or goal-column temporary-goal-column) opoint)))))) - -(defun line-move-finish (column opoint) + (line-move-finish (or goal-column temporary-goal-column) + opoint forward)))))) + +(defun line-move-finish (column opoint forward) (let ((repeat t)) (while repeat ;; Set REPEAT to t to repeat the whole thing. @@ -3193,10 +3195,11 @@ (line-beg (save-excursion (beginning-of-line) (point))) (line-end ;; Compute the end of the line - ;; ignoring effectively intangible newlines. + ;; ignoring effectively invisible newlines. (save-excursion - (let ((inhibit-point-motion-hooks nil) - (inhibit-field-text-motion t)) + (end-of-line) + (while (and (not (eobp)) (line-move-invisible-p (point))) + (goto-char (next-char-property-change (point))) (end-of-line)) (point)))) @@ -3220,7 +3223,13 @@ ;; try the previous allowable position. ;; See if it is ok. (backward-char) - (if (<= (point) line-end) + (if (if forward + ;; If going forward, don't accept the previous + ;; allowable position if it is before the target line. + (< line-beg (point)) + ;; If going backward, don't accept the previous + ;; allowable position if it is still after the target line. + (<= (point) line-end)) (setq new (point)) ;; As a last resort, use the end of the line. (setq new line-end))))