Closed-loop application library for Cobra commands
(ready-to-use menus, prompts, completions, and more)
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.
- 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 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).
- 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.
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:
- Getting started
- Menus
- Prompts
- Binding commands
- Interrupt handlers
- History Sources
- Logging
- Readline shell
- Other utilities
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.
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.