[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.
- bug#50840: 28.0.50; Support GNU style of multiline comments in C source code,
Stefan Monnier <=