Releases: notable/notable-insiders
Releases · notable/notable-insiders
v1.9.0-alpha.1
- Ensuring the most recent data directory used in previous versions of the app is properly migrated to v1.9
- Ensuring settings used by previous versions of the app are preserved, allowing for older versions of the app to be used alongside v1.9
- Handling data directory switches much more reliably
- Ensuring the minimum allowed window dimensions get updated properly
- Emoji palette: pasting also the selected emoji in the editor
- Language palette: pasting also the selected language in the editor
- Changelog: always showing trailing
.0
sections version numbers - Ensuring the state of built-in documents is properly preserved too
- Ensuring extra separators are properly removed from the app menu
v1.9.0-alpha.0
Overview
- Most of the app has been completely rewritten, with the following goals in mind
- Bringing the app closer to supporting plugins
- Many built-in features are now implemented as internal plugins
- The app is now foundamentally based on VS Code-like primitives like settings, context keys, commands and shortcuts, which will be the building blocks of future plugins
- Bringing the app closer to being able to run in the browser and on smartphones
- Electron's "main" and "renderer" processes have been almost completely decoupled from each other
- Electron's "renderer" process is close to being completely sandboxed, which would make it not that much different from a regular browser tab, once that happens the app will be able to run in the browser with some minor modifications
- The codebase is now in a much better state, which overall should lead to fewer bugs and faster iteration speed
- Bringing the app closer to supporting plugins
- This release will require some exploration to fully master
- With 448 commands, 241 shortcuts, 83 context keys, 177 customizable colors, 19 standalone palettes and 18 context menus implemented this changelog can only attempt to cover a fraction of what's new
- The codebase grew from 14k lines of code to 26k lines of code
New Features
- Online presence
- New domain: notable.app
- That is a much more premium domain, which the previous owner gifted to us
- The updated website serves ~98% fewer JavaScript (~40kb -> ~1kb) and ~40% fewer bytes overall (~550kb -> ~350kb)
- Public Discord chat: chat.notable.app
- Twitter handle: @TheNotableApp
- YouTube channel: Notable
- Snap store: Notable
- New domain: notable.app
- Redesign
- The UI has been redesigned to be cleaner and more pleasant to look at
- Mainly lists and trees now have their items more spaced out
- Sidebar
- The sidebar is now divided into sections, both for more easily distinguishing them and for making space for some future buttons
- All "All Notes" sections, except for "Notes/All Notes", are now hidden to discourage their usage, but they can still be selected from the palette
- The chevron used for collapsing and expanding tags now is animated too
- Tags can now be recursively collapased and expanded by
CmdOrCtrl+Click
-ing their chevrons
- Commands (help page)
- 448 commands have been implemented
- Almost every action you can take in the app is now exposed as a command, you can think of commands as like functions in a programming language
- Any command can be assigned to custom shortcuts
- Any command can be triggered via
notable://
URLs from outside of the app too - Some commands accept one or more arguments, which make them expecially flexible and powerful
- All commands that don't require any arguments can be triggered from the command palette
- All buttons and menu items throughout the app behind the scene just trigger a specific command
- Some commands are visible in the command palette depending on the evaluation of some context keys expressions
- Some notable commands:
macro
: this is a simple but powerful command that executes a sequence of other commands, potentially passing arguments to each of those commandsnote.tag.toggle
: this command will show you a searchable list of tags that can be added or removed from the current note, it will also display a dynamic item for adding a new custom tag. When passing arguments to it you could also use it to configure shortcuts that toggle specific tags quicklysettings.cycle
: this command receives an array of settings objects, and cycles through them, it could be used for implementing a custom "Focus" mode that works like you want, or in combination withnotable://
URLs it could be used for creating a link that when clicked changes the whole theme of the appedit.write
: this command simply writes the passed string in the currently focused editable element, it could be used in combination with shortcuts to make a bare-bones snippets managercontextKey.set
: this advanced command can be used for definying new custom context keys, which you might want to play with for adding vim- or emacs-like shortcuts to the app
- Shortcuts (help page)
- 241 shortcuts have been implemented
- Custom shortcuts can be added
- Shortcuts trigger commands, optionally passing them some arguments
- Shortcuts can be enabled dynamically depending on the evaluation of a context keys expression
- Shortcuts using special tokens like
CmdOrCtrl
are resolved dynamically depending on the OS the app is running on - Any built-in shortcut can be removed
- Both global-level and data-directory-level shortcuts can be added
- Shortcut sequences, like
Cmd+K Cmd+1
, are fully supported - Shortcut hints are provided throughout the app in menu items and in buttons' tooltips
- If you add some custom shortcuts then your custom shortcuts will be displayed as hints instead, when possible
- Some notable shortcuts:
CmdOrCtrl+Esc
: it triggersview.reset
, which resets the view to its original stateAlt+Tab
: it triggersnote.go.heading.next
, which navigates to the next heading in the noteCmdOrCtrl+T
: it triggerstab.new
, which asks you to select a note to open in a new tabCmdOrCtrl+K CmdOrCtrl+W
: it triggerstabs.close
, which closes all tabsCmdOrCtrl+Shift+S
: it triggersexport
, which will export your active notes
- Context keys (help page)
- 83 context keys have been implemented
- Each context key describes a particular aspect of the state the app is currently in, you can think of context keys as like variables in a programming language
- Most context keys represent boolean values, they are either
true
orfalse
- You can combine context keys in an expression that will be evaluated dynamically to either
true
orfalse
- Context keys expressions are written in a safe subset of JavaScript
- Some notable context keys:
hasTab
: it tells you if there is a tab opensettings
: maybe the most powerful context key, it provides you with access to the entire settings objectisThemeDark
: maybe you want to run some shortcuts only if the current theme is dark? Maybe not, but you can if you wantisMultiNoteEditorOpen
: it tells you if the multi-note editor is currently activeeditorLanguage
: it tells you the language of the text in the current editor, useful for writing Markdown-only or JSON-only shortcuts
- Settings (//TODO: Maybe write an help page for settings too?)
- Settings, this includes shortcuts too, are represented in the JSON format
- Settings are stored on disk as JSON files
- Both global-level and data-directory-level settings can be configured
- All settings are preserved across restarts
- Inline comments are supported
- Path properties are supported (e.g.
"theme.active": "dark"
) - Each setting is validated so it's impossible to configure an invalid setting that breaks the app, the app would just ignore it
- Settings can be edited from outside the app too with any standalone text editor
- Some notable settings:
editor.indentation.guides.enabled
: it sets whether indentation guides are visible or not in the editorkatex.macro
: you can define custom macros for KaTeX heretabs.alwaysPersistent
: it lets you always open persistent tab, without requiring double-clicks
- Theming (help page)
- 177 colors have been implemented
- All themes are entirely generated from those configurable colors
- Colors can be customized by configuring the
"theme.colors"
setting - Both global-level and theme-level custom colors can be configured
- Global-level colors should be provided at
"theme.colors"
- Theme-level colors should be provided at ``"theme.colors.[Title]"`, where "Title" is the title of a particular theme you want to customize the colors of
- Global-level colors should be provided at
- Built-in themes generate most of their colors from some other colors, so you only need to customize a handful of them to get a totally different-looking theme
- Any valid CSS color can be used
- Some notable colors:
colors:primary:background
: this is probably the most dependend on color in each theme, changing it will have a ripple effect throughout the themewindow:border
: when this color is nottransparent
a border will be added to your window, it could be useful for more easily distringuishing between data directories when configuring a different color for each oneeditor:guide:backgroundActive
: if you have indentation guides enabled you can configure this color to be different thaneditor:guide:background
, this way the editor will tell you which indentation level is currently activeeditor:fold:background
: you can customize this color to have folded lines colored specially
- Themes
- All built-in themes have been rewritten
- The Dark theme in particular is now much more polished
- A new, special, "Print" theme has been implemented
- It's the theme used for priting
- It's designed to reduce ink usage
- It don't support global-level colors customizations but only theme-level customizations
- Palette
- 19 standalone palettes have been implemented
- All these palettes are available also from the main palette
- The actual palette that will be searched into depends on the prefix used in your query
- Shortcut hints for quickly picking results are provided
- Many more palette-like widgets will be opened on demand by various commands for prompting you for a selection
- Some notable ...