Zettlr

Your One-Stop Publication Workbench

GPL-3.0 License

Stars
9.7K
Committers
114

Bot releases are visible (Hide)

Zettlr - Release 1.8.0-alpha.3

Published by github-actions[bot] almost 4 years ago

Attention: This release may be unstable.

This release marks a hefty step from the previous alpha release. We've cleaned up half the codebase and added a whole bunch of new features. Overall, 199 files have been touched since the last release.

This release contains two important changes that we would like you to check:

  • This will be the first release where you will be able to download the installer directly from within the application, and start it. Please see that it works. Note that you have to close the download popup and re-open it to make visible the "Install" button. We know this, but haven't managed to implement it yet.
  • The release features the ability to switch between "native" and "custom" appearance for the windows. Native means: On macOS a inset titlebar (as you know it), and on Windows and Linux this means to use the default window decorations. Custom means: On all platforms Zettlr will use a custom menu bar and window controls adapted from the Windows 10 design.

Apart from these (hopefully stable) things we've also added some cool stuff:

  • The Quicklook windows now contain the same editor instance as the main editor, which means they will look much better
  • The rendering of documents will now be heavily increased due to major performance improvements we implemented
  • Various bug fixes

Happy testing!

Changelog

Breaking Changes

  • Renamed the sidebar to file manager. We finally decided on better terminology for distinguishing the right from the left sidebar. This means: The left sidebar, formerly known only as "sidebar," is now the "file manager." The right sidebar, formerly known as "attachment sidebar," is now "the" sidebar. This change was introduced to reduce user confusion and provide a better user experience.
  • The shortcut for opening the developer tools on Windows and Linux is now Ctrl+Alt+I (was: Ctrl+Shift+I) to resolve a conflict with the shortcut Ctrl+Shift+I (insert images).

GUI and Functionality

  • New Feature: Typewriter mode. By pressing Cmd/Ctrl+Alt+T, you can activate the typewriter mode, which will keep the current line in the editor always centered so that you have to move your eyes less while editing a text. This also works in combination with the distraction free mode so that you can fully focus on what you're editing right at the moment.
  • New Feature: The sidebar (formerly attachment sidebar) is now tabbified. That means you have three distinct tabs to choose from with regard to displaying important information: the non-markdown files in your currently selected directory, the references in the current file, and the table of contents of the current file.
  • New Feature: When hovering over links, they now appear in a separate tooltip to click them without holding down Ctrl/Cmd.
  • New Feature: The QuickLook windows now share the main editor including its appearance. The same options apply for Quicklook windows as they are set in the global preferences (e.g. if you turned off image previewing, images would also not be displayed in the Quicklooks, etc).
  • New Feature: Now you have an additional option in the "Advanced" preferences to choose between a "native" appearance of all Zettlr Windows (that is, a frameless window with inset traffic lights on macOS, and standard window decorations on Windows and Linux) or a custom built-in appearance (that is, for all platforms a frameless window with custom drawn menu and window control buttons, which mimick the Windows 10 design).
  • Added syntax highlighting modes (with keywords):
    • diff: diff
    • Dockerfile: docker/dockerfile
    • TOML: toml/ini
  • Fixed the fold-gutter being too close to the text.
  • The editor link autocompletion now respects the setting to use headings level 1 instead of YAML frontmatter titles where possible.
  • The paste image dialog now also provides the original image size as a default value, so that you simply can use the arrow buttons on the field to adjust the image size.
  • Fixed a rare bug where changes would be discarded if you renamed the modified file quickly enough.
  • HTML export should now centre both figures and figure captions.
  • Sorting files by name now takes into account possible settings such as using headings of level 1 or YAML frontmatter titles so that sorted files now correspond to their display again.
  • You can now select rendered references from the right sidebar.
  • The file tabs now have their own, dedicated menu, containing a new "Close all tabs" command to close all open file tabs (thanks to @anoopengineer for implementing).
  • The file info now displays the selection information, if there is any. The popup that opens when you click the counter then lists all selections within your document.
  • When you initiate a keyword search from the tag cloud by clicking on a tag, it'll be automatically enclosed in quotes, enabling searches for keywords with spaces in them.
  • The image paste dialog now shows you the resolved path of the directory into which the image you are about to paste will be saved to.
  • Fixed a missing translatable string from the paste image dialog.
  • Fixed the width of the word counter in order to make the toolbar more "stiff."
  • Enabled Dart syntax highlighting (thanks to @Kangie for implementing).
  • Reduced the added margins for overflowing dialog windows from 15 % to 2 %, making the visible gap on smaller screens smaller.
  • Remove the intermediary .ztr-project-migration code, which means you should update to Zettlr 1.7.x before updating to 1.8.x, if you still use an older version of Zettlr.
  • Fixed (= monkeypatched) a weird bug that would cause selections on specially indented lines (e.g. wrapped blockquotes, list items, etc.) to be padded by precisely four pixels, making the selection not look like a box.
  • Double clicks on file tabs now make files intransient (if they were transient before).
  • The editor is now in a non-editable mode if no file is open. If the editor is read-only, the Zettlr logo will display in the background to indicate that fact. Empty files, on the other hand, will not yield the feather logo anymore. This should now meet up with users' expectations about file editing better.
  • The last opened file will now reliably open whenever you start the application again.
  • File loading (especially on boot) is now much faster, because the opened tabs won't be switched through during load anymore. Only the relevant, last file will be opened and displayed.
  • Fixed a bug that would prevent you from exporting standalone files.
  • Non-breaking spaces (NBSP) are now considered word delimiters in the spellchecker.
  • Fixed a bug that would not close all tabs when the corresponding entry was selected from the tab context menu.
  • Fixed a bug where checkboxes of tasks would be strangely hidden on undo/redo operations that checked/unchecked those checkboxes.
  • Fixed a bug that would throw errors and not actually remove the file if said file was a root.
  • Fixed broken shortcuts Cmd/Ctrl+Shift+E (focus the editor) and Cmd/Ctrl+Shift+T (focus the file list).
  • Markdown links to local files that are absolute are now attempted to be opened internally, without recurring to external programs.
  • The various rendering methods now only update anything that is within the viewport, thereby increasing the performance vastly. This is especially noticable for large documents.
  • Fixed a bug that led to the exporter ignoring custom templates and always reverting to the default.
  • Fixed the date formatter, as the moment.js locales are not found when compiling using electron-forge.
  • Fixed a bug that would mess up the tag-tooltip on files under certain circumstances.
  • Fixed a bug that would throw errors instead of exporting, if the export-directory is set to the current working directory and a non-root file is being exported.
  • Fixed a bug which would not let you create duplicates of root files. Now, you can and the duplicate is being placed in the currently selected directory.
  • Fixed a rendering edge condition where if you wanted to retain multiple single-line breaks with backslashes, the backslashes positioned on the line would have had alternating colours.

