Added
- Live reload when notes change on disk. shiki now watches the selected notebook's directory (
notify, shiki-tui/src/fs_watch.rs) and re-lists NOTES when a file is created, edited, or deleted by something else — another editor, a git pull from a shell, a sync tool — instead of needing a manual reload. Events are debounced (300 ms) so a burst costs one reload, anything under .git is ignored, and the reload only runs in Normal mode: a change that lands mid-edit, mid-prompt, or mid-Visual-selection is held and applied once you're back, so it can't shuffle indices out from under what you're doing. The selection is preserved across the reload. (#105)
Fixed
- AltGr key combinations (
[, #, @, {, …) now type on layouts that need them. Windows terminals report AltGr as Ctrl+Alt, so those characters arrived with both modifiers set and every handler — plus the inline editor, which only inserts unmodified characters — treated them as shortcuts and dropped them. keybindings::normalize_altgr strips Ctrl+Alt from printable non-letter characters at the one point key events enter the app; ASCII letters are left alone so real Ctrl+Alt+letter bindings (e.g. Ctrl+Alt+I) still work. (#108)
- The cursor in text prompts (rename, new note, …) is placed correctly after wide Unicode characters. It was offset by the character count; CJK and emoji occupy two terminal cells, so the cursor sat to the left of where the text actually ended. It now uses display width (masked passphrase boxes still count one
* per character). (#103)
Added
- Document-format compatibility patch: notebooks now tolerate
.qmd (Quarto), .rmd (R Markdown, Quarto's direct predecessor), and .markdown (the verbose spelling some static-site generators default to) files alongside .md/.mdx/.txt when listing/reading notes (Notebook::list_dir's NOTE_EXTENSIONS), the same way .mdx/.txt support for Obsidian vaults landed in 0.9.0 — a notebook pointed at an existing Quarto/R-Markdown/Jekyll project now shows those files instead of silently hiding them. All of these are just Markdown with optional YAML frontmatter under a different name, so no new per-format parsing was needed. The extension match is now case-insensitive, since R Markdown's real-world convention is capital-R .Rmd, not .rmd — without that, adding .rmd to the list wouldn't have actually recognized the files it was for. New notes are still always created as .md; renaming a non-.md note preserves its original extension, original case included, instead of converting it to .md. (#96)
general.note_extra_extensions — a new Settings modal (GENERAL tab) option letting a notebook treat arbitrary extra file extensions (source code, plain text, anything else shaped like content with optional YAML frontmatter) as notes too, on top of the built-in md/mdx/txt/qmd/rmd/markdown list — e.g. py, org to also pick up Python scripts or Org-mode files. Empty by default (this is for genuinely user-chosen formats, not something shiki opts a notebook into on its own), matched case-insensitively, edited as a comma-separated list the same way every other GENERAL text field already is. Notebook::with_extra_extensions/ NotebookStore::extra_extensions propagate it to every Notebook a store hands out, and editing it in the Settings modal takes effect immediately — no restart needed. (#96)