Sharprompt 3.0.0-preview4

This is a prerelease version of Sharprompt.
dotnet add package Sharprompt --version 3.0.0-preview4                
NuGet\Install-Package Sharprompt -Version 3.0.0-preview4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sharprompt" Version="3.0.0-preview4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Sharprompt --version 3.0.0-preview4                
#r "nuget: Sharprompt, 3.0.0-preview4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Sharprompt as a Cake Addin
#addin nuget:?package=Sharprompt&version=3.0.0-preview4&prerelease

// Install Sharprompt as a Cake Tool
#tool nuget:?package=Sharprompt&version=3.0.0-preview4&prerelease                

Sharprompt

Build Downloads NuGet License

Interactive command-line based application framework for C#

sharprompt

Features

  • Multi-platform support
  • Supports the popular prompts (Input / Password / Select / etc)
  • Supports model-based prompts
  • Validation of input value
  • Automatic generation of data source using Enum type
  • Customizable symbols and color schema
  • Unicode support (Multi-byte characters and Emoji😀🎉)

Installation

Install-Package Sharprompt
dotnet add package Sharprompt
// Simple input
var name = Prompt.Input<string>("What's your name?");
Console.WriteLine($"Hello, {name}!");

// Password input
var secret = Prompt.Password("Type new password", validators: new[] { Validators.Required(), Validators.MinLength(8) });
Console.WriteLine("Password OK");

// Confirmation
var answer = Prompt.Confirm("Are you ready?", defaultValue: true);
Console.WriteLine($"Your answer is {answer}");

Examples

The project in the folder Sharprompt.Example contains all the samples. Please check it.

dotnet run --project Sharprompt.Example

Prompt types

Input

Takes a generic type parameter and performs type conversion as appropriate.

var name = Prompt.Input<string>("What's your name?");
Console.WriteLine($"Hello, {name}!");

var number = Prompt.Input<int>("Enter any number");
Console.WriteLine($"Input = {number}");

input

Confirm

var answer = Prompt.Confirm("Are you ready?");
Console.WriteLine($"Your answer is {answer}");

confirm

Password

var secret = Prompt.Password("Type new password");
Console.WriteLine("Password OK");

password

Select

var city = Prompt.Select("Select your city", new[] { "Seattle", "London", "Tokyo" });
Console.WriteLine($"Hello, {city}!");

select

MultiSelect (Checkbox)

var cities = Prompt.MultiSelect("Which cities would you like to visit?", new[] { "Seattle", "London", "Tokyo", "New York", "Singapore", "Shanghai" }, pageSize: 3);
Console.WriteLine($"You picked {string.Join(", ", cities)}");

multiselect

List

var value = Prompt.List<string>("Please add item(s)");
Console.WriteLine($"You picked {string.Join(", ", value)}");

list

Bind (Model-based prompts)

// Input model definition
public class MyFormModel
{
    [Display(Name = "What's your name?")]
    [Required]
    public string Name { get; set; }

    [Display(Name = "Type new password")]
    [DataType(DataType.Password)]
    [Required]
    [MinLength(8)]
    public string Password { get; set; }

    [Display(Name = "Select your city")]
    [Required]
    [InlineItems("Seattle", "London", "Tokyo")]
    public string City { get; set; }

    [Display(Name = "Are you ready?")]
    public bool? Ready { get; set; }
}

var result = Prompt.Bind<MyFormModel>();

Configuration

Symbols

Prompt.Symbols.Prompt = new Symbol("🤔", "?");
Prompt.Symbols.Done = new Symbol("😎", "V");
Prompt.Symbols.Error = new Symbol("😱", ">>");

var name = Prompt.Input<string>("What's your name?");
Console.WriteLine($"Hello, {name}!");

Color schema

Prompt.ColorSchema.Answer = ConsoleColor.DarkRed;
Prompt.ColorSchema.Select = ConsoleColor.DarkCyan;

var name = Prompt.Input<string>("What's your name?");
Console.WriteLine($"Hello, {name}!");

Cancellation support

// Throw an exception when canceling with Ctrl-C
Prompt.ThrowExceptionOnCancel = true;

try
{
    var name = Prompt.Input<string>("What's your name?");
    Console.WriteLine($"Hello, {name}!");
}
catch (PromptCanceledException ex)
{
    Console.WriteLine("Prompt canceled");
}

Features

Enum type support