Under the Hood

  • Switched to Electron forge (thanks to @tobiasdiez for implementing).
  • Bumped dependencies:
    • @clr/icons 4.0.1
    • @electron-forge/cli 6.0.0-beta.53
    • @electron-forge/plugin-webpack 6.0.0-beta.53
    • @teamsupercell/typings-for-css-modules-loader 2.3.0
    • @typescript-eslint/eslint-plugin 4.1.0
    • @typescript-eslint/parser 4.1.0
    • archiver 5.0.2
    • chokidar 3.4.2
    • codemirror 5.57.0
    • copy-webpack-plugin 6.1.0
    • electron 9.3.0
    • eslint 7.8.1
    • eslint-config-standard-with-typescript 19.0.1
    • eslint-plugin-vue 7.0.0-beta.3
    • file-loader 6.1.0
    • fork-ts-checker-webpack-plugin 5.1.0
    • fsevents 2.1.3
    • got 11.6.2
    • md5 2.3.0
    • mocha 8.1.3
    • node-loader 1.0.1
    • on-change 2.1.2
    • ts-loader 8.0.3
    • typescript 4.0.2
    • uglify-js 3.10.4
    • vue 2.6.12
    • vue-template-compiler 2.6.12
  • Added a new Handlebars templating helper function, i18n_value that allows you to translate something passing a value to the translation helper (e.g. {{i18n_value 'trans.identifier' someValue}}).
  • Refactored the main build Workflow file. Now it doesn't run on a matrix, but due to the many dissimilar steps involved, there are three distinct jobs. Other than that, we switched to the GitHub tag name instead of utilizing a node script to retrieve the package.json version, switched to yarn everywhere and cleaned up the code.
  • Removed the now unused scripts get-pkg-version.js and afterSign.js.
  • Finally removed the verbose IPC calls from the logs.
  • Migrated the toolbar logic from jQuery to vanilla JS.
  • Migrated the main renderer from jQuery to vanilla JS.
  • Migrated the popup class from jQuery to vanilla JS.
  • (Mostly) migrated the dialog classes from jQuery to vanilla JS (tabs are still done using jQueryUI).
  • Added a popup provider for easy creation of popups across the main renderer process.
  • Added an update provider for easy access to specific updating functionality (such as downloading an update, and automatically running it).
  • Migrated any popups that were defined inline into their respective handlebars template files.
  • The TableEditor is now finally a module.
  • Outsourced the CSS computations from the main module of the TableEditor.
  • Migrated the CodeMirror editor instantiation into its own module (MarkdownEditor).
  • Transformed all event listeners on the CodeMirror instance to "hooks" to reflect the fact that they are plugins, except they are not run like parameterless commands but hook into certain events of the application.
  • Moved the CodeMirror assets from the old folder into the MarkdownEditor module.
  • Moved some general utility functions to the common/util-folder.
  • The rendering plugins have been optimized. They now take less time to run and also don't keep an additional array of all the textmarkers in memory, decreasing the computational load especially for big documents.
  • The app now saves the last opened file again.
  • Moved the Turndown and Showdown converters to two utility functions, md2html and html2md.
  • Moved the regular expression for detecting image files by extension into the global RegExp module.
  • Moved the moveSection helper function to the common/util-folder.
  • Documentation fix for safeAssign.
  • Fixes in the tests.
  • Completely refurbished the test command. Now, a full-fledged testing directory will be set up to test features within the GUI without endangering your regular configuration in case you use Zettlr regularly.
  • Better handling of the custom paths for both the Pandoc and the XeLaTeX executables in the advanced preferences.
  • Migrated the FSAL to TypeScript so that the different descriptors can be better handled. Also, this showed countless logical errors, which are now mostly fixed.
    • Furthermore, the responsibilities have been readjusted: The FSAL is now responsible for emitting events whenever the internal state changes. This is not being done by the commands anymore.
    • The actions are now proper methods on the FSAL class in order to enable better tracking of the function arguments and to help ESLint fix possible signature errors.
    • Moved every piece of state logic from the commands to the FSAL.
    • Now, the general way anything regarding the files works is as follows: User --> one of the commands --> an action on the FSAL --> emits which part of the state has changed --> the application main class receives these notifications --> triggers potential updates in the renderer.
    • Additionally, now the distinction between the meta objects which can be serialized and sent to the renderer and the tree objects within the FSAL is made more clear: Metadata files can have content attached to them (in order to save new content to a file), whereas the full objects, which are never getting sent to the renderer, do not contain a content property anymore.
    • Also, we managed to fix errors regarding remote change detection.
  • The log provider now also outputs on the console, if the app runs unpacked (app.isPackaged === false).
  • Updated all service providers. They are now loaded immediately after application boot (right after the ready-event fires on the app-object) and not when the Zettlr main class loads.
  • Created a new directory app which provides functionality that pertains only to the lifecycle of the application itself, such as boot and shutdown functionalities. Service providers have been migrated to there.
  • Fixed the issue that only the en-US-language of the CSL styles was loaded for the citation provider.
  • CSL locales and CSL styles are now bundled with the app as native_modules.
  • Began providing first global interfaces which the service providers make use of in order to enable ESLint to detect errors.
  • Provide a test library, which you can load to debug citeproc-related issues and test the provider.
  • Converted the CSS Provider to TypeScript.
  • Converted the Log Provider to TypeScript.
  • Migrated the Quicklook and Print window classes to Typescript.
  • Added a utility function to quickly broadcast arbitrary IPC messages to all open Zettlr windows.
  • Migrated many functionalities that are important for all windows on the renderer side to a dedicated TypeScript module (register-window).
  • Divided the menu template into templates for macOS and Windows (+ all other platforms).
  • Simplified the menu building process.
  • Added classes and event listeners to show custom built menus within frameless BrowserWindow instances.
