unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
@ 2020-06-05 20:39 Drew Adams
  2020-06-06  0:01 ` Drew Adams
  2020-06-06  6:13 ` Eli Zaretskii
  0 siblings, 2 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-05 20:39 UTC (permalink / raw)
  To: 41727

The doc needs improvement when describing calling the mode from Lisp.

1. The doc string of `define-minor-mode' says this:

     When called from Lisp, the mode command toggles the mode if the
     argument is `toggle', disables the mode if the argument is a
     non-positive integer, and enables the mode otherwise (including if
     the argument is omitted or nil or a positive integer).

   This is wrong (incomplete).  It disables the mode if the
   `prefix-numeric-value' of ARG <= 0, not if ARG is a non-positive
   integer.  The code does this: (prefix-numeric-value arg).  So if you
   pass the symbol `-' as ARG then the mode is disabled.

1. The (default) doc string produced by `define-minor-mode' says this:

     If called from Lisp, enable the mode if ARG is omitted or nil, and
     toggle it if ARG is `toggle'.

   Again, this is wrong (incomplete).  It doesn't say that if ARG is
   non-nil other than `toggle' then disable the mode if the
   `prefix-numeric-value' of ARG <= 0, and enable it if the
   `prefix-numeric-value' of ARG > 0.

3. The Elisp manual doc says this (node `Defining Minor Modes'):

     From Lisp, an argument of 'toggle' toggles the mode, whereas an
     omitted or 'nil' argument enables the mode.

   Again, this is wrong (incomplete).

   * It says nothing about how the mode is disabled when called from
     Lisp.  It should say that an ARG whose `prefix-numeric-value' is
     non-positive disables the mode.

   * It should say that an ARG whose `prefix-numeric-value' is
     non-positive enables the mode.


In GNU Emacs 26.3 (build 1, x86_64-w64-mingw32)
 of 2019-08-29
Repository revision: 96dd0196c28bc36779584e47fffcca433c9309cd
Windowing system distributor `Microsoft Corp.', version 10.0.18362
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-05 20:39 bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands Drew Adams
@ 2020-06-06  0:01 ` Drew Adams
  2020-06-07 10:04   ` Michael Heerdegen
  2020-06-06  6:13 ` Eli Zaretskii
  1 sibling, 1 reply; 25+ messages in thread
From: Drew Adams @ 2020-06-06  0:01 UTC (permalink / raw)
  To: 41727

For the (default) doc string of a minor mode,
I think something like this should take care of it.

 Interactively, toggle the mode.  But with a prefix arg, enable the
 mode if the numeric value is positive, and disable it otherwise.

 If called from Lisp, toggle the mode if the optional arg is 'toggle'.
 Otherwise, handle it as the prefix arg: disable the mode if
 `prefix-numeric-value' of the arg is non-positive, and enable it
 otherwise.  This implies that if the arg is nil or absent then enable
 the mode.
___

Ideally, we would have a way to provide a custom doc
string that also included this info somehow.

Maybe the doc string of `define-minor-mode' could
show the default doc string and suggest that if you
provide your own doc string you include the same or
similar information, if appropriate.

(And it might generally be good if the Lisp info were
at the end of the doc string.)





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-05 20:39 bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands Drew Adams
  2020-06-06  0:01 ` Drew Adams
@ 2020-06-06  6:13 ` Eli Zaretskii
  2020-06-06 16:45   ` Drew Adams
  1 sibling, 1 reply; 25+ messages in thread
From: Eli Zaretskii @ 2020-06-06  6:13 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

> Date: Fri, 5 Jun 2020 13:39:27 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
> 
> The doc needs improvement when describing calling the mode from Lisp.
> 
> 1. The doc string of `define-minor-mode' says this:
> 
>      When called from Lisp, the mode command toggles the mode if the
>      argument is `toggle', disables the mode if the argument is a
>      non-positive integer, and enables the mode otherwise (including if
>      the argument is omitted or nil or a positive integer).

It actually says this:

  Interactively with no prefix argument, it toggles the mode.
  A prefix argument enables the mode if the argument is positive,
  and disables it otherwise.

  When called from Lisp, the mode command toggles the mode if the
  argument is ‘toggle’, disables the mode if the argument is a
  non-positive integer, and enables the mode otherwise (including
  if the argument is omitted or nil or a positive integer).


> 3. The Elisp manual doc says this (node `Defining Minor Modes'):
> 
>      From Lisp, an argument of 'toggle' toggles the mode, whereas an
>      omitted or 'nil' argument enables the mode.

