Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - reeflective/readline: Shell library with powerful and modern UI, large feature set, and `.inputrc` support
Shell library with powerful and modern UI, large feature set, and `.inputrc` support - reeflective/readline
Visit SiteGitHub - reeflective/readline: Shell library with powerful and modern UI, large feature set, and `.inputrc` support
Shell library with powerful and modern UI, large feature set, and `.inputrc` support - reeflective/readline
Powered by 0x5a.live ๐
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
.inputrc
support (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
/$VISUAL
support - 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
.inputrc
parsing package, which brings much wider compatibility to this library. chzyer/readline
for 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.
GoLang Resources
are all listed below.
Made with โค๏ธ
to provide different kinds of informations and resources.