Zettlr - Release 1.8.0-alpha.2

Published by github-actions[bot] about 4 years ago

Attention: This release may be unstable.

Again, we have a lot of new bug fixes as well as new functionality. Some new things that we added this release:

  • A typewriter mode
  • A better updating download process (please remember this the next release to check that it works as expected!)
  • The "sidebar" is now the "file manager", whereas the "attachment sidebar" is now just the "sidebar"
  • The sidebar is now tabbed and features also the Table of Contents so that you can keep it open while editing files

Happy testing!

Changelog

Breaking Changes

  • Renamed the sidebar to file manager. We finally decided on better terminology for distinguishing the right from the left sidebar. This means: The left sidebar, formerly known only as "sidebar," is now the "file manager." The right sidebar, formerly known as "attachment sidebar," is now "the" sidebar. This change was introduced to reduce user confusion and provide a better user experience.

GUI and Functionality

  • New Feature: Typewriter mode. By pressing Cmd/Ctrl+Alt+T, you can activate the typewriter mode, which will keep the current line in the editor always centered so that you have to move your eyes less while editing a text. This also works in combination with the distraction free mode so that you can fully focus on what you're editing right at the moment.
  • New Feature: The sidebar (formerly attachment sidebar) is now tabbified. That means you have three distinct tabs to choose from with regard to displaying important information: the non-markdown files in your currently selected directory, the references in the current file, and the table of contents of the current file.
  • Added syntax highlighting modes (with keywords):
    • diff: diff
    • Dockerfile: docker/dockerfile
    • TOML: toml/ini
  • Fixed the fold-gutter being too close to the text.
  • The editor link autocompletion now respects the setting to use headings level 1 instead of YAML frontmatter titles where possible.
  • The paste image dialog now also provides the original image size as a default value, so that you simply can use the arrow buttons on the field to adjust the image size.
  • Fixed a rare bug where changes would be discarded if you renamed the modified file quickly enough.
  • HTML export should now centre both figures and figure captions.
  • Sorting files by name now takes into account possible settings such as using headings of level 1 or YAML frontmatter titles so that sorted files now correspond to their display again.
  • You can now select rendered references from the right sidebar.
  • The file tabs now have their own, dedicated menu, containing a new "Close all tabs" command to close all open file tabs (thanks to @anoopengineer for implementing).
  • The file info now displays the selection information, if there is any. The popup that opens when you click the counter then lists all selections within your document.
  • When you initiate a keyword search from the tag cloud by clicking on a tag, it'll be automatically enclosed in quotes, enabling searches for keywords with spaces in them.
  • The image paste dialog now shows you the resolved path of the directory into which the image you are about to paste will be saved to.
  • Fixed a missing translatable string from the paste image dialog.
  • Fixed the width of the word counter in order to make the toolbar more "stiff."
  • Enabled Dart syntax highlighting (thanks to @Kangie for implementing).
  • Reduced the added margins for overflowing dialog windows from 15 % to 2 %, making the visible gap on smaller screens smaller.
  • Remove the intermediary .ztr-project-migration code, which means you should update to Zettlr 1.7.x before updating to 1.8.x, if you still use an older version of Zettlr.
  • Fixed (= monkeypatched) a weird bug that would cause selections on specially indented lines (e.g. wrapped blockquotes, list items, etc.) to be padded by precisely four pixels, making the selection not look like a box.
  • Double clicks on file tabs now make files intransient (if they were transient before).
  • The editor is now in a non-editable mode if no file is open. If the editor is read-only, the Zettlr logo will display in the background to indicate that fact. Empty files, on the other hand, will not yield the feather logo anymore. This should now meet up with users' expectations about file editing better.
  • The last opened file will now reliably open whenever you start the application again.
  • File loading (especially on boot) is now much faster, because the opened tabs won't be switched through during load anymore. Only the relevant, last file will be opened and displayed.
  • Fixed a bug that would prevent you from exporting standalone files.
  • Non-breaking spaces (NBSP) are now considered word delimiters in the spellchecker.
  • Fixed a bug that would not close all tabs when the corresponding entry was selected from the tab context menu.
  • Fixed a bug where checkboxes of tasks would be strangely hidden on undo/redo operations that checked/unchecked those checkboxes.
  • Fixed a bug that would throw errors and not actually remove the file if said file was a root.
  • Fixed broken shortcuts Cmd/Ctrl+Shift+E (focus the editor) and Cmd/Ctrl+Shift+T (focus the file list).
  • Markdown links to local files that are absolute are now attempted to be opened internally, without recurring to external programs.