It actually says this:

     The toggle command takes one optional (prefix) argument.  If called
     interactively with no argument it toggles the mode on or off.  A
     positive prefix argument enables the mode, any other prefix
     argument disables it.  From Lisp, an argument of ‘toggle’ toggles
     the mode, whereas an omitted or ‘nil’ argument enables the mode.

Are you reading obsolete docs?





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-06  6:13 ` Eli Zaretskii
@ 2020-06-06 16:45   ` Drew Adams
  2020-06-06 18:56     ` Eli Zaretskii
  0 siblings, 1 reply; 25+ messages in thread
From: Drew Adams @ 2020-06-06 16:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 41727

> > The doc needs improvement when describing calling the mode from Lisp.
> >
> > 1. The doc string of `define-minor-mode' says this:
> >
> >      When called from Lisp, the mode command toggles the mode if the
> >      argument is `toggle', disables the mode if the argument is a
> >      non-positive integer, and enables the mode otherwise (including if
> >      the argument is omitted or nil or a positive integer).
> 
> It actually says this:
>   Interactively with no prefix argument, it toggles the mode.
>   A prefix argument enables the mode if the argument is positive,
>   and disables it otherwise.
> 
>   <snipped: verbatim quote of the text I cited about Lisp call>

Yes, and?  The point was about what the doc says about
a call from Lisp.

> > 3. The Elisp manual doc says this (node `Defining Minor Modes'):
> >
> >      From Lisp, an argument of 'toggle' toggles the mode, whereas an
> >      omitted or 'nil' argument enables the mode.
> 
> It actually says this:
>      The toggle command takes one optional (prefix) argument.  If called
>      interactively with no argument it toggles the mode on or off.  A
>      positive prefix argument enables the mode, any other prefix
>      argument disables it.
>
>      <snipped: verbatim quote of the text I cited about Lisp call>

Yes, and?  The point was about what the doc says about
a call from Lisp.

The bug report doesn't find fault with the description of
the interactive behavior.

And my follow-up message suggests text for the doc string
that I think is accurate and complete, and it improves the
description of the interactive handling as well.

The bug report is about the content/message/info, though,
not the wording.  If you don't like the wording of my
suggestion, some other wording that provides as accurate
and complete a description will be fine.  Thx.

> Are you reading obsolete docs?

I'm reading the 26.3 docs, as suggested by the report:

In GNU Emacs 26.3 (build 1, x86_64-w64-mingw32)
 of 2019-08-29
Repository revision: 96dd0196c28bc36779584e47fffcca433c9309cd
Windowing system distributor `Microsoft Corp.', version 10.0.18362
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''






^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-06 16:45   ` Drew Adams
@ 2020-06-06 18:56     ` Eli Zaretskii
  2020-06-07 10:08       ` Michael Heerdegen
                         ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Eli Zaretskii @ 2020-06-06 18:56 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

> Date: Sat, 6 Jun 2020 09:45:46 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: 41727@debbugs.gnu.org
> 
> > > The doc needs improvement when describing calling the mode from Lisp.
> > >
> > > 1. The doc string of `define-minor-mode' says this:
> > >
> > >      When called from Lisp, the mode command toggles the mode if the
> > >      argument is `toggle', disables the mode if the argument is a
> > >      non-positive integer, and enables the mode otherwise (including if
> > >      the argument is omitted or nil or a positive integer).
> > 
> > It actually says this:
> >   Interactively with no prefix argument, it toggles the mode.
> >   A prefix argument enables the mode if the argument is positive,
> >   and disables it otherwise.
> > 
> >   <snipped: verbatim quote of the text I cited about Lisp call>
> 
> Yes, and?  The point was about what the doc says about
> a call from Lisp.

My point was that you take the text out of its context, and that
context spells out what you say is missing.

This is not the first time you raise this issue, and the argument
always goes the same way.  I wish you'd stopped these repeated
complaints about the same thing.

> > Are you reading obsolete docs?
> 
> I'm reading the 26.3 docs, as suggested by the report:

The latest sources seem to be different.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
       [not found]     ` <<838sh081lt.fsf@gnu.org>
@ 2020-06-06 20:39       ` Drew Adams
  0 siblings, 0 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-06 20:39 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: 41727

