Experimental modal text editor built for extensibility and flexibility

feat: make the editor actually usable #39

Open amartin.beer
targeting master from push-uopxpnpuutzs
Open opened by and assigned to amartin.beer
targeting master from push-uopxpnpuutzs

Lots of stuff going on, I've forgotten to split the branch and now it's an enormous behemoth but commits are pretty clear about everything. Not going to happen again, pinky promise! 😃

Commits 33

docs(readme): update current status, structure, roadmap, key bindings
feat(ui): message system with echo line and log
feat(runtime): ivy palette for command args with candidates
feat(runtime): open, save-as, and set-theme commands
fix(ui): keep the buffer viewport and current-line highlight during prompts
feat(ui): theme prompt and palette block
feat(ui): Janet-built statusline
feat(ui): colorscheme buffer text and selection
feat(ui): line numbers with gutter
feat(bridge): tree-sitter syntax highlighting with declarative colorscheme
feat(runtime): show `:` caret in minibuffer prompt
fix(runtime): selection edge cases and x cursor placement
feat(ui): render the visual selection
feat(runtime): visual selection
feat(runtime): ivy-style command palette
feat(bootstrap): open file argument at startup
feat(runtime): command system and completing-read prompt
feat(runtime): line operation motions
feat(runtime): word and line navigation with viewport paging
fix(runtime): skip non-key events in the keymap dispatcher
feat(ui): keep cursor visible with viewport scrolling
perf(runtime): dirty-checked rendering
docs(runtime): document Janet runtime source
feat(runtime): modal system and data-driven keymap
feat(runtime): gap-buffer editor core in Janet
feat(bridge): structured render event with cursor and mode
chore: add serena memory files
chore: update Cargo.toml
chore: update gitignore, add barebones serena project
chore: update flake.lock
feat!: event loop (clean slate)
feat: port state to janet
feat: use send-event/handle-event for rust-janet communication