Under the Hood

  • Switched to Electron forge (thanks to @tobiasdiez for implementing).
  • Bumped dependencies:
    • @clr/icons 4.0.1
    • @electron-forge/cli 6.0.0-beta.53
    • @electron-forge/plugin-webpack 6.0.0-beta.53
    • @teamsupercell/typings-for-css-modules-loader 2.3.0
    • @typescript-eslint/eslint-plugin 4.1.0
    • @typescript-eslint/parser 4.1.0
    • archiver 5.0.2
    • chokidar 3.4.2
    • codemirror 5.57.0
    • copy-webpack-plugin 6.1.0
    • electron 9.3.0
    • eslint 7.8.1
    • eslint-config-standard-with-typescript 19.0.1
    • eslint-plugin-vue 7.0.0-beta.3
    • file-loader 6.1.0
    • fork-ts-checker-webpack-plugin 5.1.0
    • fsevents 2.1.3
    • got 11.6.2
    • md5 2.3.0
    • mocha 8.1.3
    • node-loader 1.0.1
    • on-change 2.1.2
    • ts-loader 8.0.3
    • typescript 4.0.2
    • uglify-js 3.10.4
    • vue 2.6.12
    • vue-template-compiler 2.6.12
  • Added a new Handlebars templating helper function, i18n_value that allows you to translate something passing a value to the translation helper (e.g. {{i18n_value 'trans.identifier' someValue}}).
  • Refactored the main build Workflow file. Now it doesn't run on a matrix, but due to the many dissimilar steps involved, there are three distinct jobs. Other than that, we switched to the GitHub tag name instead of utilizing a node script to retrieve the package.json version, switched to yarn everywhere and cleaned up the code.
  • Removed the now unused scripts get-pkg-version.js and afterSign.js.
  • Finally removed the verbose IPC calls from the logs.
  • Migrated the toolbar logic from jQuery to vanilla JS.
  • Migrated the main renderer from jQuery to vanilla JS.
  • Migrated the popup class from jQuery to vanilla JS.
  • (Mostly) migrated the dialog classes from jQuery to vanilla JS (tabs are still done using jQueryUI).
  • Added a popup provider for easy creation of popups across the main renderer process.
  • Added an update provider for easy access to specific updating functionality (such as downloading an update, and automatically running it).
  • Migrated any popups that were defined inline into their respective handlebars template files.
  • The TableEditor is now finally a module.
  • Outsourced the CSS computations from the main module of the TableEditor.
  • Migrated the CodeMirror editor instantiation into its own module (MarkdownEditor).
  • Transformed all event listeners on the CodeMirror instance to "hooks" to reflect the fact that they are plugins, except they are not run like parameterless commands but hook into certain events of the application.
  • Moved the CodeMirror assets from the old folder into the MarkdownEditor module.
  • Moved some general utility functions to the common/util-folder.
  • The rendering plugins have been optimized. They now take less time to run and also don't keep an additional array of all the textmarkers in memory, decreasing the computational load especially for big documents.
  • The app now saves the last opened file again.
  • Moved the Turndown and Showdown converters to two utility functions, md2html and html2md.
  • Moved the regular expression for detecting image files by extension into the global RegExp module.
  • Moved the moveSection helper function to the common/util-folder.
  • Documentation fix for safeAssign.
  • Fixes in the tests.
  • Completely refurbished the test command. Now, a full-fledged testing directory will be set up to test features within the GUI without endangering your regular configuration in case you use Zettlr regularly.
Zettlr - Release 1.8.0-alpha.1

Published by github-actions[bot] about 4 years ago

Attention: This release may be unstable.

This release marks the second iteration of the pre-1.8.x-phase. We have fixed a bug that made AppImage and other Linux exports unusable, and also fixed some other bugs that we came around. Mainly, again, the work in this release has been done under the hood.

Nevertheless, there is one new development here: A new update notifier! It is now much quieter and more unobstrusive. Additionally, it takes away the work to download the release and begin the updating process. Please, again, report any bugs we have overlooked so that we can get to it!

Changelog

GUI and Functionality

  • Fixed the fold-gutter being too close to the text.
  • The editor link autocompletion now respects the setting to use headings level 1 instead of YAML frontmatter titles where possible.
  • The paste image dialog now also provides the original image size as a default value, so that you simply can use the arrow buttons on the field to adjust the image size.
  • Fixed a rare bug where changes would be discarded if you renamed the modified file quickly enough.
  • HTML export should now centre both figures and figure captions.
  • Sorting files by name now takes into account possible settings such as using headings of level 1 or YAML frontmatter titles so that sorted files now correspond to their display again.
  • You can now select rendered references from the right sidebar.
  • The file tabs now have their own, dedicated menu, containing a new "Close all tabs" command to close all open file tabs (thanks to @anoopengineer for implementing).
  • The file info now displays the selection information, if there is any. The popup that opens when you click the counter then lists all selections within your document.
  • When you initiate a keyword search from the tag cloud by clicking on a tag, it'll be automatically enclosed in quotes, enabling searches for keywords with spaces in them.
  • The image paste dialog now shows you the resolved path of the directory into which the image you are about to paste will be saved to.
  • Fixed a missing translatable string from the paste image dialog.
  • Fixed the width of the word counter in order to make the toolbar more "stiff."
  • Enabled Dart syntax highlighting (thanks to @Kangie for implementing).
  • Reduced the added margins for overflowing dialog windows from 15 % to 2 %, making the visible gap on smaller screens smaller.
  • Remove the intermediary .ztr-project-migration code, which means you should update to Zettlr 1.7.x before updating to 1.8.x, if you still use an older version of Zettlr.

