[RFC]: add support for custom key bindings in the REPL
Description
This RFC proposes adding support for custom key bindings in the REPL.
Some prior art:
-
Julia: supports key bindings for actions like editing, cursor movement, and program control. Here's the full list of actions
-
IPython: They also support multiple key bindings for a single action. Similar to how we have the right arrow and TAB to auto-complete a suggestion. They also have auto-closing pairs as "key bindings", to trigger the 'auto-close-parentheses' is mapped to the key
(. Here's the full list of actions
We would also want to support having custom key bindings for current actions like Ctrl+O for inserting a new line, or right arrow for accepting a suggestion, or the TAB key to toggle the completions etc.
Would suggest reading the above lists of actions for further discussion on what we should support
Checklist
- [X] I have read and understood the Code of Conduct.
- [X] Searched for existing issues and pull requests.
- [X] The issue name begins with
RFC:.
Most of Julia's keybindings seem reasonable. IPython's are a little hard to follow; however, some of the autosuggestion bindings could be useful.
Should we allow multiple keybindings for an action?
Seems fine to me.
Should we allow configuring basic actions like backspace and moving left/right (using arrow keys) which are implemented by readline? We would have to override the default readline behavior to make it configurable.
Update: Let's just make it configurable, instead of reimplementing the behavior, we can just "pipe" the new key binding to call the old key binding sequence.
Whatever you think makes sense. My initial thought was that supporting overriding for those keybindings seems like a rabbit hole if it means overriding readline, but if you think you have a reasonable workaround, seems fine to me.
Should I break it into separate PRs, namely:
- adding editor actions and keybinding support
- updating current actions to be configurable
- add settings and updating docs
@Snehil-Shah This issue isn't fully closed, correct? IIUC, we still need to add settings and add support for configuration.
We could move those tasks to separate issues to better map to expected PRs.
@kgryte only adding settings and a couple of more actions (for existing stuff like triggering tab completions etc) is left..