changeset 48127:ebfdb0351da6

(lisp-fill-paragraph): Use fill-comment-paragraph.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sun, 03 Nov 2002 03:43:49 +0000
parents 92c696f8509e
children 8672c645e6ae
files lisp/emacs-lisp/lisp-mode.el
diffstat 1 files changed, 17 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/lisp-mode.el	Sun Nov 03 03:41:11 2002 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el	Sun Nov 03 03:43:49 2002 +0000
@@ -1060,99 +1060,23 @@
 paragraph of it that point is in, preserving the comment's indentation
 and initial semicolons."
   (interactive "P")
-  (let (
-	;; Non-nil if the current line contains a comment.
-	has-comment
-
-	;; Non-nil if the current line contains code and a comment.
-	has-code-and-comment
-
-	;; If has-comment, the appropriate fill-prefix for the comment.
-	comment-fill-prefix
-	)
-
-    ;; Figure out what kind of comment we are looking at.
-    (save-excursion
-      (beginning-of-line)
-      (cond
-
-       ;; A line with nothing but a comment on it?
-       ((looking-at "[ \t]*;[; \t]*")
-	(setq has-comment t
-	      comment-fill-prefix (match-string 0)))
-
-       ;; A line with some code, followed by a comment?  Remember that the
-       ;; semi which starts the comment shouldn't be part of a string or
-       ;; character.
-       ((let ((state (syntax-ppss (line-end-position))))
-	  (when (nth 4 state)
-	    (goto-char (nth 8 state))
-	    (looking-at ";+[\t ]*")))
-	(setq has-comment t has-code-and-comment t)
-	(setq comment-fill-prefix
-	      (concat (make-string (/ (current-column) tab-width) ?\t)
-		      (make-string (% (current-column) tab-width) ?\ )
-		      (match-string 0))))))
-
-    (if (not has-comment)
-        ;; `paragraph-start' is set here (not in the buffer-local
-        ;; variable so that `forward-paragraph' et al work as
-        ;; expected) so that filling (doc) strings works sensibly.
-        ;; Adding the opening paren to avoid the following sexp being
-        ;; filled means that sexps generally aren't filled as normal
-        ;; text, which is probably sensible.  The `;' and `:' stop the
-        ;; filled para at following comment lines and keywords
-        ;; (typically in `defcustom').
-	(let ((paragraph-start (concat paragraph-start
-                                       "\\|\\s-*[\(;:\"]"))
-	      ;; Avoid filling the first line of docstring.
-	      (paragraph-separate
-	       (concat paragraph-separate "\\|\\s-*\".*\\.$")))
-          (fill-paragraph justify))
-
-      ;; Narrow to include only the comment, and then fill the region.
-      (save-excursion
-	(save-restriction
-	  (beginning-of-line)
-	  (narrow-to-region
-	   ;; Find the first line we should include in the region to fill.
-	   (save-excursion
-	     (while (and (zerop (forward-line -1))
-			 (looking-at "[ \t]*;")))
-	     ;; We may have gone too far.  Go forward again.
-	     (or (looking-at ".*;")
-		 (forward-line 1))
-	     (point))
-	   ;; Find the beginning of the first line past the region to fill.
-	   (save-excursion
-	     (while (progn (forward-line 1)
-			   (looking-at "[ \t]*;")))
-	     (point)))
-
-	  ;; Lines with only semicolons on them can be paragraph boundaries.
-	  (let* ((paragraph-separate (concat paragraph-separate "\\|[ \t;]*$"))
-		 (paragraph-ignore-fill-prefix nil)
-		 (fill-prefix comment-fill-prefix)
-		 (after-line (if has-code-and-comment
-				 (line-beginning-position 2)))
-		 (end (progn
-			(forward-paragraph)
-			(or (bolp) (newline 1))
-			(point)))
-		 ;; If this comment starts on a line with code,
-		 ;; include that like in the filling.
-		 (beg (progn (backward-paragraph)
-			     (if (eq (point) after-line)
-				 (forward-line -1))
-			     (point))))
-	    (fill-region-as-paragraph beg end
-				      justify nil
-				      (save-excursion
-					(goto-char beg)
-					(if (looking-at fill-prefix)
-					    nil
-					  (re-search-forward comment-start-skip))))))))
-    t))
+  (or (fill-comment-paragraph justify)
+      ;; `paragraph-start' is set here (not in the buffer-local
+      ;; variable so that `forward-paragraph' et al work as
+      ;; expected) so that filling (doc) strings works sensibly.
+      ;; Adding the opening paren to avoid the following sexp being
+      ;; filled means that sexps generally aren't filled as normal
+      ;; text, which is probably sensible.  The `;' and `:' stop the
+      ;; filled para at following comment lines and keywords
+      ;; (typically in `defcustom').
+      (let ((paragraph-start (concat paragraph-start
+				     "\\|\\s-*[\(;:\"]"))
+	    ;; Avoid filling the first line of docstring.
+	    (paragraph-separate
+	     (concat paragraph-separate "\\|\\s-*\".*\\.$")))
+	(fill-paragraph justify))
+      ;; Never return nil.
+      t))
 
 (defun indent-code-rigidly (start end arg &optional nochange-regexp)
   "Indent all lines of code, starting in the region, sideways by ARG columns.