longform
longform copied to clipboard
Compile Step: Selecting which scenes to include in the compile
What should this step do?
I'd like to be able to select which scenes are included in a compile. Let's say I'm writing a book that has 5 chapters that each have 5 scenes. All of the 25 scenes are part of the manuscript, and will eventually all be included in the compile when the manuscript is finished, so I do want to add them to my index. As the work is in progress, however, I'll often want to compile a single chapter, or even just a few scenes from a chapter, to share with an advisor or editor. Right now, I'd have to either remove those scenes from the index prior to compiling or open up the compiled document to delete the unwanted material.
Scrivener does this well and in a way that I think would be reproducible in Obsidian. One of the first things you'll see when compiling a document from a project is a modal displaying all available parts of the whole manuscript, each having a checkbox beside them. You can then check and uncheck these boxes as a way of including or excluding parts of the manuscript from the document you're compiling.
Should this step affect scenes, manuscripts, or join the two?
I'm guessing that this would best be done prior to beginning the compile workflow, as the steps of that workflow would then be done on the scenes selected for the compile. (I'm not sure whether that makes this more of a feature request than a step request - apologies if the latter.)
Thanks again!
I've been thinking about this, and I want to get your opinion @kevboh
- every scene file has a longform property that says if it should be included in compile. The issue with this option is, if longform is removed from the user's vault, that property is still around, and they'd have to go through to clean up their vault manually. Maybe we could combine YAML and the data.json file to accomplish this? I'm not sure if I understand the full restrictions around sync in regard to using the data.json file.
- Introduce a new list property in the longform index file that lists out all the scenes that should be excluded from compile, but not the scene list. The issue with this is that it's duplicate work on the user's end, having to add the scene both to the scene list, and this list (if they want it excluded). However, this could be mitigated with some additional GUI functionality so that it's handled automagically. This option also makes it much easier for a user to remove longform from their vault, if they choose to. This is probably the best option, in my opinion.
- Combine option 1 and 2 to allow the user to specify their own property/tag that specifies that a scene should be included in compile, and the default behavior if a scene doesn't have that property/tag. Users may already have properties/tags they're using, which means, if longform is removed, they wouldn't have to modify their scene files. This could also be extended to modify how scenes are detected as included/ignored, but that's getting ahead of myself. The issue with this is that it'll probably be the most complex option to build, since Obsidian doesn't expose its query API.
Let me know which you think would be the best option and I can throw something together :)
My inclination is either
- support a property
compile: false
under thelongform
property that, when set, skips the scene during compilation - add a step that, if present, shows a new modal with a big checkbox list of all scenes, all of which are checked by default, and then the user can uncheck notes for that compile. The issue here is that the checked state needs to live somewhere, which ends up being a huge pain. So I'd prefer the first option, I think.