bug-gnu-emacs
[Top][All Lists]
Advanced

[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





reply via email to

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