Under the Hood

  • Switched to Electron forge (thanks to @tobiasdiez for implementing).
  • Bumped dependencies:
    • @clr/icons 4.0.1
    • @electron-forge/cli 6.0.0-beta.53
    • @electron-forge/plugin-webpack 6.0.0-beta.53
    • @teamsupercell/typings-for-css-modules-loader 2.3.0
    • @typescript-eslint/eslint-plugin 4.1.0
    • @typescript-eslint/parser 4.1.0
    • archiver 5.0.1
    • chokidar 3.4.2
    • codemirror 5.57.0
    • copy-webpack-plugin 6.1.0
    • electron 9.3.0
    • eslint 7.8.1
    • eslint-config-standard-with-typescript 19.0.1
    • eslint-plugin-vue 7.0.0-beta.3
    • file-loader 6.1.0
    • fork-ts-checker-webpack-plugin 5.1.0
    • fsevents 2.1.3
    • got 11.6.2
    • md5 2.3.0
    • mocha 8.1.3
    • node-loader 1.0.1
    • on-change 2.1.2
    • ts-loader 8.0.3
    • typescript 4.0.2
    • uglify-js 3.10.4
    • vue 2.6.12
    • vue-template-compiler 2.6.12
  • Added a new Handlebars templating helper function, i18n_value that allows you to translate something passing a value to the translation helper (e.g. {{i18n_value 'trans.identifier' someValue}}).
  • Refactored the main build Workflow file. Now it doesn't run on a matrix, but due to the many dissimilar steps involved, there are three distinct jobs. Other than that, we switched to the GitHub tag name instead of utilizing a node script to retrieve the package.json version, switched to yarn everywhere and cleaned up the code.
  • Removed the now unused scripts get-pkg-version.js and afterSign.js.
  • Finally removed the verbose IPC calls from the logs.
  • Migrated the toolbar logic from jQuery to vanilla JS.
  • Migrated the main renderer from jQuery to vanilla JS.
  • Migrated the popup class from jQuery to vanilla JS.
  • Added a popup provider for easy creation of popups across the main renderer process.
  • Added an update provider for easy access to specific updating functionality (such as downloading an update, and automatically running it).
  • Migrated any popups that were defined inline into their respective handlebars template files.
Zettlr - Release v1.8.0-alpha

Published by github-actions[bot] about 4 years ago

Attention: This release may be unstable.

We are proud to present the very first alpha release of the upcoming Zettlr 1.8 release! This release is used to determine the usability of the application after our migration to electron-forge. That being said, everything should work right out of the box. We can guarantee that both the Windows and the macOS builds do work, but we were unable to test the Linux builds due to a lack of testing workstations.

This means, if you are a user of one of our Linux builds, please give feedback, either via Twitter, Reddit, GitHub, or on the forum. This also includes positive feedback, i.e. a short message that a certain package does work for you.

Are there risks installing the 1.8.0-alpha?

None that we know of. The worst that could happen is that the application itself simply stops working. If that happens, you can simply downgrade to 1.7.5 and continue to work normally. Your data and preferences are stored externally and are not affected by the changes in this release. If this release does not work for you, please give feedback so that we can address this!

What does 1.8 improve for me?

The migration to electron-forge means first and foremost a much smaller bundle size. We were able to decrease the size of the application by almost 100 Megabyte. Additionally, the application might be faster in various respects due to the way it is now packaged. Furthermore, we included several bug fixes already, and the list is going to grow until the stable release of 1.8.0.

Changelog

GUI and Functionality

  • Fixed the fold-gutter being too close to the text.
  • The editor link autocompletion now respects the setting to use headings level 1 instead of YAML frontmatter titles where possible.
  • The paste image dialog now also provides the original image size as a default value, so that you simply can use the arrow buttons on the field to adjust the image size.
  • Fixed a rare bug where changes would be discarded if you renamed the modified file quickly enough.
  • HTML export should now centre both figures and figure captions.
  • Sorting files by name now takes into account possible settings such as using headings of level 1 or YAML frontmatter titles so that sorted files now correspond to their display again.
  • You can now select rendered references from the right sidebar.
  • The file tabs now have their own, dedicated menu, containing a new "Close all tabs" command to close all open file tabs (thanks to @anoopengineer for implementing).
  • The file info now displays the selection information, if there is any. The popup that opens when you click the counter then lists all selections within your document.
  • When you initiate a keyword search from the tag cloud by clicking on a tag, it'll be automatically enclosed in quotes, enabling searches for keywords with spaces in them.
  • The image paste dialog now shows you the resolved path of the directory into which the image you are about to paste will be saved to.
  • Fixed a missing translatable string from the paste image dialog.
  • Fixed the width of the word counter in order to make the toolbar more "stiff."
  • Enabled Dart syntax highlighting (thanks to @Kangie for implementing).

Under the Hood

  • Switched to Electron forge (thanks to @tobiasdiez for implementing).
  • Bumped dependencies:
    • @clr/icons 4.0.1
    • @electron-forge/cli 6.0.0-beta.53
    • @electron-forge/plugin-webpack 6.0.0-beta.53
    • @teamsupercell/typings-for-css-modules-loader 2.3.0
    • @typescript-eslint/eslint-plugin 4.1.0
    • @typescript-eslint/parser 4.1.0
    • archiver 5.0.1
    • chokidar 3.4.2
    • codemirror 5.57.0
    • copy-webpack-plugin 6.1.0
    • electron 9.3.0
    • eslint 7.8.1
    • eslint-config-standard-with-typescript 19.0.1
    • eslint-plugin-vue 7.0.0-beta.3
    • file-loader 6.1.0
    • fork-ts-checker-webpack-plugin 5.1.0
    • fsevents 2.1.3
    • got 11.6.2
    • md5 2.3.0
    • mocha 8.1.3
    • node-loader 1.0.1
    • on-change 2.1.2
    • ts-loader 8.0.3
    • typescript 4.0.2
    • uglify-js 3.10.4
    • vue 2.6.12
    • vue-template-compiler 2.6.12
  • Added a new Handlebars templating helper function, i18n_value that allows you to translate something passing a value to the translation helper (e.g. {{i18n_value 'trans.identifier' someValue}}).
Zettlr - Release v1.7.5

Published by github-actions[bot] about 4 years ago

This new update for Zettlr brings another flock of bug fixes, and aims to make your experience even smoother. Read the changelog below to see exactly what's improved!

Changelog

