Please read the accompanying release announcement here.
Attention: This release will reset your language settings! This means that you have to change the application language again, if you diverted from the default language. Also you have to re-select the dictionaries you are using.
GUI and Functionality
- Attention! Installing this update will reset the application language to the detected system locale and reset all spellcheck choices (i.e. you will have to re-select the dictionaries using the preferences window). The reason for this is that Zettlr is now compliant with the regulations for language codes as laid out in the Best Current Practices No. 47 (BCP 47). To achieve this, all mechanisms of finding and loading translation files and dictionary files had to be modified.
- New Feature: Paste Images. From now on it is possible to copy images directly to the clipboard, then press
Cmd/Ctrl+Vin the editor and Zettlr will ask how to proceed. By pressing
Returnthe default action will be taken: The image will be saved into the currently selected directory using either the original filename or a simple hash (for instance if you took a screenshot and there's no associated URL available), and it will be inserted at the current cursor position as a standard Markdown image tag, using the filename as title. If you don't press
Returndirectly, you can adapt some options, such as the file size and the filename, and also choose a custom directory alternatively.
- New Feature: Set writing targets. You can set writing targets for files by right-clicking them in the preview list. Each file that has a writing target will display its progress in the snippets section. Set an existing target to 0 to remove it.
- New Feature: Print support. Just press
Cmd/Ctrl+Pto open the print preview, which is essentially an exported HTML file. Click the printer icon in the titlebar to print it!
- New Feature: Custom CSS. Beneath your tag preferences, you now have a new menu option that lets you override certain styles of the app to customise it even further! From now on, the sky really is the only limit for customising the app.
- Huge updates to the statistics dialog. We've added a lot of functionality to the statistics dialog. If you click the
More …button in the statistics popup, the resulting dialog now presents you with a overhauled interface. Now you'll be able to filter your data by week, month, and year. Additionally, you can choose to compare the timeframe with the previous one (either week, month, or year). This way you'll be able to track your writing habits much more differentiated.
- Tags are now only rendered as such and detected by the internal engine, if they are preceeded by a newline or a space. This will prevent page anchors inside links (e.g.
example.com/page#anchor-name) or words with hashes in them from being detected as tags.
- Switched from
Liberation Monofor displaying monospaced code and comment blocks because of better support for glyphs in the latter font.
- Fixed an issue with the titles of the exporting buttons for HTML, docx, odt and PDF.
- Fixed a small bug that made it unable to open standalone files from the directory list.
- Small fix to the margins of switches. General fixes to the colours of the input controls in dark mode.
- Fixed a bug that led to files reporting the same tags more than once.
- Search results are now readable even in dark mode.
- Fixed a bug that would not correctly transform the links of images dragged from the attachment sidebar onto the editor, causing errors by pandoc when trying to export the file.
- Task list items are now rendered directly after you leave the formatting. You don't have to leave the line anymore.
- Special tags that you've assigned a colour to are now displayed distinct from other tags in the tag dropdown list.
- Now changing dictionaries during runtime yields the expected effects: The full word buffer will be invalidated so that formerly-wrong and formerly-correct words are checked against the new dictionaries.
- Fixed a small bug that would cause users with French localisation to not be able to use the preferences dialog as it was intended.
- Fixed a bug that made it impossible to load new dictionaries from the user directory.
- Fixed a small issue that would display the full translation strings for dictionaries and languages that were not translated in the currently loaded translation, instead of just the language codes.
- Fixed a small bug that would, on some Linux distributions, lead to the operating system opening up loads of file explorer windows when the "Open Directory"-button in the attachments sidebar was clicked.
- Now it's not possible anymore to try to create files and directories within virtual directories.
- The cursor blinks now smoothly.
- Changes to the word-count chart: Now numbers are localised and the date is not in the ugly ISO format anymore.
- You can now easily search for a file to link with the newly implemented autocompletion list that will pop up if you begin writing an internal link (i.e. type
[[). After accepting an autocomplete suggestion, Zettlr will either put the ID between the brackets, or the filename, if there is no ID.
- Fixed a bug that would throw an error if updating the config with no dictionary loaded on app boot.
- Fixed a bug that would move a file to a random directory instead of enabling you to actually copy said file outside the app, if you dragged the file out of the app and passed the directory list.
- Fixed the highlighting effect on drag operations. Now even if you use the thin sidebar mode, the directories where you can drop files will receive the highlighting shimmer.
- Added an option to hide the heading characters and replace them with a small tag indicating the heading level (
h2, etc). Off by default.
- Refined the rendering of links. Now, inline elements will be also rendered correctly inside rendered links.
- The app will now correctly scroll to the selected file again (if any).
- Added an option to hide directories from the preview list while performing a global search.
- Fixed a small error that would strip false positive tags on export (i.e. that would also strip escaped tags).
- Massive updates to the notification service provider. If a message is too long, it will be truncated when it is first shown to you. If you then click on the notification, it will expand itself so that you can read the full message. Click on it again to hide it. Additionally, the notifications are now the same height and move smoothly as soon as new notifications arrive or old ones get removed.
- Gave the exporter an update: Now, if Pandoc experiences an error during export, you will be presented with a better error dialog which even lets you select portions of the error message for you to google them.
Under the Hood
- Moved the input styling to the geometry section and only left the colouring in place.
- Added a
data-default-actionsupport for Dialogs. Now there can be a button with the attribute
data-default-action="data-default-action"(repetition necessary for ensuring a correct DOM structure) in each dialog that will be focused on instantiation of the dialog, thereby enabling a simple "default action".
- Small changes to the translation files to remove some duplicates.
md5for generating simple hashes.
ZettlrDictionary-class is now an
update-events whenever the composition of the loaded dictionaries changes.
- Renamed the default theme to its correct name: Berlin.
- Small changes to enable on-the-fly theme CSS replacement.
- Better escaping of some feedback strings in the preferences template.
- The app is now BCP 47 compatible. This means that it should be possible to load every translation file and every dictionary folder using the correct language tag, instead of having to fall back to the crude xx_XX-type Zettlr used until now.
- Moved the editor-specific
getWordCountfunction out as a helper function.
- Added an
updateFilemethod to the
global.ipcto enable files to update themselves silently if something changed.
- Moved the calculating functionality of the
ZettlrStatsViewclass to the main process's
- Removed the
ZettlrStatsViewclass and moved the triggering functionality to the
ZettlrBodyclass accordingly with the other popups/dialogs.
- Branched out the
ZettlrDialogclass so that all functionality is now provided by specialised dialog classes that inherit from the base class.
- Rearranged the options within the "Advanced" tab in the preferences dialog.
- Moved out all CodeMirror
require()to a new file called
autoload.jsin the assets directory to save space in the main
- Added a security pass to the droppable directories to make sure they don't accidentally accept the file and direct the main process to move it out of the app instead of moving it to themselves.
- Switched back to
electron 3for the time being, as
electron 4still has a nasty bug that renders the toolbar unusable when exiting fullscreen on macOS (see electron/electron#16418 ).
- Switched to
nspellfor spellchecking, as the correction-finding algorithm works smoother and the repository is not as old as
makeExportnow returns a Promise instead of the Exporter object. The exporter is now only returned if it's call succeeded (by passing it to
- There is now the yarn command
yarn less:extractavailable which extracts the CSS class names and IDs from the prebuilt styles. Please note that you must run the
yarn lesscommand beforehand.