cannot transclude a tiddler name built from inside a macro

144 views
Skip to first unread message

CarloGgi

unread,
Aug 8, 2021, 12:08:29 PM8/8/21
to TiddlyWiki

Hallo,
quite new to TW and I love it, though it is dramatically underdocumented and the whole docs are an almost unusable mess.

To my biggest astonishment, when I try to dynamically build the name of a tiddler from inisde a macro, that macro output cannot be used from within a transclude widget.

\define getMeTiddlerName(a_suffix) <<currentTiddler>>$a_suffix$

<$list filter="whateveFilterHere">
    <$transclude tiddler=<<getMeTiddlerName "_EN">> /> <br/>
</$list>

In the example above, I obtain the tiddler's name by adding suffix 'EN' to current tiddler, which the macro DOES, but then its output <<getMeTiddlerName "EN">> doesn't make transclude widget behave as expected.

I also tried many combinations of single/double quotes, as for instance in:

    <$transclude tiddler="<<getMeTiddlerName '_EN'>>" /> <br/>

but no result at all: the transclude widget DOESN'T transclude the dynamically-built tiddler SOMETIDDLERNAME_EN

Not even the simpler version with hard-coded suffix works:

\define getMeTiddlerName() <<currentTiddler>>_EN

<$list filter="whateveFilterHere">
    <$transclude tiddler=<<getMeTiddlerName>> /> <br/>
</$list>

Nor does it using double quotes for 'tiddler' parameter inside transclude widget:

\define getMeTiddlerName() <<currentTiddler>>_EN

<$list filter="whateveFilterHere">
    <$transclude tiddler="<<getMeTiddlerName>>" /> <br/>
</$list>

Thanks for helping, soooo frustrated!

CG

Mark S.

unread,
Aug 8, 2021, 12:34:51 PM8/8/21
to TiddlyWiki
When you use <<currentTiddler>>, it's actually creating a link to that tiddler. What you want in your macro is the plain substitutable (new word!) text. So try:

\define getMeTiddlerName(a_suffix) $(currentTiddler)$$a_suffix$

Charlie Veniot

unread,
Aug 8, 2021, 1:14:34 PM8/8/21
to TiddlyWiki
I'm thinking most folk prefer the macro route, and that makes sense to me.

The way I'm wired, I usually go with transclusions unless I really don't have a choice.   Can't explain it.

For the "variety is the spice of life" giggles:

<$list filter="whateveFilterHere">
    <$transclude tiddler={{{ [<currentTiddler>addsuffix[_EN]]}}} /> <br/>
</$list>


But that would be a pain in the caboose if spread all over the place.

So sticking with my transclusion mentality...

<$list filter="whateveFilterHere">
    {{||EN_Maker}} <br/>
</$list>


The tiddler "En_Maker" is a transclusion template tiddler with the following content:

<$transclude tiddler={{{ [<currentTiddler>addsuffix[_EN]]}}} />

Yeah, I'm quirky that way ...

Soren Bjornstad

unread,
Aug 8, 2021, 1:22:13 PM8/8/21
to TiddlyWiki
I second CJ in saying that the {{{ [<currentTiddler>addsuffix[whatever]] }}} route is usually a better way to concatenate text, especially when you don't know much TiddlyWiki.

You're getting bitten by not understanding text substitution and wikification, which are both quite complex and require you to understand how TiddlyWiki actually goes about processing macros and rendering tiddlers. In contrast, your intuition will usually work fine with filters.

Carlo Giomini

unread,
Aug 8, 2021, 1:41:26 PM8/8/21
to tiddl...@googlegroups.com
Thanks for the prompt reply. I changed <<currentTiddler>>
 to $(currentTiddler)$ in the macro body, as

\define getMeTiddlerName(a_suffix) $(currentTiddler)$$a_suffix$

still, transclude widget doesn't transclude:

<$list filter="whateveFilterHere">
    <$transclude tiddler=<<getMeTiddlerName "_EN">> /> <br/>   <!-- DOESN'T WORK -->
</$list>

If I try to print to screen the macro output just for debug purposes, it correctly shows the current tiddler's name added with the suffix, say

    <<getMeTiddlerName "_EN">>
outputs
    SOMETIDDLERSNAME_EN
to screen.

Clueless...