GUI and Functionality

  • Fixed a bug where opening RMarkdown files with Zettlr not open would throw an error.
  • Fixed a bug where the app would not process inline images during export, leading to missing images.
  • HTML Export now centres figure captions underneath figures (thanks to @Kangie for implementing).
  • Zettlr finally allows alternative/title texts in images to be specified, making it possible to preview images with a title, and have them properly export even with relative filenames.
  • Fix wrong design of the sorters in combined sidebar file trees.
  • Fixed a bug where adding more and more list-characters in front of a list item would make the left gutter "swallow" these due to an extreme amount of negative indent. Now the line indentation for soft-wrapped lists (or anything indented) should work as expected.
  • Fixed a behaviour that would sometimes lead to the editor inserting tab-characters instead of spaces.
  • Added UX improvements to the fold gutter and the global search bar (thanks to @doup for implementing).
  • Fixed non-centered button icons and made some UI elements a little bit bigger.
  • You can now abort searching in Quicklook windows by pressing escape while the search field is highlighted.
  • Fixed a rare error where codeblocks would not be indented correctly in HTML outputs.
  • Zettlr now renders linked images.
  • Restored the security question when you are about to overwrite an already existing file.
  • Made URLs in references into clickable links that open in the system's browser (thanks to @maxedmands for implementing).
  • The context menu on directories within the file list now correctly shows you project options, if the directory is one.
  • The file tree has been cleaned up. Now, the children toggle (if a directory has any) as well as any additional icon will be displayed aligned with each other.
  • Fixed a bug that would not display the filename but a heading level 1 that has been removed from the file.
  • Single inline image inserts are now handled without adding newline characters.

Under the Hood

  • Added an additional check for directory exports to check that they indeed have an attached project.
  • Removed all legacy WebHostingHub-Glyph references and switch fully to Clarity.
  • Removed unused legacy code from the Quicklook windows.
  • Replaced getTokenAt with getTokenTypeAt, hopefully achieving performance gains on documents littered with renderable elements.
Zettlr - Release v1.7.4

Published by github-actions[bot] about 4 years ago

Changelog

GUI and Functionality

  • Removed a verbose debug notification which was added in order to test for persistence of bug #746.