public enum MyEnum
{
    [Display(Name = "First value")]
    First,
    [Display(Name = "Second value")]
    Second,
    [Display(Name = "Third value")]
    Third
}

var value = Prompt.Select<MyEnum>("Select enum value");
Console.WriteLine($"You selected {value}");

Unicode support

// Prefer UTF-8 as the output encoding
Console.OutputEncoding = Encoding.UTF8;

var name = Prompt.Input<string>("What's your name?");
Console.WriteLine($"Hello, {name}!");

unicode support

Fluent interface support

using Sharprompt.Fluent;

// Use fluent interface
var city = Prompt.Select<string>(o => o.WithMessage("Select your city")
                                       .WithItems(new[] { "Seattle", "London", "Tokyo" })
                                       .WithDefaultValue("Seattle"));

Supported platforms

  • Windows
    • Command Prompt
    • PowerShell
    • Windows Terminal
  • Linux (Ubuntu, etc)
    • Windows Terminal (WSL 2)
  • macOS
    • Terminal.app

License

This project is licensed under the MIT License

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Sharprompt:

Package Downloads
NukeBuildHelpers

NukeBuildHelpers for Nuke build.

Dabit.Utils.YamlConfigManager

Package Description

NiuX

NiuX 基础设施

Filepicker

Simple CLI UI filepicker with directory navigation

42.CLI.Toolkit

Handy toolkit for a fancy CLI application.

GitHub repositories (9)

Showing the top 5 popular GitHub repositories that depend on Sharprompt:

Repository Stars
AutoDarkMode/Windows-Auto-Night-Mode
Automatically switches between the dark and light theme of Windows 10 and Windows 11
github/gh-actions-importer
GitHub Actions Importer helps you plan and automate the migration of Azure DevOps, Bamboo, Bitbucket, CircleCI, GitLab, Jenkins, and Travis CI pipelines to GitHub Actions.
github/gh-valet
Valet helps facilitate the migration of Azure DevOps, CircleCI, GitLab CI, Jenkins, and Travis CI pipelines to GitHub Actions.
microsoft/winget-create
The Windows Package Manager Manifest Creator command-line tool (aka wingetcreate)
void-stack/VMUnprotect.Dumper
VMUnprotect.Dumper can dynamically untamper VMProtected Assembly.
Version Downloads Last updated
3.0.0-preview4 2,190 9/4/2023
3.0.0-preview3 601 8/12/2023
3.0.0-preview2 5,327 11/29/2022
3.0.0-preview1 613 11/13/2022
2.4.5 290,680 9/27/2022
2.4.4 9,945 8/26/2022
2.4.3 15,577 7/13/2022
2.4.2 3,787 7/6/2022
2.4.1 27,862 4/4/2022
2.4.0 18,782 12/31/2021
2.4.0-preview3 716 12/13/2021
2.4.0-preview2 635 12/10/2021
2.4.0-preview1 751 11/14/2021
2.3.7 15,354 11/6/2021
2.3.6 1,112 10/17/2021
2.3.5 1,568 10/1/2021
2.3.4 1,530 9/20/2021
2.3.3 6,117 8/16/2021
2.3.2 1,912 8/5/2021
2.3.1 2,114 8/1/2021
2.3.0 1,003 7/26/2021
2.3.0-preview3 739 7/24/2021
2.3.0-preview2 731 7/14/2021
2.3.0-preview1 744 6/18/2021
2.2.1 40,566 4/29/2021
2.2.0 1,759 4/19/2021
2.2.0-preview2 802 3/5/2021
2.2.0-preview1 747 2/20/2021
2.1.2 7,986 1/27/2021
2.1.1 979 1/20/2021
2.1.0 1,572 12/31/2020
2.1.0-preview3 826 12/9/2020
2.1.0-preview2 816 11/27/2020
2.1.0-preview1 939 10/14/2020
2.0.0 12,920 8/13/2020
2.0.0-preview5 843 8/10/2020
2.0.0-preview4 909 8/2/2020
2.0.0-preview3 888 6/26/2020
2.0.0-preview2 945 6/8/2020
2.0.0-preview1 905 6/7/2020
1.0.5 1,758 5/6/2020
1.0.4 3,491 2/17/2020
1.0.3 6,147 10/31/2019
1.0.2 1,150 8/31/2019
1.0.1 1,128 8/10/2019
1.0.0 1,546 8/9/2019
1.0.0-preview3 957 8/2/2019
1.0.0-preview2 939 8/2/2019
1.0.0-preview 933 7/31/2019