From 20782abb0e701a7b2e82756b1ae7b1248860b49a Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 20 Nov 2004 19:08:45 +0000 Subject: [PATCH] (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. --- lisp/simple.el | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lisp/simple.el b/lisp/simple.el index f3532226d85..3fb388c8867 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -3107,6 +3107,7 @@ Outline mode sets this." ;; 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 @@ Outline mode sets this." ;; at least go to end of line. (beginning-of-line)) (t - (line-move-finish (or goal-column temporary-goal-column) opoint)))))) + (line-move-finish (or goal-column temporary-goal-column) + opoint forward)))))) -(defun line-move-finish (column opoint) +(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 @@ Outline mode sets this." (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 @@ Outline mode sets this." ;; 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)))) -- 2.39.2