changeset 85665:2a0d98e5c9f2

(comment-styles): New style indent-or-triple. (comment-style): Make that the default. (comment-add defvar): Doc fix. (comment-add): Delete arg EXTRA. (comment-region-default): Open code call to comment-add. Handle indent-or-triple style which uses `multi-char' for INDENT.
author Richard M. Stallman <rms@gnu.org>
date Fri, 26 Oct 2007 09:52:12 +0000
parents 66f706bfe35f
children 2a7d60a28bcf
files lisp/newcomment.el
diffstat 1 files changed, 40 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/newcomment.el	Fri Oct 26 09:49:54 2007 +0000
+++ b/lisp/newcomment.el	Fri Oct 26 09:52:12 2007 +0000
@@ -182,13 +182,16 @@
 (defvar comment-add 0
   "How many more comment chars should be inserted by `comment-region'.
 This determines the default value of the numeric argument of `comment-region'.
+The `plain' comment style doubles this value.
+
 This should generally stay 0, except for a few modes like Lisp where
-it can be convenient to set it to 1 so that regions are commented with
-two semi-colons.")
+it is 1 so that regions are commented with two or three semi-colons.")
 
 (defconst comment-styles
   '((plain	. (nil nil nil nil))
     (indent	. (nil nil nil t))
+    (indent-or-triple
+                . (nil nil nil multi-char))
     (aligned	. (nil t nil t))
     (multi-line	. (t nil nil t))
     (extra-line	. (t nil t t))
@@ -201,10 +204,12 @@
 EXTRA specifies that an extra line should be used before and after the
   region to comment (to put the `comment-end' and `comment-start').
 INDENT specifies that the `comment-start' markers should not be put at the
-  left margin but at the current indentation of the region to comment.")
+  left margin but at the current indentation of the region to comment.
+If INDENT is `multi-char', that means indent multi-character
+  comment starters, but not one-character comment starters.")
 
 ;;;###autoload
-(defcustom comment-style 'plain
+(defcustom comment-style 'indent-or-triple
   "Style to be used for `comment-region'.
 See `comment-styles' for a list of available styles."
   :type (if (boundp 'comment-styles)
@@ -939,14 +944,14 @@
 		   (delete-char n)
 		   (setq ,bindent (- ,bindent n)))))))))))
 
-;; Compute the number of extra semicolons to add to the comment starter
-;; in Lisp mode, extra stars in C mode, etc.
+;; Compute the number of extra comment starter characters
+;; (extra semicolons in Lisp mode, extra stars in C mode, etc.)
 ;; If ARG is non-nil, just follow ARG.
 ;; If the comment-starter is multi-char, just follow ARG.
 ;; Otherwise obey comment-add, and double it if EXTRA is non-nil.
-(defun comment-add (arg &optional extra)
+(defun comment-add (arg)
   (if (and (null arg) (= (string-match "[ \t]*\\'" comment-start) 1))
-      (* comment-add (if extra 2 1))
+      (* comment-add 1)
     (1- (prefix-numeric-value arg))))
 
 (defun comment-region-internal (beg end cs ce
@@ -1086,24 +1091,33 @@
      ((consp arg) (uncomment-region beg end))
      ((< numarg 0) (uncomment-region beg end (- numarg)))
      (t
-      ;; Add an extra semicolon in Lisp and similar modes.
-      ;; If STYLE doesn't specify indenting the comments,
-      ;; then double the value of `comment-add'.
-      (setq numarg (comment-add arg (null (nth 3 style))))
-      (comment-region-internal
-       beg end
-       (let ((s (comment-padright comment-start numarg)))
-	 (if (string-match comment-start-skip s) s
-	   (comment-padright comment-start)))
-       (let ((s (comment-padleft comment-end numarg)))
-	 (and s (if (string-match comment-end-skip s) s
-		  (comment-padright comment-end))))
-       (if multi (comment-padright comment-continue numarg))
-       (if multi
-	   (comment-padleft (comment-string-reverse comment-continue) numarg))
-       block
-       lines
-       (nth 3 style))))))
+      (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1))
+	    indent)
+	(if (eq (nth 3 style) 'multi-char)
+	    (setq indent multi-char)
+	  (setq indent (nth 3 style)))
+
+	;; In Lisp and similar modes with one-character comment starters,
+	;; double it by default if `comment-add' says so.
+	;; If it isn't indented, triple it.
+	(if (and (null arg) (not multi-char))
+	    (setq numarg (* comment-add (if indent 1 2)))
+	  (setq numarg (1- (prefix-numeric-value arg))))
+
+	(comment-region-internal
+	 beg end
+	 (let ((s (comment-padright comment-start numarg)))
+	   (if (string-match comment-start-skip s) s
+	     (comment-padright comment-start)))
+	 (let ((s (comment-padleft comment-end numarg)))
+	   (and s (if (string-match comment-end-skip s) s
+		    (comment-padright comment-end))))
+	 (if multi (comment-padright comment-continue numarg))
+	 (if multi
+	     (comment-padleft (comment-string-reverse comment-continue) numarg))
+	 block
+	 lines
+	 indent))))))
 
 ;;;###autoload
 (defun comment-box (beg end &optional arg)