Philipp Stephani schrieb am So., 16. Okt. 2016 um 20:13 Uhr: > Drew Adams schrieb am So., 16. Okt. 2016 um > 18:12 Uhr: > > > (define-minor-mode foo-mode nil) > > its docstring will be > > > > "Toggle Foo mode on or off. > > With a prefix argument ARG, enable Foo mode if ARG is > > positive, and disable it otherwise. If called from Lisp, enable > > the mode if ARG is omitted or nil, and toggle it if ARG is ‘toggle’." > > > > This appears to indicate that (foo-mode 'banana) > > should disable foo-mode, but it enables it. > > No, it does not suggest that. But to be clearer, it should > probably explicitly address the non-nil and non-`toggle' case, > like so: > > If called from Lisp, enable the mode if ARG is omitted or > nil, toggle it if ARG is ‘toggle’, and disable it if ARG is > any other non-nil value. > > (And place the Lisp description in a separate paragraph > from the interactive description.) > > > I think minor modes should simply not allow anything but > > integers and 'toggle for ARG, avoiding this confusion. > > Why? There is no confusion possible, once the doc string > explicitly speaks about all possible argument values. > > Why would you change the behavior, instead of just clarifying > the doc? > > > I generally prefer the behavior to be as strict as possible. Consider > (foo-mode 'disable) > If you read such code, do you assume that this enables foo-mode? > However, in this case I guess it's too late, and fixing the documentation > is indeed more appropriate. BTW, the Elisp manual has the same issue: > > The mode command should accept one optional argument. If called > interactively with no prefix argument, it should toggle the mode > (i.e., enable if it is disabled, and disable if it is enabled). If > called interactively with a prefix argument, it should enable the > mode if the argument is positive and disable it otherwise. > > If the mode command is called from Lisp (i.e., non-interactively), > it should enable the mode if the argument is omitted or ‘nil’; it > should toggle the mode if the argument is the symbol ‘toggle’; > otherwise it should treat the argument in the same way as for an > interactive call with a numeric prefix argument, as described > above. > > Probably this should be reworded so that the Lisp case doesn't refer to > the interactive case at all. Making the documentation obvious is more > important than avoiding repetition. > Attached a patch that uses the wording from `define-minor-mode'.