bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#50840: 28.0.50; Support GNU style of multiline comments in C source


From: Stefan Monnier
Subject: bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
Date: Fri, 01 Oct 2021 15:42:32 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

> It sounds like none of the comment styles in 'comment-styles' can
> produce the style of C code comments that we use in Emacs, i.e.
>
>     /* This is the first line of a multi-line comment.
>        This is the final line of a multi-line comment.  */
>
> And I don't see anything in the CC Mode manual to augment that,
> either.

I'm not sure exactly what that would mean in practice.
`comment-style` is used to comment out code rather than to write the
text of a comment.  I think what you're asking for is what you get by
setting `comment-multi-line` and then writing your text (e.g. starting
with M-; and then typing the text in there, maybe with auto-fill set).

If you want comment-region to produce something like the above, then
maybe a patch like the following would make sense?
The idea is to add a new value nil to `comment-style` which would
instruct `comment-region` to refrain from adding `comment-continue` on
eachline of a multiline comment.


        Stefan


diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index 52e7f09b693..619353d72fd 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -279,13 +277,13 @@ comment-style
 See `comment-styles' for a list of available styles."
   :type (if (boundp 'comment-styles)
            `(choice
+              (cons :tag "nil: Minimal" nil)
               ,@(mapcar (lambda (s)
                           `(const :tag ,(format "%s: %s" (car s) (nth 5 s))
                                   ,(car s)))
                         comment-styles))
          'symbol)
-  :version "23.1"
-  :group 'comment)
+  :version "23.1")
 
 ;;;###autoload
 (defcustom comment-padding (purecopy " ")
@@ -345,9 +339,7 @@ comment-string-strip
                        "\\'") str)
   (match-string 1 str))
 
-(defun comment-string-reverse (s)
-  "Return the mirror image of string S, without any trailing space."
-  (comment-string-strip (concat (nreverse (string-to-list s))) nil t))
+(define-obsolete-function-alias 'comment-string-reverse #'reverse "29.1")
 
 ;;;###autoload
 (defun comment-normalize-vars (&optional noerror)
@@ -933,7 +925,10 @@ uncomment-region-default-1
   (let* ((numarg (prefix-numeric-value arg))
         (ccs comment-continue)
         (srei (or (comment-padright ccs 're)
-                  (and (stringp comment-continue) comment-continue)))
+                  ;; `comment-padright' returns nil for whitespace-only
+                   ;; strings.
+                  (and (stringp comment-continue)
+                       comment-continue)))
         (csre (comment-padright comment-start 're))
         (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
         spt)
@@ -1005,8 +1000,8 @@ uncomment-region-default-1
 
          ;; Eliminate continuation markers as well.
          (when sre
-           (let* ((cce (comment-string-reverse (or comment-continue
-                                                   comment-start)))
+           (let* ((cce (reverse (or comment-continue
+                                    comment-start)))
                   (erei (and box (comment-padleft cce 're)))
                   (ere (and erei (concat "\\(" erei "\\)\\s-*$"))))
              (goto-char (point-min))
@@ -1149,7 +1144,7 @@ comment-region-internal
     ;; Should we mark empty lines as well ?
     (if (or ccs block lines) (setq no-empty nil))
     ;; Make sure we have end-markers for BLOCK mode.
-    (when block (unless ce (setq ce (comment-string-reverse cs))))
+    (when block (unless ce (setq ce (reverse cs))))
     ;; If BLOCK is not requested, we don't need CCE.
     (unless block (setq cce nil))
     ;; Continuation defaults to the same as CS and CE.
@@ -1244,7 +1239,7 @@ comment-region-default-1
         (style (cdr (assoc comment-style comment-styles)))
         (lines (nth 2 style))
         (block (nth 1 style))
-        (multi (nth 0 style)))
+        (multi (if style (nth 0 style) t)))
 
     (if noadjust
         (when (bolp)
@@ -1297,10 +1292,9 @@ comment-region-default-1
        ;; 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 triple 2 1)))
-         (setq numarg (1- (prefix-numeric-value arg))))
-
+       (setq numarg (if (and (null arg) (not multi-char))
+                        (* comment-add (if triple 2 1))
+                      (1- (prefix-numeric-value arg))))
        (comment-region-internal
         beg end
         (let ((s (comment-padright comment-start numarg)))
@@ -1309,13 +1303,17 @@ comment-region-default-1
         (let ((s (comment-padleft comment-end numarg)))
           (and s (if (string-match comment-end-skip s) s
                    (comment-padright comment-end))))
-        (if multi
-             (or (comment-padright comment-continue numarg)
-                 ;; `comment-padright' returns nil when
-                 ;; `comment-continue' contains only whitespace
-                 (and (stringp comment-continue) comment-continue)))
-        (if multi
-            (comment-padleft (comment-string-reverse comment-continue) numarg))
+        (cond
+          ((not style) (make-string (string-width cs) ""))
+          (multi
+           (or (comment-padright comment-continue numarg)
+               ;; `comment-padright' returns nil when
+               ;; `comment-continue' contains only whitespace
+               (and (stringp comment-continue) comment-continue))))
+        (cond
+          ((not style) "")
+         (multi
+          (comment-padleft (reverse comment-continue) numarg)))
         block
         lines
         indent))))))
@@ -1360,7 +1358,7 @@ comment-or-uncomment-region
   (interactive "*r\nP")
   (comment-normalize-vars)
   (funcall (if (comment-only-p beg end)
-              'uncomment-region 'comment-region)
+              #'uncomment-region #'comment-region)
           beg end arg))
 
 ;;;###autoload
@@ -1545,8 +1542,9 @@ comment-indent-new-line
                      (comment-start comstart)
                      (comment-end comend)
                      (continuep (or comment-multi-line
-                                    (cadr (assoc comment-style
-                                                 comment-styles))))
+                                    (null comment-style)
+                                    (cadr (assq comment-style
+                                                comment-styles))))
                      ;; Recreate comment-continue from comment-start.
                      ;; FIXME: wrong if comment-continue was set explicitly!
                      ;; FIXME: use prev line's continuation if available.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]