changeset 50947:15c3c47aca50

(comment-indent): Try to align to adjacent comments. (comment-with-narrowing): Actually use the arguments. (comment-valid-prefix-p): Rename from comment-valid-prefix and fix to actually use its argument.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Sat, 10 May 2003 22:54:35 +0000
parents 89a47df61860
children 12e60748ae66
files lisp/newcomment.el
diffstat 1 files changed, 32 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/newcomment.el	Sat May 10 22:46:10 2003 +0000
+++ b/lisp/newcomment.el	Sat May 10 22:54:35 2003 +0000
@@ -1,6 +1,6 @@
 ;;; newcomment.el --- (un)comment regions of buffers
 
-;; Copyright (C) 1999, 2000  Free Software Foundation Inc.
+;; Copyright (C) 1999,2000,2003  Free Software Foundation Inc.
 
 ;; Author: code extracted from Emacs-20's simple.el
 ;; Maintainer: Stefan Monnier <monnier@cs.yale.edu>
@@ -493,15 +493,36 @@
       ;; Compute desired indent.
       (setq indent (save-excursion (funcall comment-indent-function)))
       (if (not indent)
-	  ;; comment-indent-function refuses: delegate to indent.
+	  ;; comment-indent-function refuses: delegate to line-indent.
 	  (indent-according-to-mode)
 	;; Avoid moving comments past the fill-column.
 	(unless (save-excursion (skip-chars-backward " \t") (bolp))
-	  (setq indent
-		(min indent
-		     (+ (current-column)
+	  (let ((max (+ (current-column)
 			(- (or comment-fill-column fill-column)
-			   (save-excursion (end-of-line) (current-column)))))))
+			   (save-excursion (end-of-line) (current-column))))))
+	    (if (<= max indent)
+		(setq indent max)	;Don't move past the fill column.
+	      ;; We can choose anywhere between indent..max.
+	      ;; Let's try to align to a comment on the previous line.
+	      (let ((other nil))
+		(save-excursion
+		  (when (and (zerop (forward-line -1))
+			     (setq other (comment-search-forward
+					 (line-end-position) t)))
+		    (goto-char other) (setq other (current-column))))
+		(if (and other (<= other max) (> other indent))
+		    ;; There is a comment and it's in the range: bingo.
+		    (setq indent other)
+		  ;; Let's try to align to a comment on the next line, then.
+		  (let ((other nil))
+		    (save-excursion
+		      (when (and (zerop (forward-line 1))
+				 (setq other (comment-search-forward
+					     (line-end-position) t)))
+			(goto-char other) (setq other (current-column))))
+		    (if (and other (<= other max) (> other indent))
+			;; There is a comment and it's in the range: bingo.
+			(setq indent other))))))))
 	(unless (= (current-column) indent)
 	  ;; If that's different from current, change it.
 	  (delete-region (point) (progn (skip-chars-backward " \t") (point)))
@@ -764,9 +785,9 @@
 indentation to be kept as it was before narrowing."
   (declare (debug t) (indent 2))
   (let ((bindent (make-symbol "bindent")))
-    `(let ((,bindent (save-excursion (goto-char beg) (current-column))))
+    `(let ((,bindent (save-excursion (goto-char ,beg) (current-column))))
        (save-restriction
-	 (narrow-to-region beg end)
+	 (narrow-to-region ,beg ,end)
 	 (goto-char (point-min))
 	 (insert (make-string ,bindent ? ))
 	 (prog1
@@ -988,13 +1009,13 @@
 This has no effect in modes that do not define a comment syntax."
   :type 'boolean)
 
-(defun comment-valid-prefix (prefix compos)
+(defun comment-valid-prefix-p (prefix compos)
   (or
    ;; Accept any prefix if the current comment is not EOL-terminated.
    (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
    ;; Accept any prefix that starts with a comment-start marker.
    (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
-		 fill-prefix)))
+		 prefix)))
 
 ;;;###autoload
 (defun comment-indent-new-line (&optional soft)
@@ -1048,7 +1069,7 @@
 	 ;; a comment and the prefix is not a comment starter.
 	 ((and fill-prefix
 	       (or (not compos)
-		   (comment-valid-prefix fill-prefix compos)))
+		   (comment-valid-prefix-p fill-prefix compos)))
 	  (indent-to-left-margin)
 	  (insert-and-inherit fill-prefix))
 	 ;; If we're not inside a comment, just try to indent.