Under the Hood

  • Fixed missing CSS styles (#1141).
Zettlr - Release v1.7.3

Published by github-actions[bot] about 4 years ago

Changelog

GUI and Functionality

  • Fixed a bug causing project exports to fail.
  • The Cmd/Ctrl+K-shortcut now works with most domains and protocols (i.e. no matter which URL is in the clipboard, it should insert it now).
  • Fixed a serious bug that would lead to file descriptors never updating their metadata and cause thousands of remote notifications where they shouldn't be, because the file metadata would never be updated after each safe, resulting in Zettlr thinking that the file hasn't been updated.
  • The application is now also available as an Windows ARM 64bit release.

Under the Hood

  • Upgraded joplin-turndown which should result in better HTML-to-Markdown conversion on pasting.
  • In case Pandoc produces any output (such as warnings or other useful info) but runs successfully, this output will be logged so that you can troubleshoot even non-fatal warnings.
Zettlr - Release v1.7.2

Published by github-actions[bot] about 4 years ago

Changelog

GUI and Functionality

  • The NSIS installer (Windows) now contains customized, branded images for the sidebar and header of the various pages visible during the setup process.
  • Added syntax highlighting modes (with keywords):
    • Clojure: clojure
    • LaTeX: latex/tex
  • Fixed a bug where the trailing --- of a YAML frontmatter would mistakenly be identified by the renderer as ATX-headings in readability mode, resulting in weird display of the last YAML frontmatter line.
  • Added feedback if there was no directory selected, but one is needed to do a certain task.
  • Multiline math equations now feature syntax highlighting.
  • Fixed a bug that would sometimes render parts of multiline equations as headings.
  • Added an option to tell Zettlr to use the first heading level 1 of a file to display instead of the filename (however, a frontmatter title will override this).
  • YAML frontmatter ending characters should not trigger AutoCorrect anymore.
  • The exporter now respects values from a YAML frontmatter, if (and where) applicable.
  • You should now be able to fold Markdown sections from anywhere within their section text.
  • Fixed a rare bug where Zettlr would attempt to render an internal link as a citation.
  • Creating files using a case-sensitive extension name should now work.
  • Set desktop Linux desktop icon in BrowserWindow config.
  • reveal.js-presentations now do not have standalone-flags during export.
  • The "Import"-option now also lets you select Markdown and text files. However, instead of running them through Pandoc, they are directly copied into the target directory.
  • Fixed a bug that would cause the global search to stop working in certain situations, e.g. after renaming a file.
  • The middle mouse button now closes tabs (thanks to @Kaan0200 for implementing).

Under the Hood

  • Added the logo source files to source control. Please make sure to read the accompanying README file in the icons-directory before using!!
  • The AutoCorrect replacement now checks for the actual mode at both range endings before actually performing a replacement.
  • The importer is now a module.
  • Fixed a logical error in the FSAL change detection, which would lead to the FSAL not being able to process additions of assets.
  • The application now uses app.getVersion() instead of requiring the package.json-file (thanks to @Aigeruth for implementing).
  • CodeMirror is now required directly within the plugins and is independent of the location of node_modules.
Zettlr - Release v1.7.1

Published by github-actions[bot] over 4 years ago

1.7.1

GUI and Functionality

  • Fixed a race condition that would cause the renderer to become completely unresponsive when creating uncomplete Zettelkasten links (e.g. [[contents] or [contents]]).
  • The interactive tutorial is now also available in French (thanks to @framatophe for their translation!).
  • The sidebar now shows single-citekeys (without square brackets) in the references list again.
  • Added syntax highlighting modes (with keywords):
    • Smalltalk: smalltalk/st

Under the Hood

  • Updated dependencies:
    • @zettlr/citr 1.2.0
    • @clr/icons 3.1.4
    • joplin-turndown 4.0.28
    • citeproc 2.4.6
    • electron 9.0.5
    • electron-notarize 1.0.0
    • mocha 8.0.1
    • chalk 4.1.0
    • got 11.4.0
    • tippy.js 6.2.4
    • moment 2.27.0
    • uuid 8.2.0
    • v8-compile-cache 2.1.1
    • eslint 7.4.0
    • eslint-plugin-import 2.22.0
    • eslint-plugin-vue 7.0.0-alpha.9
    • electron-devtools-installer 3.1.0
    • webpack-cli 3.3.12
    • uglify-js 3.10.0
    • vue-loader 15.9.3
    • css-loader 3.6.0
    • mermaid 8.5.0
Zettlr - Release v1.7.0

Published by github-actions[bot] over 4 years ago

After four months of intensive development, we are proud to present you the next iteration of your favorite Markdown editor: Zettlr 1.7.0 is finally here, and it's huge! As always, we have prepared a blogpost outlining the most notable changes, so please have a read before enjoying this version of Zettlr. Please note that there are a few breaking changes that you should be aware of. They are listed at the top of the changelog below.

Let's have a quick rundown of the most important new features:

  • Windows-installers are finally code-signed, so no more warnings from your operating system
  • New theme: Bordeaux
  • You can now open multiple files in tabs
  • Vim and Emacs input modes
  • A bunch of new syntax highlighting languages
  • Many visual improvements (better colors, better icons, tweaks to the UI in general)
  • A huge amount of improvements to the editor itself (both display and behavior)
  • Large numbers of smaller bugfixes, enhancements, and improvements around the app
  • A new, interactive tutorial for new users

Do you enjoy Zettlr? We would like to encourage you to support our development over at Patreon or PayPal to cover hardware and software expenses as well as the occational coffee. Even a symbolic dollar per month will keep Zettlr free for everyone.


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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+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.
    • Transiency: Tabs are opened transient, which means if you do not modify their contents, they will be replaced with another file that you open. This way you can quickly stroll through search results without having to close hundreds of tabs afterwards!
  • 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.
  • New Feature: Many apps feature it already, Zettlr joins them now. An interactive tutorial will be opened on the first start of the app.
  • 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
    • PowerShell: powershell
  • 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.
  • Enabled the context menu now also for both directories in the file list and the empty space in the file list (if there is some).
  • You can now open directories externally (read: in Finder/Explorer/your Linux file browser) in the context menu now.
  • Zettlr now attempts to set the cursor back to the place where it has been after programmatically updating the document content, e.g. after a remote change.
  • Added a setting to control the sensitivity of Zettlr checking for remote file notifications on certain systems.
  • Prevent multiple cursors when performing a special action (following a link, clicking a tag, etc.)
  • Now both the current cursor position and the word count are displayed side by side. No need to right-click again to toggle!
  • Citations in comments are now no longer rendered.

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, if app.isPackaged is false, 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 the FSAL 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.
  • Image rendering now also supports base64-encoded inline images.
  • Improvements to the detection of tags, internal links and footnotes. The algorithm is now more efficient and stable in various situations.
Zettlr - Release v1.7.0-beta.13

Published by github-actions[bot] over 4 years ago

In a final attempt at mitigating the issue with too many remote change notifications, we've added a new preference setting. In case you experience a high frequency of remote change notifications, you can now activate this setting and play around with the detection threshold (the number input below that setting). According to the documentation of the module we're using for detecting such remote changes, the default value of this is 2000 milliseconds (read: the file contents must not change for at least two seconds before the library will actually emit the change-event), but heavily varies with the system. Hence your ability to modify this value.

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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+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.
    • Transiency: Tabs are opened transient, which means if you do not modify their contents, they will be replaced with another file that you open. This way you can quickly stroll through search results without having to close hundreds of tabs afterwards!
  • 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
  • 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.
  • Enabled the context menu now also for both directories in the file list and the empty space in the file list (if there is some).
  • You can now open directories externally (read: in Finder/Explorer/your Linux file browser) in the context menu now.
  • Zettlr now attempts to set the cursor back to the place where it has been after programmatically updating the document content, e.g. after a remote change.
  • Added a setting to control the sensitivity of Zettlr checking for remote file notifications on certain systems.
  • Prevent multiple cursors when performing a special action (following a link, clicking a tag, etc.)

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, if app.isPackaged is false, 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 the FSAL 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.
  • Image rendering now also supports base64-encoded inline images.
Zettlr - Release v1.7.0-beta.12

Published by github-actions[bot] over 4 years ago

We're almost there! This beta includes nearly everything that has been reported as a bug for the current 1.7 beta releases, which means we're excitingly close to stable! However, the major culprit issue is still unsolved. But we've now included a lot of additional log-activity, so in case you experience unexpected "File modified remotely"-notifications, please check the logs as outlined in the issue. Please report back to us these log excerpts that we can get a better picture as to what is happening!

But now shortly the TL;DR for this beta:

  • The references section in the sidebar should now be always up-to-date
  • You can now open directories externally in the context menu
  • The context menu is now also active for directory entries in the file list, and also the empty space in the file list (if there is any)
  • The pop-ups are now much wider and hence show more content

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.
  3. Now you will need to either Cmd+Click (macOS) or Ctrl+Click (other platforms) on internal and external links as well as on tags in order to follow the link/start a search.
  4. 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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+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.
    • Transiency: Tabs are opened transient, which means if you do not modify their contents, they will be replaced with another file that you open. This way you can quickly stroll through search results without having to close hundreds of tabs afterwards!
  • 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
  • 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.
  • Enabled the context menu now also for both directories in the file list and the empty space in the file list (if there is some).
  • You can now open directories externally (read: in Finder/Explorer/your Linux file browser) in the context menu now.
  • Zettlr now attempts to set the cursor back to the place where it has been after programmatically updating the document content, e.g. after a remote change.

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.11

Published by github-actions[bot] over 4 years ago

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:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.
  3. Now you will need to either Cmd+Click (macOS) or Ctrl+Click (other platforms) on internal and external links as well as on tags in order to follow the link/start a search.
  4. 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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+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
  • 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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.10

Published by github-actions[bot] over 4 years ago

This new beta again includes numerous improvements, and even a few new features for you to try out! Here's the TL;DR:

  • List indent fix
  • Open with … Zettlr should now work reliably across all platforms
  • Horizontal scrolling of the tab bar is now possible everywhere
  • Ctrl+Zooming is now possible
  • File IDs can now be copied using a shortcut
  • F2 now also triggers file renaming on Windows and Linux
  • Files can now be dropped onto the editor from the file list to create Zettelkasten-links
  • The ToC is now working again
  • Images can also be inline now
  • Windows and Linux users now also have the Window-menu at their disposal (+ associated shortcuts such as Ctrl+W, Ctrl+Tab and Ctrl+Shift+Tab

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.
  3. Now you will need to either Cmd+Click (macOS) or Ctrl+Click (other platforms) on internal and external links as well as on tags in order to follow the link/start a search.
  4. 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!


1.7.0

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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+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
  • 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.

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.9

Published by github-actions[bot] over 4 years ago

This new beta again includes numerous improvements, and even a few new features for you to try out! Here's the TL;DR:

  • Clicking internal and external links as well as tags works now either using Ctrl+Clicks or Cmd+Clicks, depending on platform
  • The file context menu works now on the tabs as well
  • Markdown-URLs should work much better and more compatible now
  • The statistics window is now fixed
  • Selection colors should now be better
  • HTML-comments can be folded again
  • Tag recognition is now better
  • Markdown-Links with parentetheses in the link (especially relevant for Wikipedia links) are now detected properly
  • Files can now also be dragged around during searches
  • If you search for something, switching a directory will re-do the search in the newly selected directory
  • You can now additionally to the normal input mode use the VIM and Emacs keybindings
  • MagicQuotes can now be reversed
  • You can now decorate directories with icons

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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, use Cmd/Ctrl+Shift+W.
  • Now you will need to either Cmd+Click (macOS) or Ctrl+Click (other platforms) on internal and external links as well as on tags in order to follow the link/start a search.

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
  • 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.

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.8

Published by github-actions[bot] over 4 years ago

We're proud to present the next beta! With this, we switched to a newer Electron-version, so there may be new errors we did not spot during upgrading. Please report these so that we can fix them!

Improvements to the last beta:

  • Added several syntax highlighting languages (HTML, XML, Markdown, and Julia)
  • Fix numerous logical errors in the FSAL file caching mechanism
  • Fix the autocompletion refactoring
  • Fix issues with the handling of root files and directories

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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, use Cmd/Ctrl+Shift+W.

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!
  • 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
  • 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).

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.7

Published by github-actions[bot] over 4 years ago

The version v1.7.0-beta.6 had a critical error on first start, which has been resolved with this release. We'd like to apologize for any inconveniences encountered.


Good morning! We're proud presenting you yet another beta version. Apart from the usual yadda yadda, here's what's changed since beta.5:

  • Changed Cmd/Ctrl+W: Now closes open tabs first, before closing the main window.
  • New shortcuts: Switch tabs (Ctrl+Tab and Ctrl+Shift+Tab)
  • Enhancement: Both global and file search fields are now preset with a selection from the editor, if given
  • Feature: File matching — when linking files (e.g. [[filename]]) those with a higher match based on used tags appear to the top of the list.
  • Feature: set the new setting to true in order to automatically created linked files if they do not yet exist
  • Fix math equations on HTML export
  • Fix global search autocomplete keystroke detection
  • Fix caching issues on the FSAL
  • Fix saving project properties
  • Fix special characters in PDF variable values (PDF Author/PDF Title/etc)
  • Fix nested checkbox rendering and behaviour
  • Fix tooltips with fileinfo appearing in the top-left corner sometimes

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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, use Cmd/Ctrl+Shift+W.

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!
  • 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
  • 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).

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.6

