Folks,

This solution may make sense more to experienced TiddlyWiki users who make 
their own macros, or templates they transclude from elsewhere. 

   - Which is possibly all slightly advanced users. 
   - For me personally, this is a revolutionary advance for coding, I 
   wonder if anyone else will think so?

Its a working solution you can adopt now, However I raised this issue in 
github because its just a small code change with a lot of potential. 
[IDEA] Small system macro/variable to support coding (full solution 
included) #4729 <https://github.com/Jermolene/TiddlyWiki5/issues/4729>

   1. Please support this request with a thumbs up if you support this.
   2. However if you like this and can help convert this to a PR Pull 
   Request I would appreciate it.
   3. A key desire is not needing to wikify the variable.

*Summary*: Provision of a global variable codeTiddler that returns the 
tiddler title that contains the code that is in use. Testing suggests this 
worked with multiple transclusions deep.

*Overview*

   - When writing macros or templates that other tiddlers we call or 
   transclude, we tend to do so with the currentTiddler set so the macro or 
   transclusion acts on the currentTiddler.
      - eg `{{||transcludedTiddler}}`
   - This is a good design strategy because it is then easy to use the same 
   macro or transclusion on each item in a list as long as currentTiddler is 
   set to the desired title.
   - So if you want to reference fields in the codeTiddler, the one 
   containing the macros or transclusion template, you are forced to encode 
   full text references eg `{{codeTiddlername!!codefieldname}}`
      - This makes it complex to rename, clone or generate code tiddlers 
      because you are forced to edit the text in multiple places to update all 
      text references.
      - This gets in the way of my autonomous field and autonomous tag idea 
      because it stops you simply cloning to create a new one.
   - It opens other possibilities as well (see below)
   - The solution seemed impossible until I discovered a trick the 
   `<<transclusion>>` system variable 
   <https://tiddlywiki.com/#transclusion%20Variable> see how it includes *"the 
   title of the tiddler being transcluded"*

*Why?*

   - Access to a new variable that can provide a link to actual code 
   tiddlers transcluded or there because of a global macro definition.
      - This could make some uses of references and back-links obsolete.
   - Comparing the codeTiddler variable with the currentTiddler Variable 
   allows you;
      - To have something appear only when opening the code tiddler in the 
      story, but not when the same tiddler is transcluded, help with 
      documentation and settings.
      - Detect at render time the name of the codeTiddler and use this in 
      code (Eg reference code tiddler fields)
   - Without a currentTiddler (no value) and with a codeTiddler indicates 
   the tiddler is being rendered in the side bar or elsewhere outside the story
      - You can then test if the tiddler has the sidebar tag and write code 
      that displays only or not in the sidebar.
      - Applies to other locations above and below story, top left etc...
   - Multiple level transclusions or macros can be set to display the 
   tiddler they are defined in, to help debugging

*Example*

This example placed in a codeTiddler or template that is transcluded, it 
determines if you are viewing the tiddler in the story or via a transclusion
and displays when transcluded the field in itself, not the currentTiddler. 

<$wikify name=code-tiddler text="""<<codeTiddler>>""">
<$list filter="[all[current]match<code-tiddler>]">
  In Code tiddler <$view field=fieldname/>
</$list>
<$list filter="[all[current]!match<code-tiddler>]"variable=nul>
  Transcluded In Calling tiddler <$view field=fieldname/>
</$list>
</$wikify>

*The Solution*
A Simple Macro tiddler with $:/tags/macro will do it

\define pipe() |
\define codeTiddler() {{{ [<transclusion>split<pipe>nth[2]] }}}
The first macro defines the pipe symbol so it can be used in the split operator
codeTiddler uses the 2nd title found as a result of the transclusion macro 
`{currentTiddler|codeTiddler|||}`
The first value is equal to the currentTiddler, so rather than access that we 
can just make use of the existing currentTiddler Variable



-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/fc64e2d6-ae95-4e85-9612-f5327297e590o%40googlegroups.com.

Reply via email to