Skip to the content.

Welcome to PromptPlus

Build Publish License NuGet Downloads

PromptPlus was developed in C# with the netstandard2.1, .NET 6 , .NET 7 and .NET 8 target frameworks.

Table of Contents

What’s new in V4.2.0

Features

Top

All features have IntelliSense. PromptPlus has more than 25 controls with many features like: filters, validators, history, suggestions, spinner(19 embedding type and plus custom yours!), colors and styles for control-elements :

All controls have the same organization (see in action: Controls Snapshot):

All controls use fluent interface; an object-oriented API whose design relies extensively on method chaining. Its goal is to increase code legibility. The term was coined in 2005 by Eric Evans and Martin Fowler.

//MaskEdit Generic
var mask = PromptPlus.MaskEdit("input", "MaskEdit Generic input")
    .Mask(@"\XYZ 9{3}-L{3}-C[ABC]N{1}[XYZ]-A{3}")
    .ShowTipInputType(FormatWeek.Short)
    .Run();

PromptPlus driver console Supports 4/8/24-bit colors in the terminal with auto-detection of the current terminal’s capabilities.

Migrate Version

Top

Until version 3 the console engine was based on a model from another project that has several serious problems that cause exceptions during execution in addition to increasing the complexity of the code for correct rendering… PromptPlus v4 has been completely rebuilt for a better experience, with significant improvements with new controls and more developer power. The console driver now supports better rendering, with the ability to detect terminal capabilities and allow for 24-bit color, text overflow strategies based on terminal size, and left and right margins for a nicer layout. The Controls have been revised to be more responsive, allow color styles in many of their elements, and adapt to the terminal size even with resizing.

For migrate V3 to V4 see this link.

Installing

Top

PromptPlus was developed in C# with the netstandard2.1, .NET 6 AND .NET 7 target frameworks.

Install-Package PromptPlus [-pre]
dotnet add package PromptPlus [--prerelease]

Note: [-pre]/[–prerelease] usage for pre-release versions

Examples

Top

The folder at github Samples contains more 40 samples!.

dotnet run --project [name of sample]

Console Engine

Top

The console driver has the ability to detect terminal capabilities and allow for 24-bit color and text overflow strategies based on terminal size, and left and right margins for a nicer layout. The new engine detects support ansi commands and adjust output for this functionality respecting OS differences , terminal mode and Windows console mode. The Colors are automatically adjusted to the capacity of the terminal. This automatic adjustment may slightly modify the final color when converting to a lower bit resolution.

Wrap to Console - Code sample

PromptPlus has cross-platform wrap to console for key features.

//Console.CursorLeft = 1;
PromptPlus.CursorLeft = 1;
//Console.ReadKey();
PromptPlus.ReadKey();

Extra commands to Console

Extend Write / Writeline

Setup and auto detect - Code sample

PromptPlus.Setup((cfg) =>
{
    cfg.PadLeft = 2;
    cfg.PadRight = 2;
    cfg.Culture = new CultureInfo("en-us");
    cfg.BackgroundColor = ConsoleColor.Blue;
});
PromptPlus.Join()
    .SingleDash($"[yellow]Console Information[/]", DashOptions.DoubleBorder, 1 /*extra lines*/);
    .WriteLine($"IsTerminal: {PromptPlus.IsTerminal}");
    .WriteLine($"IsUnicodeSupported: {PromptPlus.IsUnicodeSupported}");
    .WriteLine($"OutputEncoding: {PromptPlus.OutputEncoding.EncodingName}");
    .WriteLine($"ColorDepth: {PromptPlus.ColorDepth}");
    .WriteLine($"BackgroundColor: {PromptPlus.BackgroundColor}");
    .WriteLine($"ForegroundColor: {PromptPlus.ForegroundColor}");
    .WriteLine($"SupportsAnsi: {PromptPlus.SupportsAnsi}");
    .WriteLine($"Buffers(Width/Height): {PromptPlus.BufferWidth}/{PromptPlus.BufferHeight}");
    .WriteLine($"PadScreen(Left/Right): {PromptPlus.PadLeft}/{PromptPlus.PadRight}\n");

PromptPlus
    .KeyPress()
    .Config(cfg =>
    {
        cfg.HideAfterFinish(true)
          .ShowTooltip(false) 
          .ApplyStyle(StyleControls.Tooltips,Style.Plain.Foreground(Color.Grey100));
    }) 
    .Spinner(SpinnersType.Balloon)
    .Run();
    

Output detect

Overflow Capacity - Code sample

PromptPlus.Clear();
PromptPlus.DoubleDash($"PromptPlus Style.OverflowEllipsis");
PromptPlus.WriteLine("[RED ON WHITE]TESTE[YELLOW] COLOR [/] BACK COLOR [/]" + 
"asdajsdkldksdkasasdadasdadjashkjdahsdashdjkashdkashdkashdkashdakshdkashdkashdaskhdaskdhaskdhaskdhaskdhaskdhsakdhaskdhaskjdj", style: Style.OverflowEllipsis);

