unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: PEDRO ANDRES ARANDA GUTIERREZ <paranda@it.uc3m.es>,
	emacs-devel@gnu.org, Yuri Khan <yuri.v.khan@gmail.com>
Subject: RE: Just a thought about comment-line
Date: Sun, 31 May 2020 11:05:55 -0700 (PDT)	[thread overview]
Message-ID: <b70cd763-a0bb-4331-82e6-99909ae44d6d@default> (raw)
In-Reply-To: <jwvo8q46nbe.fsf-monnier+emacs@gnu.org>

> > For block commenting, `comment-dwim' doesn't let
> > you nest and unnest a given level of commenting,
> 
> It automatically decides whether to comment or to uncomment, indeed.

Precisely.  It's a compromise, and not a great
one (IMO).  Better to have two commands, one for
block commenting and the other for end-of-line
commenting.

> > and control the number of comment chars used, etc.
> 
> Hmm... works for me.  At least `C-u 5 M-;` seems to correctly use 5 `#`
> chars to comment the region when used in a Makefile.

Yes.  But it can't provide comment-block nesting,
because it UNcomments any selected lines that are
already commented, instead of adding a level of
commenting for them. 

IMO, `comment-dwim' doesn't provide good behavior
for block commenting because it tries to do too
much conditionally.  I count 10 different behaviors
for it, from the doc string (if, unless, else, else,
if, if, else, else, if, else).

IF what you happen to want, when you hit that one
key (M-;), happens to coincide with what the
designer of that command thought you should want,
THEN it fits, for that occurrence.

It's not just that it has to correctly guess what
you mean.  It's also that _you_ have to guess what
it's guessing you mean. ;-)

(OK, using all combinations of its conditional
behavior often enough might give you finger
familiarity.  In that case, the only problem is
that it doesn't offer some commenting behaviors.)

As for most everything, the strength of a DWIM
command is also its weakness.  It tells you what
you want, instead of making you or letting you
say just what you want.  When it guesses what you
want correctly it can be handy.  But too often
it doesn't really let you say, and thus get, what
you want.

If Elisp, like Common Lisp, had a second comment
syntax for block commenting, i.e., so-called
"balanced" comment macro-char syntax (#|...|#),
then the behavior you'd want for that is pretty
much what command `comment-region-lines' provides.
It's handy for commenting-out and uncommenting
blocks of code, which can involve nested blocks.

https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node191.html#SECTION002614000000000000000

> >> FWIW I agree with you: a region that ends at the physical start of
> >> line, before indentation, should not be considered to include that
> >> line.
> > FWIW, I too agree about this.
> 
> Right, as a general rule, the LF char belongs to the line that it
> terminates, so a position at BOL is really "between lines".
> Of course, that would require a special case when START=END=BOL.

That special case is what `comment-region-lines'
handles.  It just does this:
(comment-region BOL EOL PREFIX-ARG).



  reply	other threads:[~2020-05-31 18:05 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-31  7:39 Just a thought about comment-line PEDRO ANDRES ARANDA GUTIERREZ
2020-05-31  9:57 ` Yuri Khan
2020-05-31 16:58   ` Drew Adams
2020-05-31 17:15     ` Stefan Monnier
2020-05-31 18:05       ` Drew Adams [this message]
2020-05-31 19:05         ` Stefan Monnier
2020-05-31 21:53           ` Drew Adams
2020-05-31 17:42     ` Dmitry Gutov
2020-05-31 18:08       ` Drew Adams
2020-05-31 18:31         ` Dmitry Gutov
2020-05-31 21:54           ` Drew Adams
2020-06-01  5:18             ` PEDRO ANDRES ARANDA GUTIERREZ
2020-06-01  5:29               ` PEDRO ANDRES ARANDA GUTIERREZ
2020-05-31 14:40 ` Eli Zaretskii
2020-05-31 16:53 ` Drew Adams
2020-06-01  6:14 ` Clément Pit-Claudel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b70cd763-a0bb-4331-82e6-99909ae44d6d@default \
    --to=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=paranda@it.uc3m.es \
    --cc=yuri.v.khan@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).