unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
@ 2021-09-27  7:56 Eli Zaretskii
  2021-09-27 18:35 ` Alan Mackenzie
  2021-10-01 19:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-09-27  7:56 UTC (permalink / raw)
  To: 50840; +Cc: Alan Mackenzie, Stefan Monnier


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.

Is this true?  If so, a feature request: add a style to support that.
If such a style already exists, please clarify the documentation so that
users could understand which style does that.

And one more nit: Can the 'comment-end' inserted after the end of a
comment please keep _two_ spaces after the period that ends the last
line of a comment?  Or at least heed the setting of
'sentence-end-double-space'?

Thanks.

In GNU Emacs 28.0.50 (build 1891, i686-pc-mingw32)
 of 2021-09-27 built on HOME-C4E4A596F7
Repository revision: d45b3e03c96813e10f8de3c375a5310c01623dab
Repository branch: master
Windowing system distributor 'Microsoft Corp.', version 5.1.2600
System Description: Microsoft Windows XP Service Pack 3 (v5.1.0.2600)

Configured using:
 'configure -C --prefix=/d/usr --with-wide-int --with-modules
 --enable-checking=yes,glyphs 'CFLAGS=-O0 -gdwarf-4 -g3''

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NOTIFY
W32NOTIFY PDUMPER PNG RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS XPM
ZLIB

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1255

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs auth-source cl-seq eieio eieio-core cl-macs
eieio-loaddefs password-cache json map text-property-search time-date
subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
iso-transl tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel dos-w32 ls-lisp disp-table
term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice
button loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads w32notify w32 lcms2 multi-tty
make-network-process emacs)

Memory information:
((conses 16 56764 6239)
 (symbols 48 7798 1)
 (strings 16 21663 2718)
 (string-bytes 1 633064)
 (vectors 16 13627)
 (vector-slots 8 179704 10721)
 (floats 8 23 53)
 (intervals 40 265 116)
 (buffers 888 10))





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-27  7:56 bug#50840: 28.0.50; Support GNU style of multiline comments in C source code Eli Zaretskii
@ 2021-09-27 18:35 ` Alan Mackenzie
  2021-09-27 18:51   ` Eli Zaretskii
  2021-10-01 19:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 11+ messages in thread
From: Alan Mackenzie @ 2021-09-27 18:35 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, Stefan Monnier, 50840

Hello, Eli.

On Mon, Sep 27, 2021 at 10:56:17 +0300, Eli Zaretskii wrote:

> 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.

On pressing M-; in gnu style in C Mode, you get

    /*  */

, with two spaces between the asterisks.

With an existing comment, and point in the middle of the comment:

   /* foobar barfoo */
            ^
	  point

, on pressing CR, you get

  /* foobar
     barfoo */

If auto-fill-mode is enabled, and one types past fill-column, the new
comment line produced by auto-fill is indented to the desired column.

Thus far, this produces Emacs style C comments.

#########################################################################

However, if point is at the end of the first line of a comment and CR is
pressed:

   /* foobar foobar foobar foobar */
                                 ^
			       point

,  you get

   /* foobar foobar foobar foobar
   */
   ^
 point

..  This seems reasonable for a commenting style that ends with */ alone
on the last line.  But it is inconvenient for the second/subsequent line
of an Emacs style comment.  Is this what you mean by "none of the
comment styles ... produce the ... comments that we use in Emacs"?

If so, we could enhance auto-fill-mode to refill when a space is typed
immediately before a comment closer.  But that somehow doesn't feel
quite right.

Ideally, we want some sort of electric indentation immediately on typing
any character before a comment closer alone on a line:

  /* foobar
  */
  ^
point

, on typing an f should go to

  /* foobar
     f*/

, or possibly even to

  /* foobar
     f */

..  I would be in favour of implementing this as a new feature, but
strictly restricted to the exact scenario above, namely:
(i) point is directly at the comment closer.
(ii) point is in the same column as the comment opener above.
This should minimise irritation to people typing in spaces to draw
pictures in comments, e.g. with |, \, -, /, and suchlike.

This should probably be coded inside lisp/newcomment.el, somehow.  Maybe
we could introduce a new component into the elements of comment-styles
meaning "re-indent bare comment-ender line on typing a self-insert
character".


> Is this true?  If so, a feature request: add a style to support that.
> If such a style already exists, please clarify the documentation so that
> users could understand which style does that.

> And one more nit: Can the 'comment-end' inserted after the end of a
> comment please keep _two_ spaces after the period that ends the last
> line of a comment?  Or at least heed the setting of
> 'sentence-end-double-space'?

Are we talking about C-c C-c (aka M-x comment-region) here?  This
command currently inserts comment-end (in C Mode, " */") at the end of
each line being commented, which will leave a single space between what
was the last "." on the line and the "*/".

We could surely check for an end of sentence character at EOL here, and
if we've got one, check that at least two spaces are left.  This again
would be something for lisp/newcomment.el.

> Thanks.

> In GNU Emacs 28.0.50 (build 1891, i686-pc-mingw32)
>  of 2021-09-27 built on HOME-C4E4A596F7
> Repository revision: d45b3e03c96813e10f8de3c375a5310c01623dab
> Repository branch: master
> Windowing system distributor 'Microsoft Corp.', version 5.1.2600
> System Description: Microsoft Windows XP Service Pack 3 (v5.1.0.2600)

> Configured using:
>  'configure -C --prefix=/d/usr --with-wide-int --with-modules
>  --enable-checking=yes,glyphs 'CFLAGS=-O0 -gdwarf-4 -g3''

> Configured features:
> ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NOTIFY
> W32NOTIFY PDUMPER PNG RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS XPM
> ZLIB

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-27 18:35 ` Alan Mackenzie
@ 2021-09-27 18:51   ` Eli Zaretskii
  2021-09-29 11:04     ` Alan Mackenzie
  0 siblings, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2021-09-27 18:51 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: acm, monnier, 50840