> My point was that you take the text out of its context, and that
> context spells out what you say is missing.

No, it does not.  It does not at all say what I say
is missing from the description of the Lisp-call
behavior.

> This is not the first time you raise this issue, and the argument
> always goes the same way.  I wish you'd stopped these repeated
> complaints about the same thing.

I've never made such a "complaint" before.  Please
point to one such, if you think doing so really adds
value here.

Or is your effort only to argue ad hominem, as if
I'm doing something bad, and have done it "repeated"ly?
How about addressing the actual bug report?

You tell me how the existing text (cited by both you and
me) correctly and completely describes the Lisp behavior.
Passing symbol `-' isn't passing an integer, and so on.

Now, if you just don't want to fix the text, that's
another story.  But I think you'll find it hard to argue
that the report is mistaken and the text is accurate and
complete.

And I hope you realize that the handling of the arg to
`define-minor-mode' has been the subject of a fair amount
of confusion.  There have been several attempts to improve
the doc.  But it's still not as clear and helpful as it
should be.  And the fix is simple: say the missing bits
wrt the Lisp case.

> > > Are you reading obsolete docs?
> >
> > I'm reading the 26.3 docs, as suggested by the report:
> 
> The latest sources seem to be different.

Different from what?  I stated that what you wrote
is exactly the text I was referring to, verbatim.
You simply added the text about the interactive
case.  AFAICT, we're talking about exactly the same
text, in the same release, 26.3.

I wonder if you're actually reading what I wrote.

The text you quote is exactly the text that suffers
from the problem I raised.  The text about the
interactive case in no way helps describe the missing
parts of the case for the Lisp behavior.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-06  0:01 ` Drew Adams
@ 2020-06-07 10:04   ` Michael Heerdegen
  2020-06-07 16:06     ` Drew Adams
  0 siblings, 1 reply; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-07 10:04 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

Drew Adams <drew.adams@oracle.com> writes:

> Ideally, we would have a way to provide a custom doc
> string that also included this info somehow.

Are you aware of `easy-mmode--arg-docstring'?

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-06 18:56     ` Eli Zaretskii
@ 2020-06-07 10:08       ` Michael Heerdegen
  2020-06-07 14:31         ` Eli Zaretskii
  2020-06-07 16:08         ` Drew Adams
       [not found]       ` <<87wo4jb33s.fsf@web.de>
  2021-09-25 15:41       ` Stefan Kangas
  2 siblings, 2 replies; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-07 10:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 41727

Eli Zaretskii <eliz@gnu.org> writes:

> My point was that you take the text out of its context, and that
> context spells out what you say is missing.

Just to be sure: you both speak about the sign of the ARG (current text)
vs. the sign of (prefix-numeric-value ARG) (as Drew wants)?  AFAIU Drew
wants to mention that even in the noninteractive case
`prefix-numeric-value' is called on the ARG before testing it.

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 10:08       ` Michael Heerdegen
@ 2020-06-07 14:31         ` Eli Zaretskii
  2020-06-07 14:45           ` Michael Heerdegen
  2020-06-07 16:08         ` Drew Adams
  1 sibling, 1 reply; 25+ messages in thread
From: Eli Zaretskii @ 2020-06-07 14:31 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: Drew Adams <drew.adams@oracle.com>,  41727@debbugs.gnu.org
> Date: Sun, 07 Jun 2020 12:08:07 +0200
> 
> AFAIU Drew wants to mention that even in the noninteractive case
> `prefix-numeric-value' is called on the ARG before testing it.

If that's the essence of the bug report (and I indeed didn't realize
that), then I don't think it's a good idea to document this quirk.  It
looks like an implementation detail to me, if not an outright bug that
should be fixed.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 14:31         ` Eli Zaretskii
@ 2020-06-07 14:45           ` Michael Heerdegen
  0 siblings, 0 replies; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-07 14:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 41727

Eli Zaretskii <eliz@gnu.org> writes:

> If that's the essence of the bug report (and I indeed didn't realize
> that), then I don't think it's a good idea to document this quirk.  It
> looks like an implementation detail to me, if not an outright bug that
> should be fixed.

