When the vim extension is enabled and in "normal" mode, some default
bindings collide with Silverbullets commands (eg: `ctrl-p` - Share,
`ctrl-o` - Open Document, `ctrl-e` - Export, `ctrl-g h` - Home). These
vim bindings are not always functional (they may appear to do nothing
depending on vims state). This gives the impression that Silverbullet is
bugged and wont trigger commands. In "insert" mode, most bindings are
passed through correctly with some exceptions (eg: `ctrl-o`).
By splitting the command keybindings into their own keymap extension and
loading it before the vim extension, we can ensure Silverbullet commands
always trigger.
This does mean some vim bindings are overshadowed, but if a binding
triggers a Silverbullet command, its generally obvious that *something*
happened and the user should be able to recognise why the vim binding
failed and then rebind the command or vim mapping.
- New check for full indexing completion
- Renamed `hasInitialIndexCompleted` to `hasFullIndexCompleted` for clarity.
- Removed file:initial event (no longer required and not documented for public consumption)
Hopefully doesn't introduce new regressions. Needs testing time "in the field".
- Introduced `currentPageMeta` method to encapsulate access to the current page's metadata.
- Updated references to page metadata throughout the codebase to use the new method, improving code readability and maintainability.
- Adjusted related components in the UI and linting logic to utilize the new method for consistency.
* Removed code complete from mini editor (didn't really work anyway, and
only use case was emoji)
* Changed meta picker to be more consistent with page picker
* Alt-space completion in page picker (completes "folder" to the top
match)
Trigger editor re-render after page metadata is loaded to ensure Lua
widgets re-evaluate with the correct context. This fixes issue #1729
where widgets would show broken state on initial page load because
ctx.currentPage would be nil until the metadata finished loading
asynchronously.
The fix dispatches an empty CodeMirror transaction after updating the
page metadata, which triggers all decorator state fields (including
Lua widgets) to re-render with the updated metadata.
This splits indexing into two phases:
* preindex (where only pages, space lua, space styles are indexed)
* index (where everything else is indexed)
The goal is to get to more-or-less operational state quicker this way,
because probably most functionality can already be enabled after the
pre-index phase.
accidentally writing to a read-only file and only finding out about it
after a sync.
Also removes redundant space primitive implementations that weren't used
Last openen page information is now kept in the datastore and therefore
persistent even across tabs. This seems to also have fixed ther andom
behavior when deleting a page -> you always go back to your last opened
page (before the one you deleted).