Subject: Re: bug#62563: [FR] Expose `interactive' arg handling as an Elisp function

From: Stefan Kangas <[email-masked]>
Date: Sun, 17 Sep 2023 04:31:57 -0700

Michael Heerdegen <[email-masked]> writes:

> Stefan Kangas <[email-masked]> writes:
>
>> >> --8<---------------cut here---------------start------------->8---
>> >> (defun foo (fname)
>> >>   (interactive "f")
>> >>   (ignore fname))
>> >>
>> >> (defun foo (fname bar)
>> >>   (interactive
>> >>    (list (simulate-interactive-f)
>> >>          (get-bar)))
>> >>   (ignore fname bar))
>> >> --8<---------------cut here---------------end--------------->8---
>
> Something like this can be useful if you need to read an additional
> argument in a way that involves the need to run some Lisp, where using a
> normal code letter is not enough.  Then you need to substitute the other
> code letters you still want to have been read also with Lisp code.  Is
> that understandable?

Yes, I think that explanation is clear.

> We have `advice-eval-interactive-spec' which can be used like
> (advice-eval-interactive-spec "f") - that comes very close to what is
> requested here.  Combined with `interactive-form' one can use this to
> simulate the argument reading from a given command from Lisp.
>
> `advice-eval-interactive-spec' has a FIXME:
>
> | ;; FIXME: How about renaming this to just `eval-interactive-spec'?
> | ;; It's not specific to the advice system.
>
> Any opinions whether we want to do that?  If the implementation is not
> something ugly (it probably is, a bit, though), I would vote for it.

Could you point to one (or more) examples of real code that would have
been made significantly simpler by this?  The idea sounds good in
theory, but it is important to understand if it will also be useful in
practice.  That will give us a better basis for deciding if this is
something we would want to add or not.