Sharprompt 3.0.0-preview4
This is a prerelease version of Sharprompt.
There is a newer prerelease version of this package available.
See the version list below for details.
See the version list below for details.
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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#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
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Sharprompt
Interactive command-line based application framework for C#
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}");
Confirm
var answer = Prompt.Confirm("Are you ready?");
Console.WriteLine($"Your answer is {answer}");
Password
var secret = Prompt.Password("Type new password");
Console.WriteLine("Password OK");
Select
var city = Prompt.Select("Select your city", new[] { "Seattle", "London", "Tokyo" });
Console.WriteLine($"Hello, {city}!");
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)}");
List
var value = Prompt.List<string>("Please add item(s)");
Console.WriteLine($"You picked {string.Join(", ", value)}");
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}!");
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 | Versions 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-preview5 | 89 | 11/16/2024 |
3.0.0-preview4 | 3,822 | 9/4/2023 |
3.0.0-preview3 | 633 | 8/12/2023 |
3.0.0-preview2 | 6,983 | 11/29/2022 |
3.0.0-preview1 | 645 | 11/13/2022 |
2.4.5 | 402,497 | 9/27/2022 |
2.4.4 | 10,167 | 8/26/2022 |
2.4.3 | 16,075 | 7/13/2022 |
2.4.2 | 3,834 | 7/6/2022 |
2.4.1 | 30,904 | 4/4/2022 |
2.4.0 | 18,847 | 12/31/2021 |
2.4.0-preview3 | 742 | 12/13/2021 |
2.4.0-preview2 | 673 | 12/10/2021 |
2.4.0-preview1 | 772 | 11/14/2021 |
2.3.7 | 15,656 | 11/6/2021 |
2.3.6 | 1,143 | 10/17/2021 |
2.3.5 | 1,798 | 10/1/2021 |
2.3.4 | 1,564 | 9/20/2021 |
2.3.3 | 6,670 | 8/16/2021 |
2.3.2 | 1,998 | 8/5/2021 |
2.3.1 | 2,143 | 8/1/2021 |
2.3.0 | 1,038 | 7/26/2021 |
2.3.0-preview3 | 763 | 7/24/2021 |
2.3.0-preview2 | 751 | 7/14/2021 |
2.3.0-preview1 | 763 | 6/18/2021 |
2.2.1 | 41,763 | 4/29/2021 |
2.2.0 | 1,784 | 4/19/2021 |
2.2.0-preview2 | 839 | 3/5/2021 |
2.2.0-preview1 | 767 | 2/20/2021 |
2.1.2 | 8,494 | 1/27/2021 |
2.1.1 | 1,003 | 1/20/2021 |
2.1.0 | 1,617 | 12/31/2020 |
2.1.0-preview3 | 847 | 12/9/2020 |
2.1.0-preview2 | 837 | 11/27/2020 |
2.1.0-preview1 | 967 | 10/14/2020 |
2.0.0 | 13,498 | 8/13/2020 |
2.0.0-preview5 | 864 | 8/10/2020 |
2.0.0-preview4 | 931 | 8/2/2020 |
2.0.0-preview3 | 922 | 6/26/2020 |
2.0.0-preview2 | 967 | 6/8/2020 |
2.0.0-preview1 | 927 | 6/7/2020 |
1.0.5 | 1,788 | 5/6/2020 |
1.0.4 | 3,576 | 2/17/2020 |
1.0.3 | 11,341 | 10/31/2019 |
1.0.2 | 1,172 | 8/31/2019 |
1.0.1 | 1,151 | 8/10/2019 |
1.0.0 | 1,605 | 8/9/2019 |
1.0.0-preview3 | 979 | 8/2/2019 |
1.0.0-preview2 | 958 | 8/2/2019 |
1.0.0-preview | 959 | 7/31/2019 |