changeset 85375:8f6c4eb58cdb

(fill-paragraph-or-region): Remove function at the request of RMS. (fill-paragraph): Change `arg' to optional `justify'. Add interactive arg `region'. Fix docstring. At the first `or' branch add call to `fill-region' if it the region is active in transient-mark-mode.
author Juri Linkov <juri@jurta.org>
date Thu, 18 Oct 2007 00:06:33 +0000
parents 961889408461
children a2663c54de9f
files lisp/textmodes/fill.el
diffstat 1 files changed, 67 insertions(+), 70 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/fill.el	Wed Oct 17 23:49:26 2007 +0000
+++ b/lisp/textmodes/fill.el	Thu Oct 18 00:06:33 2007 +0000
@@ -752,10 +752,10 @@
     (narrow-to-region (minibuffer-prompt-end) (point-max))
     (fill-paragraph arg)))
 
-(defun fill-paragraph (arg)
+(defun fill-paragraph (&optional justify region)
   "Fill paragraph at or after point.
 
-If ARG is non-nil (interactively, with prefix argument), justify as well.
+If JUSTIFY is non-nil (interactively, with prefix argument), justify as well.
 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.
 the variable `fill-column' controls the width for filling.
@@ -763,64 +763,73 @@
 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.
 
-If `fill-paragraph-function' is nil, return the `fill-prefix' used for filling."
+If `fill-paragraph-function' is nil, return the `fill-prefix' used for filling.
+
+Interactively (when `region' is non-nil) in Transient Mark mode when
+the mark is active, call `fill-region' to fill each of the paragraphs
+in the active region."
   (interactive (progn
 		 (barf-if-buffer-read-only)
-		 (list (if current-prefix-arg 'full))))
-  ;; First try fill-paragraph-function.
-  (or (and (not (eq fill-paragraph-function t))
-	   (or fill-paragraph-function
-	       (and (minibufferp (current-buffer))
-		    (= 1 (point-min))))
-	   (let ((function (or fill-paragraph-function
-			       ;; In the minibuffer, don't count the width
-			       ;; of the prompt.
-			       'fill-minibuffer-function))
-		 ;; If fill-paragraph-function is set, it probably takes care
-		 ;; of comments and stuff.  If not, it will have to set
-		 ;; fill-paragraph-handle-comment back to t explicitly or
-		 ;; return nil.
-		 (fill-paragraph-handle-comment nil)
-		 (fill-paragraph-function t))
-	     (funcall function arg)))
-      ;; Then try our syntax-aware filling code.
-      (and fill-paragraph-handle-comment
-	   ;; Our code only handles \n-terminated comments right now.
-	   comment-start (equal comment-end "")
-	   (let ((fill-paragraph-handle-comment nil))
-	     (fill-comment-paragraph arg)))
-      ;; If it all fails, default to the good ol' text paragraph filling.
-      (let ((before (point))
-	    (paragraph-start paragraph-start)
-	    ;; Fill prefix used for filling the paragraph.
-	    fill-pfx)
-	;; Try to prevent code sections and comment sections from being
-	;; filled together.
-	(when (and fill-paragraph-handle-comment comment-start-skip)
-	  (setq paragraph-start
-		(concat paragraph-start "\\|[ \t]*\\(?:"
-			comment-start-skip "\\)")))
-	(save-excursion
-	  ;; To make sure the return value of forward-paragraph is meaningful,
-	  ;; we have to start from the beginning of line, otherwise skipping
-	  ;; past the last few chars of a paragraph-separator would count as
-	  ;; a paragraph (and not skipping any chars at EOB would not count
-	  ;; as a paragraph even if it is).
-	  (move-to-left-margin)
-	  (if (not (zerop (forward-paragraph)))
-	      ;; There's no paragraph at or after point: give up.
-	      (setq fill-pfx "")
-	    (let ((end (point))
-		  (beg (progn (backward-paragraph) (point))))
-	      (goto-char before)
-	      (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))))))
-	fill-pfx)))
+		 (list (if current-prefix-arg 'full) t)))
+  (or
+   ;; 1. Fill the region if it is active when called interactively.
+   (and region transient-mark-mode mark-active
+	(not (eq (region-beginning) (region-end)))
+	(fill-region (region-beginning) (region-end) justify))
+   ;; 2. Try fill-paragraph-function.
+   (and (not (eq fill-paragraph-function t))
+	(or fill-paragraph-function
+	    (and (minibufferp (current-buffer))
+		 (= 1 (point-min))))
+	(let ((function (or fill-paragraph-function
+			    ;; In the minibuffer, don't count the width
+			    ;; of the prompt.
+			    'fill-minibuffer-function))
+	      ;; If fill-paragraph-function is set, it probably takes care
+	      ;; of comments and stuff.  If not, it will have to set
+	      ;; fill-paragraph-handle-comment back to t explicitly or
+	      ;; return nil.
+	      (fill-paragraph-handle-comment nil)
+	      (fill-paragraph-function t))
+	  (funcall function justify)))
+   ;; 3. Try our syntax-aware filling code.
+   (and fill-paragraph-handle-comment
+	;; Our code only handles \n-terminated comments right now.
+	comment-start (equal comment-end "")
+	(let ((fill-paragraph-handle-comment nil))
+	  (fill-comment-paragraph justify)))
+   ;; 4. If it all fails, default to the good ol' text paragraph filling.
+   (let ((before (point))
+	 (paragraph-start paragraph-start)
+	 ;; Fill prefix used for filling the paragraph.
+	 fill-pfx)
+     ;; Try to prevent code sections and comment sections from being
+     ;; filled together.
+     (when (and fill-paragraph-handle-comment comment-start-skip)
+       (setq paragraph-start
+	     (concat paragraph-start "\\|[ \t]*\\(?:"
+		     comment-start-skip "\\)")))
+     (save-excursion
+       ;; To make sure the return value of forward-paragraph is meaningful,
+       ;; we have to start from the beginning of line, otherwise skipping
+       ;; past the last few chars of a paragraph-separator would count as
+       ;; a paragraph (and not skipping any chars at EOB would not count
+       ;; as a paragraph even if it is).
+       (move-to-left-margin)
+       (if (not (zerop (forward-paragraph)))
+	   ;; There's no paragraph at or after point: give up.
+	   (setq fill-pfx "")
+	 (let ((end (point))
+	       (beg (progn (backward-paragraph) (point))))
+	   (goto-char before)
+	   (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 justify)
+		   (fill-region-as-paragraph beg end justify))))))
+     fill-pfx)))
 
 (defun fill-comment-paragraph (&optional justify)
   "Fill current comment.
@@ -1007,18 +1016,6 @@
 	  (goto-char end))))
     fill-pfx))
 
-(defun fill-paragraph-or-region (arg)
-  "Fill the active region or current paragraph.
-In Transient Mark mode, when the mark is active, it calls `fill-region'
-on the active region.  Otherwise, it calls `fill-paragraph'."
-  (interactive (progn
-		 (barf-if-buffer-read-only)
-		 (list (if current-prefix-arg 'full))))
-  (if (and transient-mark-mode mark-active
-	   (not (eq (region-beginning) (region-end))))
-      (fill-region (region-beginning) (region-end) arg)
-    (fill-paragraph arg)))
-
 
 (defcustom default-justification 'left
   "*Method of justifying text not otherwise specified.