all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: Eli Zaretskii <eliz@gnu.org>,
	Michael Heerdegen <michael_heerdegen@web.de>
Cc: "59559@debbugs.gnu.org" <59559@debbugs.gnu.org>
Subject: bug#59559: 28.1; `minibuffer-with-setup-hook' with :append
Date: Sun, 22 Jan 2023 22:10:49 +0000	[thread overview]
Message-ID: <SJ0PR10MB548855A7F32DC675E45E8C3CF3CB9@SJ0PR10MB5488.namprd10.prod.outlook.com> (raw)
In-Reply-To: <835yczkt4k.fsf@gnu.org>

> > While the syntax of this macro is a bit unusual, with the background of
> > the terminology used in the rest of Emacs the description allows only
> > one interpretation: when we say that the argument (of a macro) is of a
> > certain form, the unevaluated s-exp is meant.

But that's _not_ what's meant here.  The doc string:

  By default, FUN is prepended to 'minibuffer-setup-hook'.
  But if FUN is of the form '(:append FUN1)', FUN1 will
  be appended to 'minibuffer-setup-hook' instead of prepending it.

Whether FUN is or is not of that :append form, per
your presumption - "the terminology used in the rest
of Emacs", the UNevaluated sexp is meant.  But that's
not the case here.

Try it:

(defun toto () (message "@@@@@@@@@@@@@@"))
(minibuffer-with-setup-hook toto (message "************"))

Debugger entered--Lisp error: (void-variable toto)
  (let ((fun toto)
    (setup-hook (make-symbol "minibuffer-setup")))
    (fset setup-hook
          #'(lambda nil
              (remove-hook 'minibuffer-setup-hook setup-hook)
              (funcall fun)))
    (unwind-protect (progn (add-hook 'minibuffer-setup-hook setup-hook)
                           (message "************"))
      (remove-hook 'minibuffer-setup-hook setup-hook)))

Not to mention that the unevaluated form (:append toto)
also exhibits the same problem - it too doesn't fit
"the terminology used in the rest of Emacs".

It is just not the case that "the unevaluated s-exp is
meant" for macro `minibuffer-with-setup-hook'.  The
_evaluated_ sexp is meant for FUN as the arg, and the
_evaluated_ FUN1 _part_ of the sexp (:append FUN1) is
meant for that form of the arg.

That's what this bug report is about.  And yes, this
_is_ quite unusual.  IMO it's not the best interface
design, but there's nothing really "wrong" with
defining a macro whose argument handling is this
complicated.

There is something wrong, however, with not making
this unusual behavior clear in the macro's doc, IMHO.

> Full agreement, my thoughts exactly.
> 
> > Else we explicitly say that the value or 
> > evaluation result should have certain properties.
> 
> That would require us to write a much more complex doc string in this
> case, and then do the same for all the other macros we have.  So I
> don't think this is a good idea.

The "much more complex doc string", which is not much
more complex IMO, is needed because the behavior of
the macro itself is complex - it is _not_ the simple
behavior you've both said it is.

It's not the usual case for a macro (that the args
aren't evaluated).  And it's not the also usual case
that some of the args are evaluated but others are not.

It's the unusual case that one of the args is eval'd
if it has one form, and only _part_ of that arg is
eval'd and used if it has another form.

I say all this because it seems like you two are still
discussing this.  But if Eli has reached a decision
that there's no bug (have you, Eli?) then end of story.





  reply	other threads:[~2023-01-22 22:10 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-25  2:55 bug#59559: 28.1; `minibuffer-with-setup-hook' with :append Drew Adams
2022-11-25  3:07 ` Drew Adams
2023-01-10 17:37   ` Michael Heerdegen
2023-01-10 18:37     ` Drew Adams
2023-01-10 19:34       ` Michael Heerdegen
2023-01-10 19:53         ` Michael Heerdegen
2023-01-10 20:56           ` Drew Adams
2023-01-10 20:45         ` Drew Adams
2023-01-21 14:36           ` Michael Heerdegen
2023-01-21 15:35             ` Eli Zaretskii
2023-01-21 16:07               ` Michael Heerdegen
2023-01-21 18:43                 ` Eli Zaretskii
2023-01-21 18:57                   ` Drew Adams
2023-01-21 19:26                     ` Eli Zaretskii
2023-01-21 18:51               ` Drew Adams
2023-01-21 19:23                 ` Eli Zaretskii
2023-01-21 20:57                   ` Drew Adams
2023-01-21 18:41             ` Drew Adams
2023-01-21 19:29               ` Eli Zaretskii
2023-01-21 20:27                 ` Michael Heerdegen
2023-01-22  5:58                   ` Eli Zaretskii
2023-01-22 22:10                     ` Drew Adams [this message]
2023-01-22 22:19                       ` Drew Adams
2023-01-23  0:15                       ` Michael Heerdegen
2023-01-23  3:14                         ` Drew Adams
2023-01-23  3:21                           ` Drew Adams
2023-01-23 14:11                           ` Michael Heerdegen
2023-01-23 16:38                             ` Drew Adams
2023-01-23 12:15                       ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=SJ0PR10MB548855A7F32DC675E45E8C3CF3CB9@SJ0PR10MB5488.namprd10.prod.outlook.com \
    --to=drew.adams@oracle.com \
    --cc=59559@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=michael_heerdegen@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.