Rewrite-inactive works only when called from a macro.

This macro lets me define a macro and also show the definition in one go:
<assign|show|<macro|x|<surround|<arg|x>||<rewrite-inactive|<arg|x>|recurse*>>>>

I think the recurse* is wrong where I put it, it doesn't seem to matter
what goes there

Sam

On Mon, May 28, 2012 at 5:29 AM, Sam Liddicott <s...@liddicott.com> wrote:

> I've found that I can't un-render an inactive& block because <arg|x> is
> rendered as x, in a different colour, and picking out the
> with|...|color|brown|... is more hacky than I want to get.
>
> In scheme mode "arg" is emitted but so is lots of other text that is hard
> to filter out.
>
> So I'm back to making render-inactive work
>
> Sam
>
> On Thu, May 24, 2012 at 8:25 AM, Sam Liddicott <s...@liddicott.com> wrote:
>
>> I thought I'd try implementing closures in texmacs macros instead.
>>
>> I want a macro that can be provided a list of variables and produce a new
>> macro that is a "with" block of those variables, and then evaluates the
>> parameters.
>>
>> The produced macro would be of this form (although possibly I would use
>> eval instead of compound):
>> <xmacro|x|<with|...|...|<quasi|<compound|<unquote*|<quote-arg|x>>>>>>
>>
>> It seems it would work as this example shows:
>> <xmacro|x|<with|a|AHA|<quasi|<compound|<unquote*|<quote-arg|x>>>>>>
>>
>> The producing macro must fill in ... according to the arguments it is
>> passed, indicating the variables and their values to be preserved.
>>
>> My first attempt at the constructing macro is:
>>
>> <assign|enclose|<xmacro|w|<quasi|<xmacro|x|<quasi|<with|<unquote*|<quote-arg|w>>|<compound|<unquote*|<quote-arg|x>>>>>>>>>
>>
>> Note the nested quasi. I need the first unquote* to be expanded by the
>> first quasi, and the second quasi to be preserved along with the second
>> unquote*, but nesting makes this hard, because the first quasi encloses the
>> second quasi which encloses both unquote*
>>
>>
>> <assign|enclose|<xmacro|w|<quasi|<xmacro|x|<with|<unquote*|<quote-arg|w>>|<quote|<quasi|<compound|<unquote*|<quote-arg|x>>>>>>>>>>
>>
>> otherwise the idea works as this hard-wired version shows:
>> <assign|enclose|<xmacro|w|<quasi|<xmacro|x|<with|<unquote*|<quote-arg|w>>|Hello
>>  <value|a>
>> there>>>>>
>>
>> That hard wired version fixes the body, and can be executed with:
>> <assign|tc|<enclose|a|HEE HEE>>
>> <tc>
>>
>> I tried deferring the body execution into an xcompound macro, like this:
>> <assign|xcompound|<xmacro|x|<quasi|<compound|<unquote*|<quote-arg|x>>>>>>
>>
>>
>> <assign|enclose|<xmacro|w|<quasi|<xmacro|x|<with|<unquote*|<quote-arg|w>>|<xcompound|<arg|x>>>>>>>
>>
>> But then texmacs just segfaults. I guess to call xcompound still needs to
>> be using quasi unquote* quote-arg
>>
>> Can anyone help me preserve SECOND quasi and unquote* in the emitted
>> macro while still allowing the FIRST unquote* in the with block to be
>> expanded?
>>
>> Sam
>>
>
>
_______________________________________________
Texmacs-dev mailing list
Texmacs-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/texmacs-dev

Reply via email to