[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#41793: `comment-only-p' erroneously flags blank lines as comments
From: |
Toby Cubitt |
Subject: |
bug#41793: `comment-only-p' erroneously flags blank lines as comments |
Date: |
Wed, 10 Jun 2020 19:52:51 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Wed, Jun 10, 2020 at 06:53:31PM +0100, Toby Cubitt wrote:
> In GNU Emacs 26.3 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.16)
> of 2020-04-28
>
> On the following text, with point at |
> (comment-only-p (point) (1+ (point)))
> returns t when it should probably return nil:
>
> "
> |
>
> test"
>
> This impacts commands like `comment-or-uncomment-region'.
>
> This is because the current implementation of `comment-only-p' fails to check
> the return value of (comment-forward):
>
> The correct implementation should probably be:
[snip]
Gah. That attempt breaks flagging of comments separated by whitespace-only
lines. Maybe this?
(defun comment-only-p (beg end)
"Return non-nil if the text between BEG and END is all comments."
(if (string-blank-p (buffer-substring beg end)) nil
(save-excursion
(goto-char beg)
(comment-forward (point-max))
(<= end (point)))))
This fix successfully makes `comment-or-uncomment-region' call `comment-region'
when fed empty lines, instead of calling `uncomment-region' (which seems wrong).
It doesn't fix the main issue I was trying to address, namely that
`comment-or-uncomment-region' fails to comment out a region consisting only of
blank lines, even when `comment-empty-lines' is t. Without the above fix, it
calls `uncomment-region' which does nothing as there's nothing to comment. With
the above fix, it calls `comment-region'. But the latter refuses to comment out
the lines, throwing a "Nothing to comment" error.
Fixing that (assuming it's considered a bug) would require more changes to
`comment-region-default' and `comment-region-internal'.
The use-case for this was editing a LaTeX document, where empty lines are
semantically significant (they demark paragraph breaks). It's fairly common
(especially when editing co-authored documents) to comment out the empty lines
in order to run two paragraphs together, whilst keeping the commented-out empty
lines in the source so it's easy to revert.
Best,
Toby
--
Dr T. S. Cubitt
Reader (Associate Professor) in Quantum Information
Royal Society University Research Fellow
Department of Computer Science
University College London
email: tsc25@cantab.net
web: www.dr-qubit.org