readline
Shell library with modern and easy to use UI features
About readline
This library is a modern, pure Go readline shell implementation, with full .inputrc and legacy
readline command/option support, and extended with various commands, options and tools commonly
found in modern shells. Its architecture and completion system is heavily inspired from Z-Shell.
It is used, between others, to power the console library.
Features
Core
- Pure Go, almost-only standard library
- Cross-platform (Linux / MacOS / Windows)
- Full
.inputrcsupport (all commands/options) - Extensive test suite and almost full coverage of core code
- Extended list of additional commands/options (edition/completion/history)
- Complete multiline edition/movement support
- Command-line edition in
$EDITOR/$VISUALsupport - Programmable API, with failure-safe access to core components
- Support for an arbitrary number of history sources
Emacs / Standard
- Native Emacs commands
- Emacs-style macro engine (not working across multiple calls)
- Keywords switching (operators, booleans, hex/binary/digit) with iterations
- Command/mode cursor status indicator
- Complete undo/redo history
- Command status/arg/iterations hint display
Vim
- Near-native Vim mode
- Vim text objects (code blocks, words/blank/shellwords)
- Extended surround select/change/add functionality, with highlighting
- Vim Visual/Operator pending mode & cursor styles indications
- Vim Insert and Replace (once/many)
- All Vim registers, with completion support
- Vim-style macro recording (
q<a>) and invocation (@<a>)
Interface
- Support for PS1/PS2/RPROMPT/transient/tooltip prompts (compatible with oh-my-posh)
- Extended completion system, keymap-based and configurable, easy to populate & use
- Multiple completion display styles, with color support.
- Completion & History incremental search system & highlighting (fuzzy-search).
- Automatic & context-aware suffix removal for efficient flags/path/list completion.
- Optional asynchronous autocomplete
- Builtin & programmable syntax highlighting
Documentation
Readline is used by the console library and its example binary. To get a grasp of the functionality provided by readline and its default configuration, install and start the binary.
The documentation is available on the repository wiki, for both users and developers.
Showcases
Status
This library is now in a release status, as it has underwent several major rewrites and is now considered mostly feature-complete, with a solid testing suite to ensure safe and smooth operation to the best extent possible. New releases will be regularly pushed when bugs are found and corrected.
Additionally:
- Key dispatch/flushing, meta-key enable, etc might still contain some bugs/wrong behavior: 30 years of legacy support for 3000 different terminal emulators cannot be done right by me alone.
- Please open a PR or an issue if you face any bug, and it will be promptly resolved.
- Don't hesitate proposing a new feature or a PR if you deem it to be useful to most users.
Credits
- @kenshaw for his
.inputrcparsing package, which brings much wider compatibility to this library. chzyer/readlinefor the Windows I/O code and everything related.- Some of the Vim code is inspired or translated from zsh-vi-mode.
- lmorg/readline, for the line tokenizers.
Frequently Asked Questions
What is readline?
readline is a Command Line library for the Go programming language. Shell library with modern and easy to use UI features
How do I install readline?
Install readline with the Go module system using `go get reeflective/readline`. Check the repository for the current installation instructions.
What category does readline belong to?
readline is listed under Command Line, specifically Standard CLI.