diff lisp/textmodes/fill.el @ 33441:b938b9d018a3

(skip-line-prefix): New function. (fill-region-as-paragraph, fill-region): Return the fill-prefix. (fill-paragraph): Don't leave point inside the fill-prefix.
author Miles Bader <miles@gnu.org>
date Mon, 13 Nov 2000 12:11:04 +0000
parents 2c0585b6e6d6
children e8b7be229b24
line wrap: on
line diff
--- a/lisp/textmodes/fill.el	Mon Nov 13 02:32:34 2000 +0000
+++ b/lisp/textmodes/fill.el	Mon Nov 13 12:11:04 2000 +0000
@@ -348,6 +348,8 @@
 between words canonical before filling.  Fifth arg SQUEEZE-AFTER, if non-nil,
 means don't canonicalize spaces before that position.
 
+Return the fill-prefix used for filling.
+
 If `sentence-end-double-space' is non-nil, then period followed by one
 space does not end a sentence, so don't break a line there."
   (interactive (progn
@@ -670,7 +672,18 @@
 	;; Leave point after final newline.
 	(goto-char (point-max)))
       (unless (eobp)
-	(forward-char 1)))))
+	(forward-char 1))
+      ;; Return the fill-prefix we used
+      fill-prefix)))
+
+(defsubst skip-line-prefix (prefix)
+  "If point is inside the string PREFIX at the beginning of line, move past it."
+  (when (and prefix
+	     (< (- (point) (line-beginning-position)) (length prefix))
+	     (save-excursion
+	       (beginning-of-line)
+	       (looking-at (regexp-quote prefix))))
+    (goto-char (match-end 0))))
 
 (defun fill-paragraph (arg)
   "Fill paragraph at or after point.  Prefix arg means justify as well.
@@ -679,7 +692,9 @@
 the variable `fill-column' controls the width for filling.
 
 If `fill-paragraph-function' is non-nil, we call it (passing our
-argument to it), and if it returns non-nil, we simply return its value."
+argument to it), and if it returns non-nil, we simply return its value.
+
+If `fill-paragraph-function' is nil, return the fill-prefix used for filling."
   (interactive (progn
 		 (barf-if-buffer-read-only)
 		 (list (if current-prefix-arg 'full))))
@@ -688,6 +703,8 @@
 		 fill-paragraph-function)
 	     (funcall function arg)))
       (let ((before (point))
+	    ;; Fill prefix used for filling the paragraph
+	    fill-pfx
 	    ;; If fill-paragraph is called recursively,
 	    ;; don't give fill-paragraph-function a second chance.
 	    fill-paragraph-function)
@@ -697,11 +714,17 @@
 	  (let ((end (point))
 		(beg (progn (backward-paragraph) (point))))
 	    (goto-char before)
-	    (if use-hard-newlines
-		;; Can't use fill-region-as-paragraph, since this paragraph
-		;; may still contain hard newlines.  See fill-region.
-		(fill-region beg end arg)
-	      (fill-region-as-paragraph beg end arg)))))))
+	    (setq fill-pfx 
+		  (if use-hard-newlines
+		      ;; Can't use fill-region-as-paragraph, since this
+		      ;; paragraph may still contain hard newlines.  See
+		      ;; fill-region.
+		      (fill-region beg end arg)
+		    (fill-region-as-paragraph beg end arg)))))
+	;; See if point ended up inside the fill-prefix, and if so, move
+	;; past it.
+	(skip-line-prefix fill-pfx)
+	fill-pfx)))
 
 (defun fill-region (from to &optional justify nosqueeze to-eop)
   "Fill each of the paragraphs in the region.
@@ -718,6 +741,8 @@
 non-nil means to keep filling to the end of the paragraph (or next
 hard newline, if `use-hard-newlines' is on).
 
+Return the fill-prefix used for filling the last paragraph.
+
 If `sentence-end-double-space' is non-nil, then period followed by one
 space does not end a sentence, so don't break a line there."
   (interactive (progn
@@ -726,7 +751,7 @@
 		       (if current-prefix-arg 'full))))
   (unless (memq justify '(t nil none full center left right))
     (setq justify 'full))
-  (let (end beg)
+  (let (end beg fill-pfx)
     (save-restriction
       (goto-char (max from to))
       (if to-eop
@@ -756,8 +781,10 @@
 	  (if (< (point) beg)
 	      (goto-char beg))
 	  (if (>= (point) initial)
-	      (fill-region-as-paragraph (point) end justify nosqueeze)
-	    (goto-char end)))))))
+	      (setq fill-pfx
+		    (fill-region-as-paragraph (point) end justify nosqueeze))
+	    (goto-char end))))
+      fill-pfx)))
 
 
 (defcustom default-justification 'left