Mercurial > emacs
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.