I'm undecided.  It means at least that passing an unevaluated prefix arg
to the function "works", which may matter in some cases.

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 10:04   ` Michael Heerdegen
@ 2020-06-07 16:06     ` Drew Adams
  2020-06-07 16:19       ` Michael Heerdegen
  0 siblings, 1 reply; 25+ messages in thread
From: Drew Adams @ 2020-06-07 16:06 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> > Ideally, we would have a way to provide a custom doc
> > string that also included this info somehow.
> 
> Are you aware of `easy-mmode--arg-docstring'?

No.  I've never looked at (or heard of) `easy-mmode'.
Thanks.

But now that I look at it, in Emacs 26.3, I see
no `easy-mmode--arg-docstring'.  What am I missing?

(BTW, easy-mmode.el uses both "docstring" and
"doc-string" as a noun in its doc.  Emacs should
pick one or the other.  IMHO, it should really
probably pick "doc string", whatever it picks it
should use pretty much everywhere.)





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 10:08       ` Michael Heerdegen
  2020-06-07 14:31         ` Eli Zaretskii
@ 2020-06-07 16:08         ` Drew Adams
  1 sibling, 0 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-07 16:08 UTC (permalink / raw)
  To: Michael Heerdegen, Eli Zaretskii; +Cc: 41727

> > My point was that you take the text out of its context, and that
> > context spells out what you say is missing.
> 
> Just to be sure: you both speak about the sign of the ARG (current text)
> vs. the sign of (prefix-numeric-value ARG) (as Drew wants)?  AFAIU Drew
> wants to mention that even in the noninteractive case
> `prefix-numeric-value' is called on the ARG before testing it.

Yes, it's the raw prefix arg (or equivalent) that's
used, in all cases.  And that's not necessarily an
integer.  And `prefix-numeric-value' is applied to
that, to get the effective arg that's used.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
       [not found]         ` <<83y2oz6j6x.fsf@gnu.org>
@ 2020-06-07 16:16           ` Drew Adams
  2020-06-08 17:16             ` Michael Heerdegen
  0 siblings, 1 reply; 25+ messages in thread
From: Drew Adams @ 2020-06-07 16:16 UTC (permalink / raw)
  To: Eli Zaretskii, Michael Heerdegen; +Cc: 41727

> > AFAIU Drew wants to mention that even in the noninteractive case
> > `prefix-numeric-value' is called on the ARG before testing it.
> 
> If that's the essence of the bug report (and I indeed didn't realize
> that), then I don't think it's a good idea to document this quirk.  It
> looks like an implementation detail to me, if not an outright bug that
> should be fixed.

If you don't document it then users won't know how
to use it correctly from Lisp (at least not without
studying the code).

That's misleading enough to make me wonder whether,
in that case, it might be better to say nothing at
all about the call-from-Lisp case, forcing Lisp
users to consult the code.

My preference is (obviously) to have the doc tell
the whole story: accurate & complete.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 16:06     ` Drew Adams
@ 2020-06-07 16:19       ` Michael Heerdegen
  2020-06-07 16:30         ` Drew Adams
  0 siblings, 1 reply; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-07 16:19 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

Drew Adams <drew.adams@oracle.com> writes:

> > Are you aware of `easy-mmode--arg-docstring'?
>
> No.  I've never looked at (or heard of) `easy-mmode'.

Isn't `define-minor-mode' defined in "easy-mmode.el"?

> But now that I look at it, in Emacs 26.3, I see
> no `easy-mmode--arg-docstring'.  What am I missing?

I guess that's one version to small.  It had been introduced when
discussing Bug#10754.  I can send you current master's version of the
file offlist if you want.  AFAIU it's the variable you asked for.

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 16:19       ` Michael Heerdegen
@ 2020-06-07 16:30         ` Drew Adams
  0 siblings, 0 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-07 16:30 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> > > Are you aware of `easy-mmode--arg-docstring'?
> >
> > No.  I've never looked at (or heard of) `easy-mmode'.
> 
> Isn't `define-minor-mode' defined in "easy-mmode.el"?

Yes.  I guess I meant that I haven't looked at much
in that file.

> > But now that I look at it, in Emacs 26.3, I see
> > no `easy-mmode--arg-docstring'.  What am I missing?
> 
> I guess that's one version to small.  It had been introduced when
> discussing Bug#10754.  I can send you current master's version of the
> file offlist if you want.  AFAIU it's the variable you asked for.

I have the 27 pretest, so I have (at least some version)
of `easy-mmode--arg-docstring'; thx.

Yes, that's presumably what I suggest should be changed.

