Subject: bug#64584: 29.0.91; skeleton: cannot pass `str' as argument to some functions

From: Stefan Monnier <[email-masked]>
Date: Mon, 11 Sep 2023 23:06:02 -0400

> I can do
>
>     (define-skeleton test
>       ""
>       (read-file-name "p: ")
>       (shell-quote-argument (eval str)))

Eww... please don't!  This relies on an internal detail about how `str`
is implemented.

>>> AFAIU, using 'str should prevent the insertion of the value but that
>>> signals the same error.
>> Sorry, I don't know what you mean by that.
> I meant this part in skeleton-insert's docstring
>
>     Quoted Lisp expressions are evaluated for their side-effects.

Ah, I see.  Yes, using

    'str

should basically have no effect.

>>> I tried (progn str (shell-quote-argument str))
>>> instead but the same error again.
>> Of course: any use `str` within an actual expression (as opposed to
>> using it as a skeleton element) will work reliably only if that occurs
>> after a use of `str` as a skeleton element.
> Thanks for your patience and help.

We should try and improve the docs to clarify this confusing situation.
If you have suggestions for how/where we could make changes that would
have effectively discouraged you from trying to use `str` in that way,
I'd be happy to hear them.

        Stefan