[Top][All Lists]

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

RE: one key-press to comment out lines of code?

From: Drew Adams
Subject: RE: one key-press to comment out lines of code?
Date: Wed, 30 Apr 2014 13:54:45 -0700 (PDT)

> > I prefer to use `comment-region', which I bind to `C-x ;'.

Sorry, I mistyped the key I use.  I meant `C-x C-;' - hold down
Control and hit `x ;' (or `u x ;', to uncomment).

> Why not use M-; for that as well?  C-SPC, move point, M-; last.

Read what I wrote.  I already said why I use `comment-region'.
You are free to use anything you like.  And I started out by
saying that someone else would no doubt laud `M-;'.

`comment-region' lets you uncomment or comment (any number of
comment chars), whatever is selected (whether some or all of
the selected text is already commented or not).

I do also use `M-;', but only for what it has always done,
even when it was bound to `indent-for-comment': add/indent
inline comments.  I really have no use for the rest of what
it tries to do.  YMMV.

> > To uncomment, provide a plain prefix arg (`C-u'):
> > `C-u C-x ;'.  To comment using N comment chars, use a
> > numeric prefix arg: `C-3 C-x ;'.  (And you can use
> > that to nest commented text.)
> Yeah, but again, I think it is much simpler to C-SPC,
> move point, and M-; (if the region is commented) to
> uncomment.

You need to select the text in any case.  I don't consider
that `M-;' is "much simpler" than `C-x C-;'.  But you can
of course bind `comment-region' to whatever key you like.
Or not.

But no; sorry.  `comment-dwim' simply does NOT do what
`comment-region' does.

(define-key isearch-mode-map (kbd "C-y C-a") 'foo)
;;; (define-key isearch-mode-map "\C-a" nil)

Select both lines as the region.  Each of `M-;' and `C-x C-;'
produce this result:

;; (define-key isearch-mode-map (kbd "C-y C-a") 'foo)
;; ;;; (define-key isearch-mode-map "\C-a" nil)

But `C-u C-x C-;' produces this:

(define-key isearch-mode-map (kbd "C-y C-a") 'foo)
(define-key isearch-mode-map "\C-a" nil)

It uncomments one level.  It always uncomments.

`M-;' cannot uncomment the commented lines in the region
when there are also uncommented lines.

Now select only the second line, the one which is commented:

;;; (define-key isearch-mode-map "\C-a" nil)

Now `M-;' uncomments it.  `C-u C-x C-;' uncomments it too
(it does so always).  `C-2 M-;' removes two of the semicolons.

`C-x C-;' still comments here, nesting the existing
block comment, just as in the case where the selected
text contained an uncommented line:

;; ;;; (define-key isearch-mode-map "\C-a" nil)

And it uncomments just one level of nesting, giving this:

;;; (define-key isearch-mode-map "\C-a" nil)

from this:

;; ;;; (define-key isearch-mode-map "\C-a" nil)

`comment-region' does not try to outsmart you: a plain
`C-u' uncomments one level.  No prefix arg comments one level.
A positive prefix arg comments using that many `;'.  A negative
prefix arg uncomments that many `;'.

It is especially the behavior wrt nesting and unnesting of
block comments that I appreciate.  I often comment out a
block of text and then comment out some more, surrounding
text. Nesting of the commented lines means I can quickly
unnest one level, to return to the previous state.
(And yes, like the other Emacs comment functions,
`comment-region' is not limited to Lisp code.  `M-x' is not
special in this regard.)

> So for all three cases: M-;.

No - see above.

Most Emacs users already know about `M-;'.  Far fewer know
about `comment-region', which is not bound to a key by default.
Which is why I mentioned it - in case it helps someone.

I assumed that there are users like you who take a quick
look (or no look) at `comment-region' and figure that
`comment-dwim' does everything it does - everything they need.

A DWIM command is often limited this way; it is a compromise.
Whether `comment-dwim' is your cup of tea is up to you.

reply via email to

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