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))))