Have you ever wished you could write in Tinderbox, and preview your notes using Marked? Now you can!
This document demonstrates how.
How to Use It
- Install Marked
- Create a note and assign it the
Note
prototype - Check the
$ExternalPreview
box at the top of your note
When you change your note $Text
, switch to a different tab and back to trigger a refresh.
If you close the Marked preview window, it won’t come back automatically. Quit Marked, and it should launch again in a moment.
Tinderbox Export Code
You can still use Tinderbox export code! Rich text just works. How cool is that?
You can ^include^
notes:
^include("include this")^
See? This note got included.
You can make smart lists:
* smart lists are smart
* smart lists are lists
- smart lists are smart
- smart lists are lists
Note Links
You can link between Tinderbox notes. The links will exist only in Tinderbox, so you can navigate quickly between notes. They won’t appear in the exported Markdown.
Markdown Formatting
You can use Markdown formatting in your notes:
> "Ain't life grand?" -[Bonnie & Clyde](https://getyarn.io/yarn-clip/2c54d716-79f3-44b6-8fc5-fada974f20d7)
“Ain’t life grand?” -Bonnie & Clyde
Caveats
Some Markdown syntax conflicts with Tinderbox export code. For example, you might expect ##### This code
to produce a Markdown header. However, that same syntax is used for smart lists. Check it out:
- I was expecting a header but got a list instead!
When this happens, you can use the ^value^
tag to bypass Tinderbox’s export parsing:
^value("##### Now this is a Markdown header!")^
Now this is a Markdown header!
Special Prototypes
You may have noticed some pre-loaded prototypes in this document. I created them to assist with my writing.
Note
is a simple note – it renders its$Text
directly, or its$Name
if there is no$Text
.Section
is a note that renders its$Name
as a header, followed by its$Text
. It intelligently renders its header level according to its depth in the outline.Cut
does not render as part of the exported markdown. It lets you keep a note in the Tinderbox outline without rendering it.PAGE BREAK
forces a page break when exporting from Marked to PDF.
All notes render their children. The rendering is done by the plain text
template.
Motivation
I like to write by composing chunks of text into larger structures. I want to see those structures in outline format, and control how they appear when they export.
These prototypes allow me to write in chunks of text, and arrange them into structures. I can represent a series of paragraphs with the Note
prototype. If I want that chunk to render with a header, I assign it the Section
prototype.
Refreshing Structured Notes
If you’re just working in a single note, you can trigger a Marked refresh by navigating away from the note and back to it. If, however, you are composing your note from a set of notes (either by using ^include^ or building up an outline), then changes to other notes won’t trigger a refresh. In those cases, you need to navigate to the parent note – the one that gets exported to Marked.
I do that by creating a new tab for the parent note, and then switching to it and switching back to the note I’m currently editing.
Under the Hood
You can find the main action code in Preview in Marked
. The Note
prototype has an edict to run it. The action code creates a temporary file and writes the note $Text
to the file, then tells Marked to preview the temporary file if it’s not already previewing it.
(It seems as though Tinderbox doesn’t trigger an edict run when the $Text
changes)
The action code uses lsof to determine whether the file is open, and Marked doesn’t release the file until it quits completely. This is why you have to quit Marked if you’ve closed the preview window.