Published by github-actions[bot] over 4 years ago

Good morning! We're proud presenting you yet another beta version. Apart from the usual yadda yadda, here's what's changed since beta.5:

  • Changed Cmd/Ctrl+W: Now closes open tabs first, before closing the main window.
  • New shortcuts: Switch tabs (Ctrl+Tab and Ctrl+Shift+Tab)
  • Enhancement: Both global and file search fields are now preset with a selection from the editor, if given
  • Feature: File matching — when linking files (e.g. [[filename]]) those with a higher match based on used tags appear to the top of the list.
  • Feature: set the new setting to true in order to automatically created linked files if they do not yet exist
  • Fix math equations on HTML export
  • Fix global search autocomplete keystroke detection
  • Fix caching issues on the FSAL
  • Fix saving project properties
  • Fix special characters in PDF variable values (PDF Author/PDF Title/etc)
  • Fix nested checkbox rendering and behaviour
  • Fix tooltips with fileinfo appearing in the top-left corner sometimes

Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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, use Cmd/Ctrl+Shift+W.

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!
  • 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
  • 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).

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.5

Published by github-actions[bot] over 4 years ago

Again a huge fixing release. Please see the issue list on GitHub in case you're missing something. Chances are we haven't yet been able to implement it and it will come in one of the next betas!

P.S.: In case you experience anything unusual with the new icon set, please refer to this issue!


Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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.

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.
  • 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
  • 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.

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, if app.isPackaged is false, 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 the FSAL 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.
Zettlr - Release v1.7.0-beta.4

Published by github-actions[bot] over 4 years ago

Next Next beta*, this time with many fixes already applied. Please see the issue list on GitHub in case you're missing something. Chances are we haven't (yet) been able to implement it and it will come in one of the next betas!

P.S.: In case you experience anything unusual with the new icon set, please refer to this issue!

* Beta 3 didn't run, which is why we had to build again.


Attention: This update will break backwards-compatibility quite a bit, which means the following will happen when you first start the app:

  1. The virtual directories will be gone from the .ztr-directory files as we are discontinuing that feature.
  2. The projects will be merged into the .ztr-directory files and afterwards the .ztr-project-files will be removed.

This means if you want to maintain backwards compatibility you'd need to backup all customised .ztr-directory-files — the easiest way would be simply to copy all your Zettlr directories to another place if you want to switch back in case. But we believe that you won't want that once you've tasted the new features! ;)


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.

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.
  • 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
  • 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.

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, if app.isPackaged is false, 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 the FSAL 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.