[tw5] assigning macro output to a variable

Hi everybody,
the struggle to get TW do what I want it to do goes on hopelessly.
I have a database of systems described by one data tiddler each, like this:

system_1
tag: system
feature 11: Y/N

feature 12: Y/N

feature 13: Y/N

feature 14: Y/N

system_2
tag: system
feature 21: Y/N

feature 22: Y/N

feature 23: Y/N

feature 24: Y/N

as you can easily guess, the tiddlers record what features system X supports or not.
Now I want to flexibly query my database for a certain feature, so I came up with this code:

\define check_feature(feature) [getindex[$feature$]trim[]match[Y]]

<$set name=ā€œhas_featureā€ value=<$macrocall $name=ā€˜check_feature’ feature=ā€˜IFTTT’/> >

    <$list filter="[tag[system]filter]" variable="sys">
  • <$link to=<>> <>

</$set>

(in the example above I’m checking which systems are supported by IFTTT as you can imagine…). Fair enough, the above code DOESN’T work, because you cannot put a <$macrocall> widget as right-side element of the ā€˜value’ element of a <$set> widget. Ok, so how do I go? I know I could instead write:

<$set name=ā€œhas_featureā€ value=<<check_feature IFTTT>> >

and that would work, but I need to use the <$macrocall> widget because the next step is to make the ā€˜feature’ parameter dynamically chosen via a <$select> instruction, so I would need to call the macro as below:

<$macrocall $name=ā€˜check_feature’ feature={{!!current_chosen_feature}}/>

where of course field ā€˜current_chosen_feature’ wouldbe set by the <$select> widget.

Thanks in advance for helping. More and more TW seems to me like a too much beautiful, too much independent woman: you love her but you cannot make her listen to you…

G’day,

You might be getting into some paralysis by analysis or analysis by paralysis (which is how I operate),
or maybe you have some programming experience that is interfering with the ā€œTiddlyWiki Wayā€ (I’m a systems analyst and software developer, and I keep falling into the trap of seeing macros as functions),
or I might be totally out in left field, which happens frequently.

Just to get a baseline for discussion, download the attached, drag it into tiddlywiki.com to import the tiddlers, and give the imported tiddlers a look.

Do the queries in the ā€œQuery systemsā€ tiddler make sense?

QueryingSystemsDB_TW.json (1.1 KB)

CarloGgi,

\define check_feature(feature) [getindex[$feature$]trim[]match[Y]]

<$set name=ā€œhas_featureā€ value=<$macrocall $name=ā€˜check_feature’ feature=ā€˜IFTTT’/> >

    <$list filter="[tag[system]filter]" variable="sys">
  • <$link to=<>> <>

</$set>

[…]

<$macrocall $name=ā€˜check_feature’ feature={{!!current_chosen_feature}}/>

where of course field ā€˜current_chosen_feature’ wouldbe set by the <$select> widget.

Filter operators can use transclusions for parameters. That should help with this case. Something like this (untested):

<$list filter="[tag[system]] :filter[getindex{!!current_chosen_feature}trim[]match[Y]]" variable=ā€œsysā€>

See https://tiddlywiki.com/#Filter%20Parameter.

Brian

1 Like

I know I’m late, but variables may work better than arguments if you want to keep the filter separate.

\define check_feature() [getindextrim[]match[Y]]

<$let
feature={{!!current_chosen_feature}}
has_feature=<<check_feature>>

    <$list filter="[tag[system]filter]" variable="sys">
  • <$link to=<>> <>