Skip to content

Roadmap

Zachary Yedidia edited this page Jul 2, 2020 · 4 revisions

This page is meant to provide information about what I am currently working on or planning to work on next for micro. I can't provide any dates for when these features might be implemented, and sometimes I work slowly or have to devote most of my time to other projects.

The following items are listed in order of priority.

  1. Keybinding system improvements (in progress)

    • Support for binding key sequences (e.g. <Ctrl-x><Ctrl-c>).
    • Support for wildcard keys in bindings. For example <Ctrl-x><any> would accept any event after Ctrl-x, and in this example the action might jump to the next occurrence of the character typed after Ctrl-x. So pressing <Ctrl-x><l> would jump to the next occurrence of l, and <Ctrl-x><a> would jump to the next occurrence of a, ...
    • Support for actions in keybindings. For example <Ctrl-x><action> would accept any set of events that is bound to an action after Ctrl-x, and would execute an action that would act on the region between the original cursor and the location of the cursor after <action>. Say <Ctrl-x><action> is bound to a new "CopyRegion" action, then <Ctrl-x><Up> would copy up one line, and <Ctrl-x><CtrlUp> would copy to the start of the buffer, etc...
    • Support for numbers in keybindings. For example <Ctrl-x><num><Ctrl-l> would jump to line num, depending on the number that was typed in.
    • Keybindings local to each buffer.
    • Separate keybindings for different kinds of Panes (buffers, command bar, terminal emulator...)
    • Modes. Keybindings can be defined so they only take effect if a certain mode is active or inactive.
    • Vim keybindings plugin.
      • With the above features, the basics should be easy to implement.
      • Properly replicating the behavior of ., Ctrl-o (in normal mode), undo/redo, text objects, and macros will take more work.
  2. Indentation-aware editing

    • Very simple rules for defining when text should be auto-indented (for example, increase indent level after { and decrease after }).
    • Ideally this will allow micro to place the cursor and paste (possibly more actions too) at the correct indentation level.
  3. Better syntax highlighting

    • Look into improvements to the current system, especially improving correctness of regions.
    • Use tree-sitter (preliminary PR: #1466)
      • This dependency will require cgo and make cross compiling more difficult.
      • For incremental parsing, we will need to update the Go binding of tree-sitter to allow using a Go closure as a C function pointer.
      • Tree-sitter does not highlight that many languages, so the existing syntax highlighter will remain as a fallback (also for people who don't like cgo).
  4. Language-server protocol support

    • Haven't looked into this yet.
Clone this wiki locally