* cua: quiet warning messages @ 2003-06-16 17:04 Michael Mauger 2003-06-16 18:47 ` Luc Teirlinck 0 siblings, 1 reply; 8+ messages in thread From: Michael Mauger @ 2003-06-16 17:04 UTC (permalink / raw) 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. This patch corrects this by passing the explicit argument. Index: emacs/lisp/emulation/cua-base.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/emulation/cua-base.el,v retrieving revision 1.24 diff -b -u -r1.24 cua-base.el --- emacs/lisp/emulation/cua-base.el 18 Apr 2003 22:49:20 -0000 1.24 +++ emacs/lisp/emulation/cua-base.el 14 Jun 2003 23:20:19 -0000 @@ -1204,9 +1204,9 @@ (and (boundp 'delete-selection-mode) delete-selection-mode) (and (boundp 'pc-selection-mode) pc-selection-mode))) (if (and (boundp 'delete-selection-mode) delete-selection-mode) - (delete-selection-mode)) + (delete-selection-mode -1)) (if (and (boundp 'pc-selection-mode) pc-selection-mode) - (pc-selection-mode)) + (pc-selection-mode -1)) (setq transient-mark-mode (and cua-mode (if cua-highlight-region-shift-only (not cua--explicit-region-start) __________________________________ Do you Yahoo!? SBC Yahoo! DSL - Now only $29.95 per month! http://sbc.yahoo.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-16 17:04 cua: quiet warning messages Michael Mauger @ 2003-06-16 18:47 ` Luc Teirlinck 2003-06-16 19:12 ` Stefan Monnier 0 siblings, 1 reply; 8+ messages in thread From: Luc Teirlinck @ 2003-06-16 18:47 UTC (permalink / raw) Cc: emacs-devel 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. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-16 18:47 ` Luc Teirlinck @ 2003-06-16 19:12 ` Stefan Monnier 2003-06-16 19:41 ` Luc Teirlinck 2003-06-22 3:01 ` Richard Stallman 0 siblings, 2 replies; 8+ messages in thread From: Stefan Monnier @ 2003-06-16 19:12 UTC (permalink / raw) Cc: emacs-devel > 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. That's exactly how modes defined by define-minor-mode behave. > 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 `-'. That's also how define-minor-mode behaves. > 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. The 90% of the cases where a minor mode is called non-interactively with a nil argument is when an unsuspecting user says (add-hook 'foo-mode-hook 'bar-minor-mode) The warning is thus there so that when it ends up turning the mode OFF, it tells the user that it might not be doing what the user expected. If the user (or author) really meant to turn the mode off, she should pass a -1 argument to make it clear that she knows what she's doing. Stefan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-16 19:12 ` Stefan Monnier @ 2003-06-16 19:41 ` Luc Teirlinck 2003-06-22 3:01 ` Richard Stallman 1 sibling, 0 replies; 8+ messages in thread From: Luc Teirlinck @ 2003-06-16 19:41 UTC (permalink / raw) Cc: emacs-devel Stefan Monnier wrote: > Note that _any_ symbol other than `nil' or `-' should turn the mode > _on_. 'toggle is a symbol, it is not `nil' and not `-'. That's also how define-minor-mode behaves. I defined a minor mode, vis-mode using define-minor-mode. M-: (vis-mode 'toggle) _does_ toggle. The 90% of the cases where a minor mode is called non-interactively with a nil argument is when an unsuspecting user says (add-hook 'foo-mode-hook 'bar-minor-mode) The warning is thus there so that when it ends up turning the mode OFF, it tells the user that it might not be doing what the user expected. If the user (or author) really meant to turn the mode off, she should pass a -1 argument to make it clear that she knows what she's doing. If foo-mode always turns bar-minor-mode on, then the above code seems intentional and should not produce a warning. Note that, in your example foo-mode-hook is probably a normal hook, so you can not just pass an explicit argument, you have to define your own function, disable-bar-minor-mode or whatever. The user may not know how to do that and (add-hook 'foo-mode-hook 'bar-minor-mode) might actually be stylistically inferior, but works. For inclusion in Emacs' source code I _would_ define a disable-bar-minor-mode instead, because it seems more robust, but why be that stylistically picky for a user's .emacs. How does she turn the warning off if she gets tired of it? If the current behavior would not be changed, then _at least_ it should be _documented_ in _all_ places I mentioned. Sincerely, Luc. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-16 19:12 ` Stefan Monnier 2003-06-16 19:41 ` Luc Teirlinck @ 2003-06-22 3:01 ` Richard Stallman 2003-06-23 17:00 ` Stefan Monnier 1 sibling, 1 reply; 8+ messages in thread From: Richard Stallman @ 2003-06-22 3:01 UTC (permalink / raw) Cc: emacs-devel > Note that _any_ symbol other than `nil' or `-' should turn the mode > _on_. `toggle' is a symbol, it is not `nil' and not `-'. That's also how define-minor-mode behaves. I don't think so. This code ;; Use `toggle' rather than (if ,mode 0 1) so that using ;; repeat-command still does the toggling correctly. (interactive (list (or current-prefix-arg 'toggle))) (setq ,mode (cond ((eq arg 'toggle) (not ,mode)) seems to handling `toggle' by toggling the mode, not by turning it off, which the spec says it should do. The warning is thus there so that when it ends up turning the mode OFF, it tells the user that it might not be doing what the user expected. If the user (or author) really meant to turn the mode off, she should pass a -1 argument to make it clear that she knows what she's doing. You are right, and yet it is also true that this contradicts the spec. The spec is not cast in stone; we might want to change it. But changes in such a general and basic spec should be thought about as such, and I don't think they have been. Can I have your comments and proposals for what to do? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-22 3:01 ` Richard Stallman @ 2003-06-23 17:00 ` Stefan Monnier 2003-07-01 15:17 ` Richard Stallman 0 siblings, 1 reply; 8+ messages in thread From: Stefan Monnier @ 2003-06-23 17:00 UTC (permalink / raw) Cc: Stefan Monnier > > Note that _any_ symbol other than `nil' or `-' should turn the mode > > _on_. `toggle' is a symbol, it is not `nil' and not `-'. > > That's also how define-minor-mode behaves. > > I don't think so. This code > > ;; Use `toggle' rather than (if ,mode 0 1) so that using > ;; repeat-command still does the toggling correctly. > (interactive (list (or current-prefix-arg 'toggle))) > (setq ,mode > (cond > ((eq arg 'toggle) (not ,mode)) > > seems to handling `toggle' by toggling the mode, > not by turning it off, which the spec says it should do. Indeed. Although I doubt anybody expects (minor-mode 'toggle) to turn the mode off unconditionally. > changes in such a general and basic spec should be thought about as > such, and I don't think they have been. > > Can I have your comments and proposals for what to do? As far as I know, minor modes are only ever called with the following arguments: - integers - nil - t - a one-element list containing an integer - toggle This last one is new and only happens when the minor mode is called interactively. I think the doc should only describe the behavior is the above cases and leave the others unspecified. It could even not specify the behavior in the `toggle' case since it's only used internally between the interactive spec and the minor mode's body. After all, why should (minor-mode (make-hash-table)) turn the mode off rather than on and why should the doc specify it at all ? Stefan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-06-23 17:00 ` Stefan Monnier @ 2003-07-01 15:17 ` Richard Stallman 2003-07-04 0:47 ` Stefan Monnier 0 siblings, 1 reply; 8+ messages in thread From: Richard Stallman @ 2003-07-01 15:17 UTC (permalink / raw) Cc: monnier+gnu/emacs As far as I know, minor modes are only ever called with the following arguments: - integers - nil - t - a one-element list containing an integer - toggle I think there are others, such as the symbol `-'. This last one is new and only happens when the minor mode is called interactively. One problem with specifying this behavior for `toggle' is that many minor modes don't currently implement it. They would need to be changed. It could even not specify the behavior in the `toggle' case since it's only used internally between the interactive spec and the minor mode's body. That makes it feasible. How about text for modes.texi? The command should accept one optional argument. If the argument is @code{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 @code{t}, or a list whose @sc{car} is one of those. It should turn the mode off if the argument is a negative integer or zero, the symbol @code{-}, or a list whose @sc{car} is one of those. The meaning of other arguments is not specified. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: cua: quiet warning messages 2003-07-01 15:17 ` Richard Stallman @ 2003-07-04 0:47 ` Stefan Monnier 0 siblings, 0 replies; 8+ messages in thread From: Stefan Monnier @ 2003-07-04 0:47 UTC (permalink / raw) Cc: monnier+gnu/emacs > As far as I know, minor modes are only ever called with the > following arguments: > > - integers > - nil > - t > - a one-element list containing an integer > - toggle > > I think there are others, such as the symbol `-'. I can't remember seeing it, but that sounds right. > How about text for modes.texi? > > > > The command should accept one optional argument. If the argument is > @code{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 @code{t}, or a list whose @sc{car} is one > of those. It should turn the mode off if the argument is a negative > integer or zero, the symbol @code{-}, or a list whose @sc{car} is one > of those. The meaning of other arguments is not specified. Sounds perfect to me, Stefan ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-07-04 0:47 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-06-16 17:04 cua: quiet warning messages Michael Mauger 2003-06-16 18:47 ` Luc Teirlinck 2003-06-16 19:12 ` Stefan Monnier 2003-06-16 19:41 ` Luc Teirlinck 2003-06-22 3:01 ` Richard Stallman 2003-06-23 17:00 ` Stefan Monnier 2003-07-01 15:17 ` Richard Stallman 2003-07-04 0:47 ` Stefan Monnier
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).