And I guess where that Lisp info gets inserted could be
reconsidered.  This bug report suggests maybe putting it
at the end of the doc string.  Most calls of a minor-mode
command will be interactive.  And I'm arguing in favor of
making the Lisp description of ARG more correct/complete.
Perhaps, especially if that's done, it makes sense to
relegate such info to the end.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-07 16:16           ` Drew Adams
@ 2020-06-08 17:16             ` Michael Heerdegen
  2020-06-08 17:38               ` Drew Adams
  0 siblings, 1 reply; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-08 17:16 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

Drew Adams <drew.adams@oracle.com> writes:

> That's misleading enough to make me wonder whether,
> in that case, it might be better to say nothing at
> all about the call-from-Lisp case, forcing Lisp
> users to consult the code.

How about leaving only cases like ARG -> '- undocumented?

  When called from Lisp, the mode command toggles the mode if the argument
  is `toggle', disables the mode if the argument is a non-positive
  integer, and enables the mode if the argument is a positive integer or
  omitted or nil.

Good enough for daily business.  And we are lucky: since an additional
`prefix-numeric-value' doesn't harm (it's idempotent), it's not a
problem if it's called on the arg before passing it to the mode function
and by the mode function again.

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-08 17:16             ` Michael Heerdegen
@ 2020-06-08 17:38               ` Drew Adams
  2020-06-09  7:58                 ` Michael Heerdegen
       [not found]                 ` <<87h7vkbrh3.fsf@web.de>
  0 siblings, 2 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-08 17:38 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> > That's misleading enough to make me wonder whether,
> > in that case, it might be better to say nothing at
> > all about the call-from-Lisp case, forcing Lisp
> > users to consult the code.
> 
> How about leaving only cases like ARG -> '- undocumented?
> 
>   When called from Lisp, the mode command toggles the mode if the argument
>   is `toggle', disables the mode if the argument is a non-positive
>   integer, and enables the mode if the argument is a positive integer or
>   omitted or nil.

That's what we say now, and the reason I filed the bug.

> Good enough for daily business.  ...

Not good enough for me. ;-)

Consider a case where some command A invokes a minor-mode
command B, to turn B on or off for some purpose/extent.
Consider the case where A's prefix arg is passed to B, to
do that.

The programmer writing the Lisp code to define A should
know that s?he can just pass the raw prefix arg.  The
resulting code will be simpler, easier to read, etc.

I see no reason at all why we wouldn't provide an accurate
(complete) description of what ARG is for Lisp use.

What do we gain by not doing this right?





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-08 17:38               ` Drew Adams
@ 2020-06-09  7:58                 ` Michael Heerdegen
  2020-06-09 14:39                   ` Eli Zaretskii
  2020-06-09 15:40                   ` Drew Adams
       [not found]                 ` <<87h7vkbrh3.fsf@web.de>
  1 sibling, 2 replies; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-09  7:58 UTC (permalink / raw)
  To: Drew Adams; +Cc: 41727

Drew Adams <drew.adams@oracle.com> writes:

> > How about leaving only cases like ARG -> '- undocumented?
> >
> >   When called from Lisp, the mode command toggles the mode if the argument
> >   is `toggle', disables the mode if the argument is a non-positive
> >   integer, and enables the mode if the argument is a positive integer or
> >   omitted or nil.
>
> That's what we say now, and the reason I filed the bug.

No, it's not, it doesn't contradict the implementation.  Did you read
carefully?

> Consider a case where some command A invokes a minor-mode
> command B, to turn B on or off for some purpose/extent.
> Consider the case where A's prefix arg is passed to B, to
> do that.
>
> The programmer writing the Lisp code to define A should
> know that s?he can just pass the raw prefix arg.  The
> resulting code will be simpler, easier to read, etc.

We don't know if the original author intended the semantics of the
documentation or of the implementation.  If we are sure the current
implementation is what was intended I would be ok with documenting it,
but it's really far from important IMHO.

I leave it to Eli to decide.

Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-09  7:58                 ` Michael Heerdegen
@ 2020-06-09 14:39                   ` Eli Zaretskii
  2020-06-09 15:21                     ` Michael Heerdegen
  2020-06-09 15:40                   ` Drew Adams
  1 sibling, 1 reply; 25+ messages in thread
