Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for a synopsis field #70

Closed
johnblommers opened this issue Oct 25, 2019 · 8 comments
Closed

Add support for a synopsis field #70

johnblommers opened this issue Oct 25, 2019 · 8 comments
Assignees
Labels
enhancement Request: New feature or improvement
Milestone

Comments

@johnblommers
Copy link

One of the very neat features of Scrivener for macOS is that every scene can be represented on a corkboard as an index card and a brief synopsis about that scene displays on that index card. The author can arrange these index cards based on the synopsis rather than the scene title. This is good because the synopsis is a better representation of the scene than the scene name.

Nonono I'm not going to suggest novelWriter be getting a corkboard.

At present novelWriter lets the author rearrange scenes and chapters in the outline. It would be really helpful if, instead of displaying the scene title, that an option be provided to display instead a synopsis field. The synopsis is not considered part of the novel text. Indeed the synopsis is typically written first and the scene is fleshed out afterwards.

@vkbo
Copy link
Owner

vkbo commented Oct 25, 2019

I'm quite familiar with Scrivener. I own a Windows license for it, but since they don't support Linux (any more), and Windows support is extremely delayed in terms of releases, I gave it up.

But yes, I've been thinking about adding this feature. I just haven't decided what's the best way to implement it, so I'm open to suggestions. I will not implement a cork board, but I could add a text box to the dialog box where items are edited. The synopsis could be visible as hover text (not ideal), or as a collapsible section in the details pane below the tree (better).

I don't use this feature personally, as I do all of this in a plot file, and as comments at the top of files. But I'm happy to add this as it doesn't break with the design philosophy of novelWriter. I do want the application to be different than the other apps out there, and I've combined my favourite bits from all the ones I've used and excluded all the bits I don't like. I've picked parts from GhostWriter, FocusWriter and yWrite in particular.

@vkbo vkbo self-assigned this Oct 25, 2019
@vkbo vkbo added the enhancement Request: New feature or improvement label Oct 25, 2019
@johnblommers
Copy link
Author

Thoughts on synopsis support.

Consider adding a field to any scene or chapter to hold a few sentences worth of synopsis. It should display to the right of the scene or chapter column, perhaps in its own column. Consider bolding or coloring the scene or chapter name so it stands out. The synopsis fields for all scenes and chapters should be visible at the same time. The novelist can drag chapters and scenes around as before. Longer synopsis should wrap within the confines of its column.

The synopsis field is not stored with the text, however some authors might want it added as a comment field to the scene or chapter file. The option to display the synopsis as hover text sounds good when the synopsis column is not displayed.

@vkbo vkbo added this to the Version 1.0 Release milestone Oct 30, 2019
@vkbo
Copy link
Owner

vkbo commented Nov 3, 2019

Still thinking about how to implement this in a good way. I'm a bit reluctant to store it with the meta data, as having free text fields in a potentially very large xml structure feels a bit clunky. Also, if a file somehow drops out of the project file, either because of sync conflicts, accidentally opening two versions of the project and overwriting it, disk error, restoring from backup, or a bug, or something else, the meta data of the file is lost. Losing the label is not a big deal, but a synopsis may be less ideal.

The text of a file is stored almost verbatim as seen in the text editor, with only the line endings replaced before streaming directly to file (QTextEdit uses paragraph endings, not line breaks). There isn't much that can go wrong in that process, so the raw data is pretty safe as long as the underlying file system is healthy.

Saving the synopsis in a separate file, with the raw text, is an option. However, since these files are only loaded on request, when a project is opened only the project xml file is needed, having to load potentially hundreds of synopsis files is not ideal either.

If we could limit the synopsis field to a single string of, say, a few hundred characters, I could potentially save them in both a plain text file and cache them in the xml.

@johnblommers
Copy link
Author

It's my thinking that the synopsis field should be limited to a few hundred characters.

Rethinking for a bit, I really like the novelWriter comment extension to Markdown. During testing I've placed a few sentences worth of synopsis in those comments. If those comments should manifest in a separate field in the tree view, this would do the job. Now you don't have to keep separate files for synopses. Just look for a comment field right after the chapter or scene heading in a document and display it in its own column in the tree view. The user can now arrange to their heart's content by dragging the synopses around.

@vkbo
Copy link
Owner

vkbo commented Nov 4, 2019

I want to avoid having to open and scan all document files when the project is opened. The XML project file should contain everything describing it.

I think using the comment field for synopsis is more in line with the general design philosophy of the application. It is in fact why I added the comment feature in the first place.

A way to handle this is to flag a single comment paragraph as the synopsis by starting it with something like % Synopsis: ... bla bla. The indexer can catch these and keep them in the index cache for display on the GUI. The index is organised as a Python dictionary with the same keys as used in the project tree. The meta data in the index is overwritten for a specific file every time the file is saved, and the index itself is cached to disk when the project is saved. It is probably the best place to store this information.

This will also allow for the addition of a "build outline" feature that can collect all the information in the index, including the synopsis entries, and compile a document to be viewed in the view pane.

I'm still not sure adding a very wide column of synopsis information in the tree is a good design choice though.

@johnblommers
Copy link
Author

A % Synopsis: ... bla bla comment field has the ring of righteousness to it.

My thinking about the synopsis column presentation:

  • Let the user control the width of the column.
  • Let the user control the height of the row.
  • Fill in as much synopsis text as will fit in the allocated space, with ellipses to indicate there is more.
  • Allow the user to hide the synopsis column when it's not needed.

@vkbo
Copy link
Owner

vkbo commented Apr 13, 2020

Hi @johnblommers and @Number042,

I have no merged the new Outline feature, which includes the synopsis feature. The novel outline is now displayed in a tab in the main window instead of a separate dialog window.

Due to a complete restructuring of the project index class, the class that build the data structure needed for the old Timeline View, the old index file is now invalid. When you open a project for the first time with the new code, novelWriter should detect this, and automatically rebuild the index.

Now, the Outline tab is a first step towards, and feedback on usability and wanted features is welcome. The workings of it has not yet been added to the manual, but here are the essentials on how to tweak it:

  • Right clicking on the column headers should get you a drop down menu where you can turn on and off the columns you want to see.
  • The columns can be dragged and dropped and reordered as you want them.
  • Column order, visibility, and width is preserved between session, and on a project-by-project basis.
  • The tree itself is rebuilt when you switch to the Outline tab, and only if the index has changed since last time you visited the tab.
  • The Outline can also be rebuilt by selecting "Rebuild Outline" from the "Tools" menu, or by pressing F10.
  • In case this automatic rebuild turns out to be slow for a large project, the feature can be turned off in the "Tools" menu by un-checking the "Auto-Build Outline" option. In that case, it is only rebuilt when the user requests it.

@vkbo
Copy link
Owner

vkbo commented May 12, 2020

The synopsis tag is now implemented and documented, and in the 0.5 release. Closing this topic.

@vkbo vkbo closed this as completed May 12, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Request: New feature or improvement
Projects
None yet
Development

No branches or pull requests

2 participants