On Wed, Aug 12, 2009 at 9:15 PM, Drew Adams <address@hidden>
> Is there somewhere in elisp manual that
> explicitly explains/warns that commands that turn minor mode on/off
> stick to 1 and 0 and consider t and nil not acceptable argument?
(elisp) Minor Mode Conventions:
* Define a command whose name is the same as the mode variable. Its
job is to enable and disable the mode by setting the variable.
The command should accept one optional argument. If the argument
is `nil', it should toggle the mode (turn it on if it is off, and
off if it is on). It should turn the mode on if the argument is a
positive integer, the symbol `t', or a list whose CAR is one of
those. It should turn the mode off if the argument is a negative
integer or zero, the symbol `-', or a list whose CAR is a negative
integer or zero. The meaning of other arguments is not specified.
Here is an example taken from the definition of
`transient-mark-mode'. It shows the use of `transient-mark-mode'
as a variable that enables or disables the mode's behavior, and
also shows the proper way to toggle, enable or disable the minor
mode based on the raw prefix argument value.
(if (null arg) (not transient-mark-mode)
(> (prefix-numeric-value arg) 0)))
Any positive integer is the same as 1.
Any negative integer is the same as 0.
t is the same as 1.
`-' is the same as 0.
(4) is the same as 1.
(-4) is the same as 0.
(0) is the same as 0.
(t) is the same as 1.
(nil) and (-): behavior not conventionally defined
nil always toggles. It lets you do just `M-x foo' to toggle (the most common
You can do `C-u M-x foo' or `C-9 M-x foo' to turn it on and `C-- M-x foo' to
turn it off.