/PrettyPrompt

A cross-platform command line input library that provides syntax highlighting, autocompletion, history and multi-line input.

Primary LanguageC#Mozilla Public License 2.0MPL-2.0

PrettyPrompt

Nuget Code Coverage Build Status

A cross-platform command line prompt that provides syntax highlighting, autocompletion, history and more! It's Console.ReadLine() on steroids.

PrettyPrompt screenshot

Features

  • User Experience (UX) features:
    • Syntax highlighting support via ANSI escape sequences. Supports both the terminal color palette and full RGB colors.
    • Autocompletion menu, with extended documentation tooltips and overload menus.
    • Multi-line input with word-wrapping
    • Word-wrapping
    • History navigation, optionally persistent across sessions, with history filtering (similar to PSReadLine's HistorySearchBackward).
    • Unsurprising keybindings: Home, End, Ctrl-L to clear screen, Ctrl-C to cancel current line, Ctrl+Space to open autocomplete menu, and more.
    • Cross platform copy/paste: Ctrl-Shift-C for copy, Ctrl-V or Shift-Insert for pasting.
    • Optionally detects incomplete lines and converts Enter to a "soft newline" (Shift-Enter).
    • Optionally autoformats input text as it's typed.
    • Works "in-line" on the command line; it doesn't take over the entire terminal window.
  • Developer Experience (DX) features:
    • Many customization hooks available for configuring PrettyPrompt for your application (see IPromptCallbacks).
    • Provides a CancellationToken for each prompt result, so the end-user of your application can cancel long running tasks via Ctrl-C.
    • Fast rendering—PrettyPrompt only renders the diff of what changed, so the screen doesn't flicker as text is redrawn.

Installation

PrettyPrompt can be installed from nuget by running the following command:

dotnet add package PrettyPrompt

Usage

A simple read-eval-print-loop looks like this:

var prompt = new Prompt();

while (true)
{
    var response = await prompt.ReadLineAsync("> ");
    if (response.IsSuccess) // false if user cancels, i.e. ctrl-c
    {
        if (response.Text == "exit") break;

        Console.WriteLine("You wrote " + response.Text);
    }
}

The Prompt constructor takes optional configuration options for enabling syntax highlighting, autocompletion, and soft-newline configuration. For a more complete example, see the project in the examples directory. If you have the dotnet example global tool installed, run the following command in the repository root:

dotnet example FruitPrompt

Building from source

This application targets modern .NET (i.e. not .NET Framework), and can be built with either Visual Studio or the normal dotnet build command line tool.