Skip to content

Closed-loop application library for Cobra commands (powerful, ready-to-run and easy to use)

License

Notifications You must be signed in to change notification settings

reeflective/console

Repository files navigation


Console

Closed-loop application library for Cobra commands

(ready-to-use menus, prompts, completions, and more)

Github Actions (workflows) Go module version GoDoc reference Go Report Card codecov License: BSD-3

Console is an all-in-one console application library built on top of a readline shell and using Cobra commands. It aims to provide users with a modern interface at at minimal cost while allowing them to focus on developing their commands and application core: the console will then transparently interface with these commands, and provide the various features below almost for free.

Features

Menus & Commands

  • Bind cobra commands to provide the core functionality.
  • Multiple menus with their own command tree, prompt engines and special handlers.
  • All cobra settings can be modified, set and used freely, like in normal CLI workflows.
  • Bind handlers to special interrupt errors (eg. CtrlC/CtrlD), per menu.

Shell interface

  • Shell is powered by a readline instance, with full inputrc support and extended functionality.
  • All features of readline are supported in the console. It also allows the console to give:
  • Configurable bind keymaps, commands and options, sane defaults, and per-application configuration.
  • Out-of-the-box, advanced completions for commands, flags, positional and flag arguments.
  • Provided by readline and carapace: automatic usage & validation command/flags/args hints.
  • Syntax highlighting for commands (might be extended in the future).

Others

  • Support for an arbitrary number of history sources, per menu.
  • Support for oh-my-posh prompts, per menu and with custom configuration files for each.
  • Also with oh-my-posh, write and bind application/menu-specific prompt segments.
  • Set of ready-to-use commands (commands/ directory) for readline binds/options manipulation.

Documentation

You can install and use the example application console. This example application will give you a taste of the behavior and supported features. The following documentation is also available in the wiki:

Showcase

console

Status

The library is in a pre-release candidate status:

  • Although quite simple and small, it has not been tested heavily.
  • There are probably some features/improvements to be made.
  • The API is quite stable. It is unlikely to change much in future versions.

Please open a PR or an issue if you wish to bring enhancements to it. Other contributions, as well as bug fixes and reviews are also welcome.

Possible Improvements

The following is a currently moving list of possible enhancements to be made in order to reach v1.0:

  • Ensure to the best extent possible a thread-safe access to the command API.
  • Clearer integration/alignment of the various I/O references between raw readline and commands.
  • Clearer and sane model for asynchronous control/cancel of commands.
  • Test suite for most important or risky code paths.