This new beta again includes numerous improvements, and even a few new features for you to try out! Here's the TL;DR:
- Several new syntax highlighting modes available (see changelog)
- Numerous bug fixes
- Transient tab behavior
We would like to release 1.7 soon, but there is one unsolved issue where we'd like your feedback. Please have a look here. Do you experience this issue as well? Don't you? We haven't been able to pin down its cause, but it needs to be solved before 1.7 can be released. Please get in touch with us if you either experience, or don't experience this issue. Thank you!
Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:
- The
virtual directories
will be gone from the.ztr-directory
files as we are discontinuing that feature. - The projects will be merged into the
.ztr-directory
files and afterwards the.ztr-project
-files will be removed. - Now you will need to either
Cmd+Click
(macOS) orCtrl+Click
(other platforms) on internal and external links as well as on tags in order to follow the link/start a search. Cmd/Ctrl+[1-9]
now do no longer toggle recent documents -- rather they select the corresponding tab!
As always, we'd like to encourage you to support the development over at Patreon or PayPal!
Changelog
Breaking Changes
This release contains several breaking changes to 1.6 due to heavy internal refactoring.
- Your virtual directories will be gone after installing.
- Projects will be incorporated into the
.ztr-directory
-files, which means that you need to extract these files (or backup them) if you plan to roll back to 1.6 or earlier, lest you will lose the project settings. Cmd/Ctrl+W
will now attempt to close open tabs first before closing the window. To close the main window directly, useCmd/Ctrl+Shift+W
.- Now you will need to either
Cmd+Click
(macOS) orCtrl+Click
(other platforms) on internal and external links as well as on tags in order to follow the link/start a search. Cmd/Ctrl+[1-9]
now do no longer toggle recent documents -- rather they select the corresponding tab!
GUI and Functionality
- New Feature: Zettlr now supports (theoretically) unlimited open documents and orders them in tabs at the top of the editor instance.
- The tabs display the frontmatter title, if applicable, or the filename.
- On hover, you can get additional info about the documents.
- Drag and drop the tabs to re-sort their order.
- Get going where you left of the day before: Open files are persisted during restarts of the application.
- New Feature: RTL support! Now whether you are writing in Hebrew, Persian, Urdu or any other right-to-left writing system, you can do so now. We've added support for the respective options of CodeMirror in the "Preferences -> Editor" tab.
- New Feature: You can now direct Zettlr to automatically create new files if you click on an internal link that does not match a file. Thanks to @halcyonquest for their contribution!
- New Feature: Vim and Emacs insertion modes are now supported! You can switch persistently between these two and the "normal" insertion mode using the preferences. Thanks to @JorySchossau for implementing this feature!
- New Feature: Directory icons. From now on you can select an arbitrary icon to further visually distinguish certain directories from the others. This has no other than a purely visual effect and may help identify specific directories within a longer list reliably.
- If available, a title from a YAML frontmatter will be appended to the displayed file entry when linking files.
- Copying images from the Explorer/Finder/file browser now offers to insert them into the document, copying them over to the assets directory.
- The popups are now more resilient against accidental closing, just like the dialogs.
- When focus-selecting the global search bar (pressing the mouse button in the input and using it to select some text immediately) works as in other inputs now.
- Added the week-number as a variable for filenames and the Zettelkasten IDs (use
%W
). - Changes to the Pomodoro timer: Now the sound will play each time you release the mouse button on the volume slider to check how loud it is. Furthermore, the mute button has been removed in favor of a volume indication, with 0% equalling the former mute setting.
- When the tag cloud is filtered, "Copy Tags" will only copy the filtered tags, and no longer all tags. To copy all tags, reset the filter. Furthermore tags will now be copied to clipboard including the leading hashtag.
- Re-enabled double-dollar inline equations for rendering and syntax highlighting.
- HTML-style comments (
<!-- Lorem Ipsum -->
) are now also exempt from the word counting. - Fixed an error in the Table Editor that would assume empty rows to be header rows, leading to false behavior when trying to display a completely empty table.
- The Table Editor can now also parse and display simple and grid tables, and a wider range of pipe tables, as described in the Pandoc manual.
- Fixed a small mistake where literal blocks would be wrongly offset as the editor treated them as list items.
- Fixed artefacts with spellchecking errors. Thanks to @ryota-abe for proposing the correct selector!
- The Table Editor now remembers what the source table looked like and tries to recreate that when it applies the changes to the DOM.
- Added verbose error reporting and improved the error handling during citeproc boot. Now, Zettlr will (a) remove error-throwing CiteKeys so that the rest of the library loads just fine and (b) display the exact errors as reported by citeproc-js so that users can immediately identify the bad keys and know where to look.
- The global search bar's autocomplete will now also work for non-western scripts such as Japanese, Korean, Chinese, or any other.
- Virtual directories have been discontinued. Parts of their functionality will be re-implemented in different ways.
- On Linux, we've restored the default window decorations -- that is, the burger menu button is gone, and the menu will be displayed wherever the window manager decides.
- Fixed a small bug that could lead to errors during autocomplete selection if no frontmatter is present in the file.
- Added syntax highlighting modes (with keywords):
- Elm:
elm
- F#:
f#
/fsharp
- Haskell:
hs
/haskell
- VB.net:
vb.net
/vb
/visualbasic
- HTML:
html
- XML:
xml
- Markdown:
markdown
/md
- Julia:
julia
/jl
- Turtle:
turtle
/ttl
- SPARQL:
sparql
- Verilog:
verilog
/v
- SystemVerilog:
systemverilog
/sv
- VHDL:
vhdl
/vhd
- Tcl:
tcl
- CommonLisp:
clisp
/commonlisp
- Scheme:
scheme
- Elm:
- Fix the colours of the heatmap search list.
- Fixed a logical error in the detection of remote changes of attachment files.
- Fenced code blocks, delimited by three backticks have a customizable box background. The colour (and different styles) can be customized by targeting the
code-block-line
-CSS class. - The font size of mathematics was decreased a bit to align it better with the size of normal text. Thanks to @tobiasdiez.
- Support fenced code blocks surrounded by tildes (
~
) instead of backticks. - The About dialog of the application now also holds a tab with debug information about both the binary, the system, and the current environment.
- Tags with diacritics are now also removed on export (with the respective setting turned on), so that the removed tags match the tags which are highlighted in the editor.
- Fixed searches behaving irrationally if you search again while the previous search has not yet ended.
- Switched to using the Clarity Design icon set where possible.
- Sort buttons now show how the directory is currently sorted. One shows and toggles what is being sorted by (name or time). The other shows and toggles what direction is being sorted ine (ascending or descending).
- Modified display settings are now applied on configuration changes (not just after clicking somewhere in the document).
- Modals now also apply a dark theming if in dark mode.
- Fixed image exports.
- Fixed correct exporting of images when exporting to Textbundle and Textpack.
- Fixed revealJS presentations which now display Math.
- Fixed the autocomplete behaviour, especially with cursor movement.
- If there is a selection in the document, its contents are used to fill in the search field now. Furthermore, the occurrences of the search term are now already highlighted without you having to search first.
- If there is a selection in the document, its contents fill up the global search field on focus, if the global search field does not have any contents.
- Fixed wrong display of project property table of content evaluation level.
- When linking files, Zettlr will now present you those files that match with at least one tag with the currently active file, making cross-linking of notes as easy as typing the link-start and hitting the arrow down-key. Bonus: It'll present you these options even if the files reside in a completely different root directory.
- Fixed behaviour of nested checkboxes.
- Fixed escaping of special TeX characters in input value fields (e.g. project properties).
- Finally fixed the parenthesis-link-problem. This means: For each Markdown link, the algorithm will parse the full detected URL and see if all opening parentheses have closing ones. If there are more opening parentheses than closing ones, the algorithm will push the link further in an attempt to fully resolve all parentheses. If this is not possible (because the link itself contains more opening than closing parentheses to begin with), you need to encode one opening parenthesis using
%28
for the algorithm to successfully render the link. - Dragging search results like normal files is now possible.
- When switching directories while a search result list is displayed, this search is now performed at the other directory immediately after switching.
- Reversing a MagicQuote can now be performed by pressing backspace after a replacement has taken place, in order to restore the default double (") or single (') quote.
- Math doesn't render in comments anymore.
- Opening files with Zettlr when the app is not running will now correctly open them.
- Zooming on Windows and Linux can now be facilitated by scrolling while holding down the control-key.
- Use
Cmd/Ctrl+Shift+L
to copy the active file's ID to the clipboard. - You can now also use
F2
to trigger a file rename for the current file. - Improve the detection and rendering of Setext-headings.
- Dropping files from the file list onto the editor now inserts a valid Zettelkasten-link to that file into the editor.
- Images will now also render in-line.
- The "Window" submenu is now not confined to macOS applications anymore, but available to all platforms.
- URLs in Markdown links will not be rendered anymore.
Under the Hood
- FSAL Refactor: This release includes a huge refactor of the file system core of the application. In general terms, the rewritten core enables Zettlr to handle the file system more efficiently, uses up less RAM and has some other goodies that make the whole File System Abstraction Layer (FSAL) much more scalable for future feature implementations. More precisely:
- From OOP to Functional: While previously files and directories were heavily object-oriented with one full object being instantiated for each and every file including a whole prototype chain, the new core switches to a functional approach, removing the memory-intensive prototype chains. Instead, files and directories are now represented by a descriptor which includes the all meta-information packages, but no function bodies. Instead, the new FSAL calls functions to which it passes one or more descriptors in order to enable the function to modify the descriptor itself. This also makes state management easier, as the whole FSAL only works with object pointers and does not re-instantiate most descriptors every time a function modifies them.
- Improved state management: Now the state is not littered across the main process code base, but instead is centrally managed by the FSAL core class, which emits events every time anything in the state changes. This keeps the functional logic of the application much simpler. As opposed to before, the Zettlr main application class only accesses the FSAL state, and furthermore makes use of three events -- directory replacement, file replacement, and full file tree update -- to propagate any changes to the renderer process.
- File Caching for faster boot: The FSAL additionally includes a sharded file cache which approximately halves the boot time. Furthermore, this enables the app to be much more resource-friendly for your storage, as the number of file accesses is reduced heavily -- at most, one hundred files will be opened during boot, instead of up to 10,000 or more, depending on the amount of open files you had.
- Improved remote change detection: As a result of the descriptor-system and improved central state management, detecting and managing state changes induced remotely much easier. The whole logic of the watchdog has been cut down to its essential parts to make its business logic more manageable.
- Improved debugging: Also as a result of implementing the new FSAL core as a self-contained EventEmitter module, it's much easier to locate logical errors, as due to improved state management missing state updates in the graphical user interface most likely emanate from exactly there, and not the FSAL. This has already helped identify several very small and almost unnoticeable bugs that did not update the renderer's state as wanted.
- Improvements to image dragging and dropping from the attachment sidebar.
- Switched the string variable replacer from vanilla JavaScript to moment.js, which simplified the function considerably.
- The
export
module is now really a module. - Switched to cTime internally as the representation for modification time, because it'll capture more changes than mTime.
- Updated insecure dependencies.
.git
-directories are now ignored.- Applying the CSS line classes for Markdown headings should now be less computationally intensive.
- Switched to Gulp for LESS compilation (thanks to @tobiasdiez for implementing).
- The command autoloader now logs potential errors during command loading.
- You can now pass a temporary configuration file to Zettlr, e.g. for testing purposes. Simply start Zettlr from the command line and pass
--config /your/config/file.json
. It can also only be a stub (e.g. only containing certain selected configuration parameters), as Zettlr will set all missing properties to their respective defaults. If the path is relative, Zettlr will attempt to find the file either at the repository root, ifapp.isPackaged
isfalse
, or at the current executable's directory. - Added a test command for GUI testing. It creates a small directory structure so that you can test the GUI without having to sacrifice your files or your mental health for that issue. Run
yarn test-gui
to run Zettlr in that test environment, and do to the files whatever you want! - The targets class is now a service provider.
- Fixed the
flattenDirectoryTree
utility function. I have no idea why it worked for eleven months, but when it started throwing errors on theFSAL
I realized it did a lot of things but it should've never worked. JavaScript is magic. Update: Found a newer and more optimized utility function,objectToArray
, so I'm trashing it for good. - The Pandoc-command is now logged in its resolved state immediately before actually being run.
- Windows installers are finally signed.
- Switched back to the
package.json
configuration for electron-builder, because, well, Electron. - Fix a lot of unused and weirdly coded code.
- Added a flag to determine if the Zettlr version has changed, indicating an update (or downgrade). Based on this, the FSAL will clear its cache on boot.
- Added command-line flag
--clear-cache
to programmatically clear the FSAL cache on startup. - Moved the
forceOpen
-functionality to a command. - Refactored the autocompletion logic and moved it out into its own designated class to reduce the size of the
ZettlrEditor
class. - Refactored the logic for building the bibliography in an attempt to further reduce the size of the
ZettlrEditor
class. - Include the
codemirror.css
into the geometry styles so we have one less dependency to include on startup. - Switched to Electron 9.0.0.
- Set the
standalone
flag for Pandoc on all non-special exports.