kevboh / longform

A plugin for Obsidian that helps you write and edit novels, screenplays, and other long projects.
Other
610 stars 30 forks source link

Compile Step: Selecting which scenes to include in the compile #169

Open zverhope opened 1 year ago

zverhope commented 1 year ago

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!

b-camphart commented 7 months ago

I've been thinking about this, and I want to get your opinion @kevboh

  1. 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.
  2. 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.
  3. 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 :)

kevboh commented 6 months ago

My inclination is either