From: Eli Zaretskii @ 2020-06-09 14:39 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> From: Michael Heerdegen <michael_heerdegen@web.de>
> Cc: Eli Zaretskii <eliz@gnu.org>,  41727@debbugs.gnu.org
> Date: Tue, 09 Jun 2020 09:58:32 +0200
> 
> We don't know if the original author intended the semantics of the
> documentation or of the implementation.  If we are sure the current
> implementation is what was intended I would be ok with documenting it,
> but it's really far from important IMHO.
> 
> I leave it to Eli to decide.

I stated my opinion.

Do we have other places where a function called from Lisp uses the
prefix arg in any similar way?  It seems bad practice to me:
non-interactive calls shouldn't use interactive features.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-09 14:39                   ` Eli Zaretskii
@ 2020-06-09 15:21                     ` Michael Heerdegen
  0 siblings, 0 replies; 25+ messages in thread
From: Michael Heerdegen @ 2020-06-09 15:21 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 41727

Eli Zaretskii <eliz@gnu.org> writes:

> Do we have other places where a function called from Lisp uses the
> prefix arg in any similar way?

Seems so, e.g.

allout-kill-line, allout-yank-pop, dired-do-kill-lines,
doc-view-scroll-up-or-next-page, doc-view-scroll-down-or-previous-page,
follow-scroll-up-arg, .... there are lots of more examples.

The feature we are discussing in this report is also already used, see
`toggle-menu-bar-mode-from-frame' for an example.

> It seems bad practice to me: non-interactive calls shouldn't use
> interactive features.

Dunno.  OTOH, most commands using the prefix arg don't distinguish
between interactive and noninteractive calls.  Why should
`define-minor-mode' describe the two cases separately?


Michael.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-09  7:58                 ` Michael Heerdegen
  2020-06-09 14:39                   ` Eli Zaretskii
@ 2020-06-09 15:40                   ` Drew Adams
  1 sibling, 0 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-09 15:40 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: 41727

> > > How about leaving only cases like ARG -> '- undocumented?
> > >
> > >   When called from Lisp, the mode command toggles the mode if the
> > >   argument is `toggle', disables the mode if the argument is a
> > >   non-positive integer, and enables the mode if the argument is a
> > >   positive integer or omitted or nil.
> >
> > That's what we say now, and the reason I filed the bug.
> 
> No, it's not, it doesn't contradict the implementation.  Did you read
> carefully?

I think I did.  We don't use exactly the same words, but
I think we do say just that.

  When called from Lisp, the mode command toggles the mode if the
  argument is `toggle', 

Verbatim the same.

  disables the mode if the argument is a non-positive integer,

Verbatim the same.

  and enables the mode otherwise (including
  if the argument is omitted or nil or a positive integer).

OK, your text doesn't say "otherwise".  Your text is less
exact, since the "otherwise" is correct - omitted/nil and
positive integer constitute a subset of what's true.

Is that really your suggestion, to not document that
something other than omitted, nil and a positive integer
enables the mode?  To me, that would be a step backward,
not forward.  That doesn't correspond to what the code does.

> > Consider a case where some command A invokes a minor-mode
> > command B, to turn B on or off for some purpose/extent.
> > Consider the case where A's prefix arg is passed to B, to
> > do that.
> >
> > The programmer writing the Lisp code to define A should
> > know that s?he can just pass the raw prefix arg.  The
> > resulting code will be simpler, easier to read, etc.
> 
> We don't know if the original author intended the semantics of the
> documentation or of the implementation.  If we are sure the current
> implementation is what was intended I would be ok with documenting it,
> but it's really far from important IMHO.

Until the code is changed, e.g. because someone thinks
the behavior is wrong, the doc should reflect it.  I,
for one, think the behavior is OK as is.  The use case
I just gave (cited above) is one argument for it.

Many commands have the `interactive' form massage the
prefix arg, to present something a bit different to
the body.  E.g., a change from raw to numeric prefix
value is done in the `interactive' form, for whatever
reason.

This command doesn't work that way.  Instead, what is
passed to Lisp is the raw prefix arg, and it is the
body (which also corresponds to a non-interactive call)
that converts that to a numeric value.

