unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Artur Malabarba <bruce.connor.am@gmail.com>
To: Drew Adams <drew.adams@oracle.com>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: [PATCH] newcomment.el (comment-line): New command.
Date: Sun, 1 Feb 2015 17:48:30 -0200	[thread overview]
Message-ID: <CAAdUY-J-MAF0E3_vQ2xO0yxxq-VR7Z8qnuL49_=y6En0ezZQZA@mail.gmail.com> (raw)
In-Reply-To: <68eca5a1-04b6-462a-bf70-4abb02b72460@default>

FWIW, the command I suggested is indeed repeatable because it moves
`forward-line' after commenting the line. So you can just invoke it
repeatedly to comment several lines (for those who don't use prefix
arguments).

I blogged about this feature this Monday [1], and there was an
above-average amount of comments saying "I do something similar" (7 is
by no means a crowd, but is above average :-P). This is a slight
indicator that people do expect this feature. Also, as I mentioned
before, the people coming from simpler IDEs are sure to miss this
feature. Which is a shame given how simple it is to implement.

[1]: http://endlessparentheses.com/implementing-comment-line.html

Just to clarify, this is not meant as replacement for comment-dwim,
this is a complement. For most languages, commenting a line is a very
common action, and having to do `C-a C-SPC C-n M-;' for that is sad to
say the least. comment-line is both faster and more natural when one
is commenting 1 or a handful of lines.

I would like to politely insist this gets included into newcomment.el
(with a keybind). I can do it myself if I get approval on a keybind.
I'd like something repeatable, like C-; or C-M-; but I'm also
receptive of Drew's suggestion of C-x C-;


Below is the most recent version, but I can also provide a version
which acts on active region (see link).

----------------------------------------

(defun endless/comment-line (n)
  "Comment or uncomment current line and leave point after it.
With positive prefix, apply to N lines including current one.
With negative prefix, apply to -N lines above."
  (interactive "p")
  (let ((range (list (line-beginning-position)
                     (goto-char (line-end-position n)))))
    (comment-or-uncomment-region
     (apply #'min range)
     (apply #'max range)))
  (forward-line 1)
  (back-to-indentation))


2015-01-27 0:53 GMT-02:00 Drew Adams <drew.adams@oracle.com>:
>>>    C-a C-SPC C-n M-;
>>>
>>> works for me when I need it.  M-x comment-line RET is much longer (even
>>> if you shorten it with something like partial-completion), so for such
>>> a command to make sense, you'd need a key binding for it.
>>
>> Yes, you would. I didn't mention keybinds yet, because I was tackling this by parts.
>>
>> I bind it to `C-;'. Another viable key might be `C-M-;'. But it definitely
>> needs a key.
>>
>> When you want to comment/uncomment something between 1 and 9 lines, it
>> always requires less keypresses than the M-; alternative.
>> Besides, commenting a single line is such a common scenario, I find it
>> deserves a single key instead of a 4 key combo.
>> It's also something that a lot of IDE's assign to a hotkey, so I'm sure
>> I'm not the only one that finds it useful. :-) And people who come from
>> other editors are sure to miss it.
>
> FWIW, I use a variant of `comment-region' (below).  I bind it to
> `C-x C-;'.  (The other, repeatable, keys you mention are too good to
> waste on a non-repeating command.)
>
> (defun comment-region-lines (beg end &optional arg)
>   "Like `comment-region' (which see), but comment/uncomment whole lines."
>   (interactive "*r\nP")
>   (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
>   (let ((bol  (save-excursion (goto-char beg)
>                               (line-beginning-position)))
>         (eol  (save-excursion (goto-char end)
>                               (if (bolp) (point) (line-end-position)))))
>     (comment-region bol eol arg)))
>
> If the region is empty then it comments the current line.
>
> (But it does not distinguish active from inactive region.
> That would be another possible behavior choice.)
>
> I use this all the time.  I use `M-;' (`comment-dwim') only
> for an end-of-line comment (as in the good old days).  I find
> that `M-;' is quite poor for commenting and uncommenting the
> region (including nesting and unnesting comment levels etc.).
>
> `comment-region' is much better for that, IMO.  And as enhanced
> above, it comments whole lines, which is what I typically want.



  reply	other threads:[~2015-02-01 19:48 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-26 19:17 [PATCH] newcomment.el (comment-line): New command Artur Malabarba
2015-01-26 22:41 ` Stefan Monnier
2015-01-27  2:35   ` Artur Malabarba
2015-01-27  2:53     ` Drew Adams
2015-02-01 19:48       ` Artur Malabarba [this message]
2015-02-01 21:40         ` Drew Adams
2015-02-02 12:02           ` Artur Malabarba
2015-02-02  7:01         ` Thierry Volpiatto
2015-02-02 17:17         ` Stefan Monnier

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='CAAdUY-J-MAF0E3_vQ2xO0yxxq-VR7Z8qnuL49_=y6En0ezZQZA@mail.gmail.com' \
    --to=bruce.connor.am@gmail.com \
    --cc=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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).