PromptPlus.DoubleDash($"PromptPlus Style.OverflowCrop");
PromptPlus.WriteLine("[RED ON WHITE]TESTE[YELLOW] COLOR [/] BACK COLOR [/]" + 
"asdajsdkldksdkasasdadasdadjashkjdahsdashdjkashdkashdkashdkashdakshdkashdkashdaskhdaskdhaskdhaskdhaskdhaskdhsakdhaskdhaskjdj", style: Style.OverflowCrop);

PromptPlus.DoubleDash($"PromptPlus default");
PromptPlus.WriteLine("[RED ON WHITE]TESTE[YELLOW] COLOR [/] BACK COLOR [/]" + 
"asdajsdkldksdkasasdadasdadjashkjdahsdashdjkashdkashdkashdkashdakshdkashdkashdaskhdaskdhaskdhaskdhaskdhaskdhsakdhaskdhaskjdj");

PromptPlus
    .KeyPress()
    .Config(cfg => cfg.HideAfterFinish(true))
    .Spinner(SpinnersType.DotsScrolling)
    .Run();

Output Overflow Capacity

Sample color capacity (Project sample)

Note: This layout and code was inspired by the excellent project:spectreconsole, having the same color palette

Culture

Top

PromptPlus applies the language/culture only when running controls. The language/culture of the application is not affected. If language/culture is not informed, the application’s language/culture will be used with fallback to en-US.

All messages are affected when changed language/culture. PromptPlus has languages embedded:

//sample global set for messages and validate
PromptPlus.DefaultCulture = new CultureInfo("en-US");
//sample only control
PromptPlus.MaskEdit("input", "MaskEdit DateOnly input")
    .Mask(MaskedType.DateOnly)
    .ShowTipInputType(FormatWeek.Short)
    .Culture(new CultureInfo("en-us")) //overwrite culture
    .AcceptEmptyValue()
    .Run();

PromptPlus.MaskEdit("input", "MaskEdit DateOnly input")
    .Mask(MaskedType.DateOnly)
    .ShowTipInputType(FormatWeek.Short)
    .Culture("pt-br") //overwrite culture
    .AcceptEmptyValue()
    .Run();

To use a non-embedded language/culture:

Colors

Top

PromptPlus is in accordance with informal standard NO COLOR. when there is the environment variable “no_color” the colors are disabled.

Prompt Plus also has commands for coloring parts of the text.

Direct console

PromptPlus.WriteLine("[RGB(255,0,0) ON WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text");
PromptPlus.WriteLine("[RGB(255,0,0):WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text");
PromptPlus.WriteLine("[#ff0000 ON WHITE]Test [YELLOW] COLOR [/] BACK COLOR [/] other text");
PromptPlus.WriteLine("[RED ON WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text");
PromptPlus.WriteLine("[RED:WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text");

Using Style

PromptPlus.WriteLine("Test", new Style(Color.White, Color.Red, Overflow.None));
PromptPlus.WriteLine("Test", new Style(new Color(255, 255, 255), Color.Red, Overflow.None));
PromptPlus.WriteLine("Test", new Style(Color.FromConsoleColor(ConsoleColor.White), Color.Red, Overflow.None));
PromptPlus.WriteLine("Test", new Style(Color.FromInt32(255), Color.Red, Overflow.None));

Over controls

PromptPlus
    .Input("Input [blue]sample2[/]", "with [yellow]description[/]")
    .Run();

Escaping format characters

To output a [ you use [[, and to output a ] you use ]].

PromptPlus.WriteLine("[[Test]]");

using (PromptPlus.EscapeColorTokens())
{
   PromptPlus.DoubleDash($"PromptPlus with context IgnoreColorTokens = true");
   //show text without color
   PromptPlus.WriteLine("ValidformedColor_TokenAny[RED ON WHITE]Text[/]_[YELLOW]Othertext[/]");
}

Promptplus uses the same default colors and engine(softly modified) as the third party project: spectreconsole.

Default color for controls and console

Hotkeys

Top

Hotkeys (global and control-specific) are configurable.

//sample global
PromptPlus.Config.SelectAllPress = new HotKey(UserHotKey.F7);

Default Hotkeys for controls

Keypress Extensions Emacs

Top

PromptPlus have a lot extensions to check Key-press with GNU Readline Emacs keyboard shortcuts. For more details visit the official API page

Validators

Top

PromptPlus have a lot extensions to commons validator and validator import(No duplicate code!)

For more details see List validators embedding

private class MylCass
{
    [Required(ErrorMessage = "{0} is required!")]
    [MinLength(3, ErrorMessage = "Min. Length = 3.")]
    [MaxLength(5, ErrorMessage = "Max. Length = 5.")]
    [Display(Prompt ="My Input")]
    public string MyInput { get; set; }
}
var inst = new MylCass();

PromptPlus
    .Input("Input sample2", "import validator from decorate")
    .Default(inst.Text)
    .AddValidators(PromptValidators.ImportValidators(inst,x => x!.Text!))
    .Run();

if (name.IsAborted)
{
   return;
}
PromptPlus.WriteLine($"Your input: {name.Value}!");
//sample
PromptPlus.EnabledAbortKey = false;

Supported platforms

Top

Credits

Top

PromptPlus includes code(Copy) from other software released under the MIT license:

EastAsian width generated by package

API documentation generated by

License

Top

Copyright 2021 @ Fernando Cerqueira

PromptPlus is licensed under the MIT license. See LICENSE.