emacs-devel
[Top][All Lists]
Advanced

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

Re: cua: quiet warning messages


From: Luc Teirlinck
Subject: Re: cua: quiet warning messages
Date: Mon, 16 Jun 2003 13:47:58 -0500 (CDT)

Michael Mauger wrote:

   I've noticed that when CUA starts up under 21.3.50 that it issues warning
   messages when delete-selection-mode and pc-selection-mode are disabled. 
   Actually the error is issued by the modes themselves.  The warnings are:

   Toggling delete-selection-mode off; better pass an explicit argument.
   Toggling pc-selection-mode off; better pass an explicit argument.

These warnings are issued by define-minor-mode.  As a consequence,
modes defined by define-minor-mode behave differently from modes
defined by other means.  The behavior of these minor modes is
inconsistent with the behavior as explained in the Emacs manual:

    With no argument, the function turns the mode on if it was
    off and off if it was on.  This is known as "toggling".  A positive
    argument always turns the mode on, and an explicit zero argument or a
    negative argument always turns it off.

Elisp manual:

     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).  Otherwise, it should turn the mode on if the
     argument is a positive integer, a symbol other than `nil' or `-',
     or a list whose CAR is such an integer or symbol; it should turn
     the mode off otherwise.

Note that _any_ symbol other than `nil' or `-' should turn the mode
_on_.  'toggle is a symbol, it is not `nil' and not `-'.

>From the Elisp documentation of define-minor-mode:

     This macro defines a new minor mode whose name is MODE (a
     symbol).  It defines a command named MODE to toggle the minor
     mode, with DOC as its documentation string.

>From the documentation string of define-minor-mode:

    Define a new minor mode MODE.
    This function defines the associated control variable MODE, keymap
    MODE-map, toggle command MODE, and hook MODE-hook.

Nowhere anywhere any mention whatsoever about the argument 'toggle
which according to define-minor-mode's _code_ seems to be the only
stylistically acceptable way to toggle a minor mode non-interactively.
You have to read the code of define-minor-mode to find that out.

If an author fails to carefully read the code and follows the
stylistic conventions documented in all relevant manuals, as well as
the documentation string of define-minor-mode itself, and fails to
follow this completely undocumented stylistic "convention" instead,
define-minor-mode expresses its distaste for the _programmer's_ style,
not through a compiler warning, but by printing an error message to
the _user_ complaining about the author's style.  This seems highly
unusual.

I believe that the bug is in define-minor-mode and should be corrected
there.

Sincerely,

Luc.





reply via email to

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