CG


--
You received this message because you are subscribed to a topic in the Google Groups "TiddlyWiki" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/tiddlywiki/hbSf3WtfLvM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to tiddlywiki+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/68ec233c-e221-4803-9bba-225326fbbc16n%40googlegroups.com.

Carlo Giomini

unread,
Aug 8, 2021, 1:41:30 PM8/8/21
to tiddl...@googlegroups.com
Charlie, your solution worked fine!

<$transclude tiddler={{{ [<currentTiddler>addsuffix[_EN]]}}} />

Still I wonder why the macro way doesn't yield the expected result, but anyway thanksalot for the hint. I will duly commit myself to studying its syntax, quite obscure to me.

Regards,
CG

--
You received this message because you are subscribed to a topic in the Google Groups "TiddlyWiki" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/tiddlywiki/hbSf3WtfLvM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to tiddlywiki+...@googlegroups.com.

CarloGgi

unread,
Aug 8, 2021, 2:27:08 PM8/8/21
to TiddlyWiki
Yes Soren, you are right: I have little understanding of the inner gears of text substitution and wikification in TW, nor did I find a thorough, comprehensive and self-contained guide to the matter so far: all the TW documentation I went through is a mess of scantly-explained (if ever), loosely-consistent, scattered bits of information, and this is a pity because the software has tremendous potentiality. Maybe you can point me to some good documentation anyway, of which I would be grateful.

Thanks and regards,
CG

Eric Shulman

unread,
Aug 8, 2021, 2:29:04 PM8/8/21
to TiddlyWiki
\define getMeTiddlerName(a_suffix) $(currentTiddler)$$a_suffix$

In the macro definition above, $(currentTiddler)$ substitutes the value from the currentTiddler variable and then adds the specified $a_suffix$ parameter value.

When you wrote this:
<$list filter="whateveFilterHere">
    <$transclude tiddler=<<getMeTiddlerName "_EN">> /> <br/>   <!-- DOESN'T WORK -->
</$list>
The surrounding $list widget sets the value of the currentTiddler variable to "whateveFilterHere".
Thus, the macro output was "whateveFilterHere_EN", which almost certainly didn't exist in your file, so no transclusion happened.

Then, when you wrote this:
   <<getMeTiddlerName "_EN">>
to "print to screen the macro output", the macro wasn't contained inside a $list widget,
so the value of currentTiddler was the actual containing tiddler's title, and you got the results you expected.

and, when you wrote:
<$transclude tiddler={{{ [<currentTiddler>addsuffix[_EN]]}}} />
you used "filtered transclusion" (sometimes referred to as an "inline filter") to directly add the "_EN" suffix to the currentTiddler value,
which was then used as the value for the "tiddler=..." widget attribute... so you got the results you expected.

Note that, within the filter syntax, variable references are enclosed in angle brackets, like this:
   <currentTiddler>
However, when used outside a filter -- in normal wikitext -- variable references use *doubled* angle brackets, like this:
   <<currentTiddler>>
This is necessary so that the variable reference isn't mistaken for conventional HTML syntax, which uses the single angle brackets, e.g.,
   <div>some text here</div>

Hopefully, the above explanations have provided some useful clues :-)

enjoy,
-e
Eric Shulman
TiddlyTools.com: "Small Tools for Big Ideas!"

CarloGgi

unread,
Aug 8, 2021, 2:47:17 PM8/8/21
to TiddlyWiki
Thanks a lot Eric, valuable hints to better understand how TW works.
Anyway, "whateveFilterHere" is just pseudo-code written here for the sake of simplicity. In my actual code there is a true filter, and it works fine, feeding the correct filtered list of tiddlers to the <$list> widget.

Thanks again and regards, :-)
CG

Soren Bjornstad

unread,
Aug 8, 2021, 3:56:10 PM8/8/21
to TiddlyWiki
The links I gave you were to my TiddlyWiki textbook, not the TW documentation. It might not be "self-contained" since it's intended to be in the context of the whole course, but I think you'll find it more useful than the TW documentation at your skill level.

CarloGgi

unread,
Aug 9, 2021, 9:22:19 AM8/9/21
to TiddlyWiki
Thanks a lot, I'll go through it carefully!

CG
Reply all
Reply to author
Forward
0 new messages