Someone (and `d-m-mode' has been worked over more than
once wrt its interactive-vs-Lisp behavior, I believe)
presumably deliberately decided that this command
should act differently.

Many commands (most, I think) make it so that the body
gets just what it needs, and any compensation for
interactivity is taken care of only in the `interactive'
spec.  Someone presumably thought this command should
be an exception in that regard.

Until someone decides otherwise, and changes the
behavior (which I doubt will happen, in particular
because of backward incompatibility), IMO it's the doc
that needs to be changed to fit the behavior, not the
other way around.

I don't understand the hesitation to make the doc say
just what the truth is.  It doesn't take any more text.
I already suggested wording, and I made clear that
other wording that says the same thing (describes the
behavior accurately) would be fine instead.

What's the pushback, here?  Why shouldn't we make the
doc tell the real story wrt the ARG that Lisp expects?





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
       [not found]                   ` <<835zc0717e.fsf@gnu.org>
@ 2020-06-09 15:51                     ` Drew Adams
  0 siblings, 0 replies; 25+ messages in thread
From: Drew Adams @ 2020-06-09 15:51 UTC (permalink / raw)
  To: Eli Zaretskii, Michael Heerdegen; +Cc: 41727

> Do we have other places where a function called from Lisp uses the
> prefix arg in any similar way?  It seems bad practice to me:
> non-interactive calls shouldn't use interactive features.

I actually agree with what you say there.

I don't know why this was designed as an
exception.  But I think it was.

There has been discussion over the years
about the interactive vs Lisp behavior of
`d-m-mode' and the confusion of users, and
I think the behavior may even have changed
over time.

I think Stefan might know why this does
what it does.

I don't know why it does - but it does.
Do you see the behavior changing to fit the
more common model, as you suggest?  If so,
OK (but that will break some existing code
out there).

If you don't expect to fix the behavior, to
no longer have the "bad practice" you cite,
then, until we do fix it, (IMO) we should
fix the doc to fit the behavior.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2020-06-06 18:56     ` Eli Zaretskii
  2020-06-07 10:08       ` Michael Heerdegen
       [not found]       ` <<87wo4jb33s.fsf@web.de>
@ 2021-09-25 15:41       ` Stefan Kangas
  2021-09-25 16:58         ` bug#41727: [External] : " Drew Adams
  2 siblings, 1 reply; 25+ messages in thread
From: Stefan Kangas @ 2021-09-25 15:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 41727-done

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Sat, 6 Jun 2020 09:45:46 -0700 (PDT)
>> From: Drew Adams <drew.adams@oracle.com>
>> Cc: 41727@debbugs.gnu.org
>>
>> > > The doc needs improvement when describing calling the mode from Lisp.
>> > >
>> > > 1. The doc string of `define-minor-mode' says this:
>> > >
>> > >      When called from Lisp, the mode command toggles the mode if the
>> > >      argument is `toggle', disables the mode if the argument is a
>> > >      non-positive integer, and enables the mode otherwise (including if
>> > >      the argument is omitted or nil or a positive integer).
>> >
>> > It actually says this:
>> >   Interactively with no prefix argument, it toggles the mode.
>> >   A prefix argument enables the mode if the argument is positive,
>> >   and disables it otherwise.
>> >
>> >   <snipped: verbatim quote of the text I cited about Lisp call>
>>
>> Yes, and?  The point was about what the doc says about
>> a call from Lisp.
>
> My point was that you take the text out of its context, and that
> context spells out what you say is missing.
>
> This is not the first time you raise this issue, and the argument
> always goes the same way.  I wish you'd stopped these repeated
> complaints about the same thing.
>
>> > Are you reading obsolete docs?
>>
>> I'm reading the 26.3 docs, as suggested by the report:
>
> The latest sources seem to be different.

This bug report is sprawling, and it is very hard to make heads or tails
of what is being discussed.  One initial issue is that the bug report
was made against the text in 26.3, which has changed significantly on
current master.

In any case, Eli seems to be of the opinion that no further change is
needed here.  I tend to agree, and I'm therefore closing this bug
report.

If there are still any outstanding issues, please carefully review the
text that we currently have on master and report any issues separately
based on that.  Otherwise, it will be very hard to make any progress.
Thanks in advance.





^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: [External] : Re: bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2021-09-25 15:41       ` Stefan Kangas
@ 2021-09-25 16:58         ` Drew Adams
  2021-09-25 17:18           ` Eli Zaretskii
  0 siblings, 1 reply; 25+ messages in thread
From: Drew Adams @ 2021-09-25 16:58 UTC (permalink / raw)
  To: Stefan Kangas, Eli Zaretskii; +Cc: 41727-done@debbugs.gnu.org

> This bug report is sprawling, and it is very hard to make heads or
> tails of what is being discussed.

I don't think that's the case.  Of course it takes
time to read and understand a bug thread.

> In any case, Eli seems to be of the opinion that
> no further change is needed here.

Eli was the one who said (and I agreed):

  Do we have other places where a function called
  from Lisp uses the prefix arg in any similar way?

  It seems bad practice to me: non-interactive calls
  shouldn't use interactive features.

That's about the code behavior, not about the doc
string.  But especially given that unusual (per Eli)
behavior, I think the doc string should make clear
what the behavior is (for Lisp use).  It's not the
usual behavior for Lisp use.

^ permalink raw reply	[flat|nested] 25+ messages in thread

* bug#41727: [External] : Re: bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands
  2021-09-25 16:58         ` bug#41727: [External] : " Drew Adams
@ 2021-09-25 17:18           ` Eli Zaretskii
  0 siblings, 0 replies; 25+ messages in thread
From: Eli Zaretskii @ 2021-09-25 17:18 UTC (permalink / raw)
  To: Drew Adams; +Cc: stefan, 41727

> From: Drew Adams <drew.adams@oracle.com>
> CC: "41727-done@debbugs.gnu.org" <41727-done@debbugs.gnu.org>
> Date: Sat, 25 Sep 2021 16:58:33 +0000
> Accept-Language: en-US
> 
> > This bug report is sprawling, and it is very hard to make heads or
> > tails of what is being discussed.
> 
> I don't think that's the case.  Of course it takes
> time to read and understand a bug thread.
> 
> > In any case, Eli seems to be of the opinion that
> > no further change is needed here.
> 
> Eli was the one who said (and I agreed):
> 
>   Do we have other places where a function called
>   from Lisp uses the prefix arg in any similar way?
> 
>   It seems bad practice to me: non-interactive calls
>   shouldn't use interactive features.
> 
> That's about the code behavior, not about the doc
> string.

Exactly.

>         But especially given that unusual (per Eli)
> behavior, I think the doc string should make clear
> what the behavior is (for Lisp use).

No, that doesn't follow.

Stefan is right: this bug should be closed.





^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2021-09-25 17:18 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-05 20:39 bug#41727: 26.3; Doc of `define-minor-mode' and minor-mode commands Drew Adams
2020-06-06  0:01 ` Drew Adams
2020-06-07 10:04   ` Michael Heerdegen
2020-06-07 16:06     ` Drew Adams
2020-06-07 16:19       ` Michael Heerdegen
2020-06-07 16:30         ` Drew Adams
2020-06-06  6:13 ` Eli Zaretskii
2020-06-06 16:45   ` Drew Adams
2020-06-06 18:56     ` Eli Zaretskii
2020-06-07 10:08       ` Michael Heerdegen
2020-06-07 14:31         ` Eli Zaretskii
2020-06-07 14:45           ` Michael Heerdegen
2020-06-07 16:08         ` Drew Adams
     [not found]       ` <<87wo4jb33s.fsf@web.de>
     [not found]         ` <<83y2oz6j6x.fsf@gnu.org>
2020-06-07 16:16           ` Drew Adams
2020-06-08 17:16             ` Michael Heerdegen
2020-06-08 17:38               ` Drew Adams
2020-06-09  7:58                 ` Michael Heerdegen
2020-06-09 14:39                   ` Eli Zaretskii
2020-06-09 15:21                     ` Michael Heerdegen
2020-06-09 15:40                   ` Drew Adams
     [not found]                 ` <<87h7vkbrh3.fsf@web.de>
     [not found]                   ` <<835zc0717e.fsf@gnu.org>
2020-06-09 15:51                     ` Drew Adams
2021-09-25 15:41       ` Stefan Kangas
2021-09-25 16:58         ` bug#41727: [External] : " Drew Adams
2021-09-25 17:18           ` Eli Zaretskii
     [not found] <<963d4189-17dc-4f4e-9993-0335fa271e50@default>
     [not found] ` <<83k10kafha.fsf@gnu.org>
     [not found]   ` <<9d7f8447-1c0b-46db-a40c-c1ed2a398c46@default>
     [not found]     ` <<838sh081lt.fsf@gnu.org>
2020-06-06 20:39       ` Drew Adams

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).