[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#45607: 27.1; compiled replace-string breaks repeat-complex-command
From: |
Lars Ingebrigtsen |
Subject: |
bug#45607: 27.1; compiled replace-string breaks repeat-complex-command |
Date: |
Thu, 09 Jun 2022 20:52:57 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
Lars Ingebrigtsen <larsi@gnus.org> writes:
> could be something like
>
> (interactive-region-beginning)
> (interactive-region-end)
>
> and whatever updates command-history would reify those as is instead of
> their return values?
Sometimes it's helpful to actually look at the code. All this magic
comes from:
/* If the list of args INPUT was produced with an explicit call to
`list', look for elements that were computed with
(region-beginning) or (region-end), and put those expressions into
VALUES instead of the present values.
This function doesn't return a value because it modifies elements
of VALUES to do its job. */
static void
fix_command (Lisp_Object input, Lisp_Object values)
{
/* FIXME: Instead of this ugly hack, we should provide a way for an
interactive spec to return an expression/function that will re-build the
args without user intervention. */
if (CONSP (input))
And what this does is to try to hack its way through the lisp code in an
interactive spec like
/* Skip through certain special forms. */
while (EQ (car, Qlet) || EQ (car, Qletx)
|| EQ (car, Qsave_excursion)
|| EQ (car, Qprogn))
looking for `region-beginning' and friends. But we now byte-compile the
interactive specs, so all this fails spectacularly.
So we need a brand new way to specify which options are
`region-beginning' etc. Perhaps with a declare form? (That translates
into symbol properties, I guess.)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no