Scripting and Scrivener

Not screenplay scripting, Python or Perl or various Apple tools. One of the things I appreciate about L&L is how open they are about things like the XML used for projects. It’s simple enough to figure out, but I found L&L very open about details, too.

My latest fun-and-games with Python has been for outlining.

I outline in Omnioutliner. Why? It works, I can export to OPML, and Scrivener will import OPML.

Basically, once my outline is finished, I add top-level topics to match what I’d like to see in the binder, and drag existing topics under the new top-level headings.

Then I export to OPML where a short Python script reads the OPML from Omnioutliner and flattens it so the top-level topics are the only topics retained. All the sub-topics and their notes become just a single level of notes in the top-level topics, the ones I decided needed to be in the binder.

That OPML file is imported into Scrivener, with the option to put outline notes into the synopsis cards. A clean binder from an outline with many levels.

In Scrivener, outline mode in the left edit window showing the binder title and the synopsis, locked to the document in the right window, and I’m off and writing. The documents are all blank and ready, my outline is in the left window with my game plan, and the binder isn’t cluttered up with all my parenthetical subtopics.

Anybody else mess with automation like this? Scrivener’s project.scrivx file is really simple. If you can code a little Python, Java, Perl, whatever, you can even build your own. I once wrote a sync script that peeled out all the documents in a Scrivener project and copied them as individual RTF files named by sequence number and binder entry to a usb stick. Then I could edit them on my Android. My little sync gizmo would then read back the RTF files, including new ones and taking note of deleted files, and build a new project.scrivx. Better to use the IOS version of Scrivener, of course, but that was in the old days and it filled a need at the time.

1 Like

Yes, I’ve done quite a bit of scripting for Scrivener in Windows, with AutoHotkey, which is very strong in automated button-pushing and screen-scraping. The transparency of Scriv’s XML-based binder file format makes the automation manageable, as you observe. My primary script reads the .scrivx into a Listview allowing a sort on the displayed fields, including user fields added through Document Refs and Custom Meta. I can double-click on an entry in the Listview to open the corresponding document in Scrivener, or multi-select a group of documents, including search results, for a hover preview.

That script isn’t shareable, but a starter script in AutoHotKey is here:

Toolbar overlay, with “Char Map” & “Reveal in Binder”

Rgds - Jerome

Not by me, but mnott made this alternative compile system:

github.com/mnott/texdown

It parses the XML to extract all docs for compiling, extracts the plain text from the RTF files and does custom markup transformation. This demonstrates the amazing flexibility of Scrivener’s project format.

On my to-do list is to make a custom compile system that takes all named snapshots and compiles them to a combined document. If you work using named snapshots of all documents, it gives you a way to “extract” a named version from your snapshot history. texdown does most of what would be needed so I could use it as a base, though I’d prefer to use Ruby rather than Perl. But my to-do list is long and my time is, as for us all, limited…

Nice - a standalone compiler. That’s awesome. If Version 3’s compile is weak, then the use of real style sheets might make alternative compile a real possibility. Pandoc probably has a lot of the hard work done, although I’ve never used it beyond a little fiddling around.

Yes, I’m working on a set of scripts that puts text versions of the content.rtf files under git control. I’ve lost writing by an inadvertent paste, and not realized it until days later, meanwhile there have been file re-names.

I find that snapshots are hard to use. I tend to make many small edits of files, so if I have ‘save snapshot on manual save, I can end up with metric tonnes of snapshots and no easy way to find the one I want.

Wtih git, I can search. I’m working on tools that will give me a list of which files changed the most. Or display a tree of my binder showing how much each file changed either in character changes, or in percentage.

And filter by things like, “hide the stuff that changed less than 5%”

***

I have an automation that I can select a bunch of text, and hit control-option quote, and it will add quotes around each line. Soemthing I often forget to do.

BUT if there are already quotes in that paragraph, it skips that paragraph.

It’s not perfecrt, but when I get on a roll and don’t type my quotes, it can do the right thing a lot of the time.

****

I was amused at your line, “when my outline is finished”

This damn project keeps sprouting buds and growing. I’m at something like 280K words.

1 Like