changeset 5608:c4c662362d39

(forward-paragraph): If moving back we find nothing but separator lines till buffer beg, just stay there. Exit outer loop if at beg or end of buffer.
author Richard M. Stallman <rms@gnu.org>
date Sun, 16 Jan 1994 19:05:39 +0000
parents b4cec0550c73
children 61b2daccd91e
files lisp/textmodes/paragraphs.el
diffstat 1 files changed, 29 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/paragraphs.el	Sun Jan 16 09:58:31 1994 +0000
+++ b/lisp/textmodes/paragraphs.el	Sun Jan 16 19:05:39 1994 +0000
@@ -75,35 +75,42 @@
 	      (concat paragraph-separate "\\|^"
 		      fill-prefix-regexp "[ \t]*$")
 	    paragraph-separate)))
-    (while (< arg 0)
+    (while (and (< arg 0) (not (bobp)))
       (if (and (not (looking-at paragraph-separate))
 	       (re-search-backward "^\n" (max (1- (point)) (point-min)) t))
 	  nil
+	;; Move back over paragraph-separating lines.
 	(forward-char -1) (beginning-of-line)
 	(while (and (not (bobp)) (looking-at paragraph-separate))
 	  (forward-line -1))
-	(end-of-line)
-	;; Search back for line that starts or separates paragraphs.
-	(if (if fill-prefix-regexp
-		;; There is a fill prefix; it overrides paragraph-start.
-		(progn
-		 (while (progn (beginning-of-line)
-			       (and (not (bobp))
-				    (not (looking-at paragraph-separate))
-				    (looking-at fill-prefix-regexp)))
-		   (forward-line -1))
-		 (not (bobp)))
-	      (re-search-backward paragraph-start nil t))
-	    ;; Found one.
-	    (progn
-	      (while (and (not (eobp)) (looking-at paragraph-separate))
-		(forward-line 1))
-	      (if (eq (char-after (- (point) 2)) ?\n)
-		  (forward-line -1)))
-	  ;; No starter or separator line => use buffer beg.
-	  (goto-char (point-min))))
+	(if (bobp)
+	    nil
+	  ;; Go to end of the previous (non-separating) line.
+	  (end-of-line)
+	  ;; Search back for line that starts or separates paragraphs.
+	  (if (if fill-prefix-regexp
+		  ;; There is a fill prefix; it overrides paragraph-start.
+		  (progn
+		   (while (progn (beginning-of-line)
+				 (and (not (bobp))
+				      (not (looking-at paragraph-separate))
+				      (looking-at fill-prefix-regexp)))
+		     (forward-line -1))
+		   (not (bobp)))
+		(re-search-backward paragraph-start nil t))
+	      ;; Found one.
+	      (progn
+		;; Move forward over paragraph separators.
+		;; We know this cannot reach the place we started
+		;; because we know we moved back over a non-separator.
+		(while (and (not (eobp)) (looking-at paragraph-separate))
+		  (forward-line 1))
+		(if (eq (char-after (- (point) 2)) ?\n)
+		    (forward-line -1)))
+	    ;; No starter or separator line => use buffer beg.
+	    (goto-char (point-min)))))
       (setq arg (1+ arg)))
-    (while (> arg 0)
+    (while (and (> arg 0) (not (eobp)))
       (beginning-of-line)
       (while (prog1 (and (not (eobp))
 			 (looking-at paragraph-separate))