emacs-devel
[Top][All Lists]
Advanced

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

Re: Undesired interactive call of major mode command


From: Stephen Berman
Subject: Re: Undesired interactive call of major mode command
Date: Sat, 22 Nov 2014 23:19:44 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

On Sat, 22 Nov 2014 11:15:15 -0500 Stefan Monnier <address@hidden> wrote:

>> Bug#19112 reports an error resulting from typing `M-x todo-mode RET'.
>> The real issue (at least for me, as the maintainer of Todo mode) is not
>> the error but that todo-mode, although it is the "major mode command",
>> is not intended to be invoked interactively.
>
> There are several such major-modes.  It's OK if doing M-x foo-mode RET
> doesn't really "do the right thing" in that case, as long as it doesn't
> burp loudly.

The current burps are presumably too loud:
- If you call todo-mode in an empty non-file buffer, you get the error
  (wrong-type-argument arrayp nil) because todo-mode calls
  (file-truename (buffer-file-name)) (this was the error of bug#19112).
- If you call todo-mode in a non-empty buffer (whether or not it is
  visiting a file (except a Todo mode file, of course), you get the
  Todo mode error "Invalid or missing todo-categories sexp", because the
  buffer text does not conform to the Todo mode file format.
- If you call todo-mode in a buffer visiting an empty file, you get no
  error, but since the buffer is then in Todo mode, if you invoke any
  Todo mode command you'll get an error, again because of the invalid
  file format for Todo mode.

>> deal with this.  Three alternatives have occurred to me.
>> (i) Tell users: "Don't do that."
>
> That's a good first step.
>
>> (ii) Add to todo-mode the condition
>> (called-interactively-p 'any) and if it returns t either show a message
>> saying how to enter todo mode or simply call the intended (and
>> documented) Todo mode entry command (todo-show).
>
> Better just emit a message.
>
>> But this has the problem that, as soon as todo-mode is invoked, the
>> current buffer changes to Todo mode;
>
> Why is it a problem that the current buffer changed to todo-mode?

Well, it's not a problem in the sense of data loss or unrecoverable file
corruption, but if the user expected the buffer to be a usable Todo mode
buffer, he'll be disappointed.  On the other hand, I guess it's
reasonable to consider calling todo-mode in any buffer simply
user-error, like calling rmail-mode or an arbitrary programming mode.

So is it sufficient to fix the code to prevent the above errors and
display the message "Type M-x todo-show to enter Todo mode", and not
worry about the buffer changing to todo-mode?

Steve Berman



reply via email to

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