Shell library with powerful & modern UI, features & `.inputrc` support

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

Emacs / Standard

  • Native Emacs commands
  • Emacs-style macro engine (not working accross 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 fonctionality, 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

Showcases

- Emacs edition

(This extract is quite a pity, because its author is not using Emacs and does not know many of its shortcuts)

emacs.gif

Vim edition

vim.gif

Undo/redo line history

undo.gif

Keyword switching & selection

Switching various keywords

switch-keywords.gif

Using regexp-based selection to grab parts of words (here, URL components)

select-keywords.gif

- Vim selection & movements (basic)

vim-selection.gif

- Vim surround (selection and change)

Selecting/adding/changing surround regions

vim-surround.gif

Surround and change in shellwords, matching brackets, etc.

vim-surround-2.gif

- Vim registers (with completion)

registers.gif

- History movements/completion/use/search

History movement, completion and some other other widgets

history.gif

- Completion

Classic mode & incremental search mode

completion.gif

Suffix-autoremoval

suffix-autoremoval.gif

- Prompts

prompts.gif

- Logging

logging.gif

- Inputrc init file reload

config-reload.gif

- Multiline edition

multiline.gif

- Macros

Emacs

emacs-macros.gif

Vim

vim-macros.gif

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.

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.


Download Details:

Author: Reeflective
Source Code: https://github.com/reeflective/readline 
License: Apache-2.0 license

#go #golang #vim #bash 

Shell library with powerful & modern UI, features & `.inputrc` support
1.10 GEEK