> Date: Mon, 27 Sep 2021 18:35:50 +0000
> Cc: 50840@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>,
>   acm@muc.de
> From: Alan Mackenzie <acm@muc.de>
> 
> > Is this true?  If so, a feature request: add a style to support that.
> > If such a style already exists, please clarify the documentation so that
> > users could understand which style does that.
> 
> > And one more nit: Can the 'comment-end' inserted after the end of a
> > comment please keep _two_ spaces after the period that ends the last
> > line of a comment?  Or at least heed the setting of
> > 'sentence-end-double-space'?
> 
> Are we talking about C-c C-c (aka M-x comment-region) here?

Yes, my use case, and the context in which I filed the bug report, was
"C-c C-c".  Not only for the 2 spaces issue, but also for the comment
style.

> This command currently inserts comment-end (in C Mode, " */") at the
> end of each line being commented, which will leave a single space
> between what was the last "." on the line and the "*/".
> 
> We could surely check for an end of sentence character at EOL here, and
> if we've got one, check that at least two spaces are left.  This again
> would be something for lisp/newcomment.el.

Probably.  That''s why Stefan was CC'ed as well.





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-27 18:51   ` Eli Zaretskii
@ 2021-09-29 11:04     ` Alan Mackenzie
  2021-09-29 12:08       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 11+ messages in thread
From: Alan Mackenzie @ 2021-09-29 11:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, 50840

Hello, Eli.

On Mon, Sep 27, 2021 at 21:51:45 +0300, Eli Zaretskii wrote:
> > Date: Mon, 27 Sep 2021 18:35:50 +0000
> > Cc: 50840@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>,
> >   acm@muc.de
> > From: Alan Mackenzie <acm@muc.de>

> > > Is this true?  If so, a feature request: add a style to support that.
> > > If such a style already exists, please clarify the documentation so that
> > > users could understand which style does that.

> > > And one more nit: Can the 'comment-end' inserted after the end of a
> > > comment please keep _two_ spaces after the period that ends the last
> > > line of a comment?  Or at least heed the setting of
> > > 'sentence-end-double-space'?

> > Are we talking about C-c C-c (aka M-x comment-region) here?

> Yes, my use case, and the context in which I filed the bug report, was
> "C-c C-c".  Not only for the 2 spaces issue, but also for the comment
> style.

> > This command currently inserts comment-end (in C Mode, " */") at the
> > end of each line being commented, which will leave a single space
> > between what was the last "." on the line and the "*/".

> > We could surely check for an end of sentence character at EOL here, and
> > if we've got one, check that at least two spaces are left.  This again
> > would be something for lisp/newcomment.el.

> Probably.  That''s why Stefan was CC'ed as well.

OK.  Here's a provisional patch to lisp/newcomment.el that tries to fix
the two spaces at the end of a sentence issue.  I haven't got anywhere
with the main bug, yet.



diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index b458f0356d..8865613383 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -1162,7 +1162,8 @@ comment-region-internal
       (unless (or ce-sanitized (eolp)) (insert "\n") (indent-according-to-mode))
       (comment-with-narrowing beg end
 	(let ((min-indent (point-max))
-	      (max-indent 0))
+	      (max-indent 0)
+              ceeee extra-spaces eos-col)
 	  (goto-char (point-min))
 	  ;; Quote any nested comment marker
 	  (comment-quote-nested comment-start comment-end nil)
@@ -1174,6 +1175,25 @@ comment-region-internal
 		(unless (looking-at "[ \t]*$")
 		  (setq min-indent (min min-indent (current-indentation))))
 		(end-of-line)
+                ;; Do we need extra spaces at an end of sentence?
+                (setq ceeee (if (eobp) ce cce))
+                (setq extra-spaces
+                      (and ceeee
+                           (save-excursion
+                             (skip-chars-backward "  \t")
+                             (setq eos-col (current-column))
+                             (or (bolp) (backward-char))
+                             (looking-at (sentence-end)))
+                           (max (- (if sentence-end-double-space 2 1)
+                                   (- (current-column) eos-col)
+                                   (if ceeee
+                                       (progn
+                                         (string-match "^[  \t]*" ceeee)
+                                         (match-end 0)) ; # spaces in ce/cce.
+                                     0))
+                                0)))
+                (when (and extra-spaces (> extra-spaces 0))
+                  (move-to-column (+ (current-column) extra-spaces) t))
 		(setq max-indent (max max-indent (current-column)))
 		(not (or (eobp) (progn (forward-line) nil)))))
 

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-29 11:04     ` Alan Mackenzie
@ 2021-09-29 12:08       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-09-29 17:30         ` Alan Mackenzie
  0 siblings, 1 reply; 11+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-09-29 12:08 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, 50840

> OK.  Here's a provisional patch to lisp/newcomment.el that tries to fix
> the two spaces at the end of a sentence issue.  I haven't got anywhere
> with the main bug, yet.

Thanks, Alan.  This looks good.
Only one request: could you put the bulk of the new code into a separate function?
I'll see about the "main bug" ASAP,


        Stefan






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-29 12:08       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-09-29 17:30         ` Alan Mackenzie
  0 siblings, 0 replies; 11+ messages in thread
From: Alan Mackenzie @ 2021-09-29 17:30 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 50840

Hello, Stefan.

On Wed, Sep 29, 2021 at 08:08:43 -0400, Stefan Monnier wrote:
> > OK.  Here's a provisional patch to lisp/newcomment.el that tries to fix
> > the two spaces at the end of a sentence issue.  I haven't got anywhere
> > with the main bug, yet.

> Thanks, Alan.  This looks good.
> Only one request: could you put the bulk of the new code into a separate function?
> I'll see about the "main bug" ASAP,

How about the patch below?  It's not perfect - the move-to-column might
insert a tab at EOL, which will then be the Wrong Thing after the
function inserts the comment opener at the left margin.  Or something
like that.  Maybe we should bind indent-tabs-mode to nil around  the
move-to-column.

I'll leave the "main bug" to you, then.



diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index b458f0356d..5e8691890d 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -1124,6 +1124,27 @@ comment-add
       (* comment-add 1)
     (1- (prefix-numeric-value arg))))
 
+(defun comment--sentence-spaces (c-end)
+  "Add spaces at EOL in a comment if needed for an end of sentence.
+C-END, a string, is the comment ender for the current line.  When
+called, point must be at the end of the line, and will be left
+at the possibly changed EOL at the end of this function."
+  (let (extra-spaces eos-col)
+    (setq extra-spaces
+          (and (save-excursion
+                 (skip-chars-backward "  \t")
+                 (setq eos-col (current-column))
+                 (or (bolp) (backward-char))
+                 (looking-at (sentence-end)))
+               (max (- (if sentence-end-double-space 2 1)
+                       (- (current-column) eos-col)
+                       (progn
+                         (string-match "^[  \t]*" c-end)
+                         (match-end 0))) ; # spaces in ce/cce.
+                    0)))
+  (when (and extra-spaces (> extra-spaces 0))
+    (move-to-column (+ (current-column) extra-spaces) t))))
+
 (defun comment-region-internal (beg end cs ce
                                 &optional ccs cce block lines indent)
   "Comment region BEG .. END.
@@ -1174,6 +1195,8 @@ comment-region-internal
 		(unless (looking-at "[ \t]*$")
 		  (setq min-indent (min min-indent (current-indentation))))
 		(end-of-line)
+                (let ((c-end (if (eobp) ce cce)))
+                  (if c-end (comment--sentence-spaces c-end)))
 		(setq max-indent (max max-indent (current-column)))
 		(not (or (eobp) (progn (forward-line) nil)))))



>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-09-27  7:56 bug#50840: 28.0.50; Support GNU style of multiline comments in C source code Eli Zaretskii
  2021-09-27 18:35 ` Alan Mackenzie
@ 2021-10-01 19:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-10-01 19:50   ` Eli Zaretskii
  1 sibling, 1 reply; 11+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-10-01 19:42 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Alan Mackenzie, 50840

> 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.






^ permalink raw reply related	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-10-01 19:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-10-01 19:50   ` Eli Zaretskii
  2021-10-01 20:57     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-10-03 17:02     ` Juri Linkov
  0 siblings, 2 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-10-01 19:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, 50840

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: 50840@debbugs.gnu.org,  Alan Mackenzie <acm@muc.de>
> Date: Fri, 01 Oct 2021 15:42:32 -0400
> 
> > 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).

The actual use case is to convert a block of comments like this:

    // First line
    // continuation line with more text,
    // more text.  And another sentence
    // which continues here.

to our comment style.  I thought it was easy: first uncomment the
region, then comment the region using the proper style.  But there's
no style to take a sequence of lines like this:

     First line
     continuation line with more text,
     more text.  And another sentence
     which continues here.

and make it look like this:

     /* First line
        continuation line with more text,
        more text.  And another sentence
        which continues here.  */

> If you want comment-region to produce something like the above, then
> maybe a patch like the following would make sense?

It's late down here, so instead of applying the patch and playing with
it, let me ask you: will this patch support the above use case?

> 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.

The value nil doesn't sound like a good mnemonic.  I think the style I
have in mind is a multi-line style, just without the "* " leader on
each line.

Thanks.





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-10-01 19:50   ` Eli Zaretskii
@ 2021-10-01 20:57     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2021-10-03 17:02     ` Juri Linkov
  1 sibling, 0 replies; 11+ messages in thread
From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2021-10-01 20:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, 50840

> The actual use case is to convert a block of comments like this:
>
>     // First line
>     // continuation line with more text,
>     // more text.  And another sentence
>     // which continues here.
>
> to our comment style.  I thought it was easy: first uncomment the
> region, then comment the region using the proper style.  But there's
> no style to take a sequence of lines like this:
>
>      First line
>      continuation line with more text,
>      more text.  And another sentence
>      which continues here.
>
> and make it look like this:
>
>      /* First line
>         continuation line with more text,
>         more text.  And another sentence
>         which continues here.  */

Ah, now that makes sense, thanks.

>> If you want comment-region to produce something like the above, then
>> maybe a patch like the following would make sense?
> It's late down here, so instead of applying the patch and playing with
> it, let me ask you: will this patch support the above use case?

I don't think so because it will fail to indent the last 3 lines by the
extra 3 spaces.

>> 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.
> The value nil doesn't sound like a good mnemonic.  I think the style I
> have in mind is a multi-line style, just without the "* " leader on
> each line.

Right (though you do want to use a leader on each line, just one of "   "
instead of " * "), but `comment-styles` doesn't have a field to specify
that the comment-continuation should be empty, so I was going for
a cheaper solution.

I'll try again later for something less cheap ;-)


        Stefan






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-10-01 19:50   ` Eli Zaretskii
  2021-10-01 20:57     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2021-10-03 17:02     ` Juri Linkov
  2022-09-02 10:59       ` Lars Ingebrigtsen
  1 sibling, 1 reply; 11+ messages in thread
From: Juri Linkov @ 2021-10-03 17:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, Stefan Monnier, 50840

> But there's no style to take a sequence of lines like this:
>
>      First line
>      continuation line with more text,
>      more text.  And another sentence
>      which continues here.
>
> and make it look like this:
>
>      /* First line
>         continuation line with more text,
>         more text.  And another sentence
>         which continues here.  */

Recently lisp/newcomment.el was fixed in bug#47167 and bug#50226
to handle whitespace in 'comment-continue' with the multi-line style.
So you can get the above with:

  (setq-local comment-style 'multi-line
              comment-continue "   ")

PS: It doesn't add double space at the sentence end
since this is a separate feature.





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#50840: 28.0.50; Support GNU style of multiline comments in C source code
  2021-10-03 17:02     ` Juri Linkov
@ 2022-09-02 10:59       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2022-09-02 10:59 UTC (permalink / raw)
  To: Juri Linkov; +Cc: acm, Eli Zaretskii, Stefan Monnier, 50840

Juri Linkov <juri@linkov.net> writes:

> Recently lisp/newcomment.el was fixed in bug#47167 and bug#50226
> to handle whitespace in 'comment-continue' with the multi-line style.
> So you can get the above with:
>
>   (setq-local comment-style 'multi-line
>               comment-continue "   ")

Seems to work well, so I guess there isn't more to be done here, and I'm
closing this bug report.

> PS: It doesn't add double space at the sentence end
> since this is a separate feature.

Yup.





^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-09-02 10:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-27  7:56 bug#50840: 28.0.50; Support GNU style of multiline comments in C source code Eli Zaretskii
2021-09-27 18:35 ` Alan Mackenzie
2021-09-27 18:51   ` Eli Zaretskii
2021-09-29 11:04     ` Alan Mackenzie
2021-09-29 12:08       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-09-29 17:30         ` Alan Mackenzie
2021-10-01 19:42 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-01 19:50   ` Eli Zaretskii
2021-10-01 20:57     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-03 17:02     ` Juri Linkov
2022-09-02 10:59       ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).