Trivial.Console
3.9.0
See the version list below for details.
dotnet add package Trivial.Console --version 3.9.0
NuGet\Install-Package Trivial.Console -Version 3.9.0
<PackageReference Include="Trivial.Console" Version="3.9.0" />
paket add Trivial.Console --version 3.9.0
#r "nuget: Trivial.Console, 3.9.0"
// Install Trivial.Console as a Cake Addin #addin nuget:?package=Trivial.Console&version=3.9.0 // Install Trivial.Console as a Cake Tool #tool nuget:?package=Trivial.Console&version=3.9.0
This library includes these useful tools and controls about console app.
- Cmd arguments parser and processor.
- Rich components of CLI.
using Trivial.Console;
Parse
The cmd arguments is an array of string. You can parse it to a program readable object with structured information.
void Main(string[] args)
{
var arguments = new Arguments(args);
Console.WriteLine("{0} {1}", arguments["say"], arguments["name"]);
}
> a.exe --name Kingcean Tuan --say Hello
Hello Kingcean Tuan
You can also parse a string directly.
void Main(string[] args)
{
var str = Console.ReadLine();
var arguments = new Arguments(str);
Console.WriteLine("{0} {1}", arguments[1], arguments[0]);
}
> a.exe
> hijklmn abcdefg
abcdefg hijklmn
Verb
If your application contains a set of functionalities, you may need verbs to help you to build a more flexible console application.
Each verb can has its own business logic. The arguments will be filled into the property with attribute ArgumentAttribute
.
class FirstVerb: Verb
{
[Argument("name")]
public string Name { get; set; }
public override string Description => "Test 1";
public override void Process()
{
Console.WriteLine("This is the verb handler 1.");
Console.WriteLine("Name is {0}.", Name);
Console.WriteLine("Name is {0}.", Arguments["name"]);
}
}
And you can also define a verb handler with async process method.
class SecondVerb: AsyncVerb
{
public override string Description => "Test 2";
public override async Task Process()
{
Console.WriteLine("This is the verb handler 2. Step 1.");
await Task.Run(() => {
Console.WriteLine("This is the verb handler 2. Step 2.");
});
}
}
Then you can use dispatcher to dispatch the correct verb handler to process.
static async Task Main(string[] args)
{
var dispatcher = new Dispatcher();
dispatcher.Register<FirstVerb>("one");
dispatcher.Register<SecondVerb>("two");
await dispatcher.ProcessAsync(args);
}
> a.exe one --name Test
This is the verb handler 1.
Name is Test.
Name is Test.
> a.exe two
This is the verb handler 2. Step 1.
This is the verb handler 2. Step 2.
Line
We provide a line component for the standard output stream that you can write a string which you can update before the line terminator. Following is a sample.
var line = new Line();
// Write something.
line.Write("Loading {0}......", "something");
// Remove some charactors and add other string with color.
line.Backspace(3);
line.Write(ConsoleColor.Green, " Done!");
// And you can append other string following above in the same line and in the default color.
line.Write(" This is only for test.");
// Add terminator.
line.End();
// You cannot add further terminator if there is no any string output.
line.End();
// So following will be in a new line.
line.Write("Next line. ");
// We can turn off the auto flush so that all strings write later will be in an output queue.
line.AutoFlush = false;
line.Write(ConsoleColor.Red, ConsoleColor.Yellow, "Red foreground and yellow background");
line.End();
line.Write("This will not be output immediately, neither.");
// Now let's write them.
line.Flush();
// Following will not output until we call Flush member method or set AutoFlush property as true.
line.Write(" Hello?");
line.AutoFlush = true;
line.End();
And you can also read the password into a SecureString
with the optional text mask.
var line = new Line();
// Read password.
line.Write("Type password: ");
var password = line.ReadPassword('*', ConsoleColor.Yellow);
line.WriteLine();
// Write a secure string to the standard output stream.
line.Write("Your password is ");
line.Write(ConsoleColor.Magenta, password);
line.WriteLine('.');
Select
You can output a beautiful list or table with customized style to the standard output stream
so that user just need press the arrow buttons and ENTER
in keyboard to select.
// Create an instance for adding items and setting options.
var col = new SelectionData<string>();
// Add some items. For each item, you can set a string value,
// an additional data, an additional displayed title and an additional hot key.
col.Add('a', "char a", "a", "char [a]");
col.Add('b', "char b", "b", "char [b]");
for (var i = 0; i < 120; i++)
{
col.Add("num " + i, i.ToString());
}
// Create an options for display.
var options = new SelectionOptions
{
// You can define a question string after the list.
Question = "Please select one: ",
// We can define the colors of the item selected.
SelectedForegroundColor = ConsoleColor.White,
SelectedBackgroundColor = ConsoleColor.Blue,
// The selected item will also be displayed after the question string.
// So you can define its color.
DefaultValueForegroundColor = ConsoleColor.Cyan,
// At the end of the list, the tips will be displayed before user press any key.
// There is a default value and you can customize it.
// And you can disable it by set it as null.
Tips = "Tips: You can use arrow key to select and press ENTER key to continue.",
// Then you can define its color.
TipsForegroundColor = ConsoleColor.Yellow,
// You can define the prefix for the item and the one selected.
SelectedPrefix = "√ ",
Prefix = " ",
// You can define the column count for the list.
Column = 5,
// You can define the maximum rows to displayed.
// A paging will be displayed if the count of the list is greater than it.
MaxRow = 10,
// Press ESC can cancel this selection.
// But you can enable the manual way by set a manual question
// so that user can type the words directly.
ManualQuestion = "Type: "
};
// Write it to the standard output stream and wait for user selection.
var result = LineUtilities.Select(col, options);
// You can get the result.
Console.WriteLine("The result is {0}.", result.Value);
Progress
You can output a progress bar to update during a task running.
// Define an options that you can custom the style.
var progressOptions = new ProgressLineOptions();
// Ouput the component in console and get the progress instance to update.
var progress = LineUtilities.WriteLine("Processing", progressOptions);
// A time-consuming work here.
for (var i = 0; i <= 50; i++)
{
await Task.Delay(10);
// And report the progress updated.
progress.Report(0.02 * i);
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. 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 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- No dependencies.
-
.NETFramework 4.6.1
- No dependencies.
-
.NETFramework 4.8
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
net5.0
- No dependencies.
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
9.0.0-preview5 | 0 | 11/30/2024 | |
9.0.0-preview4 | 66 | 11/22/2024 | |
9.0.0-preview3 | 61 | 11/16/2024 | |
9.0.0-preview2 | 81 | 11/1/2024 | |
9.0.0-preview1 | 96 | 10/27/2024 | |
8.0.0 | 185 | 9/8/2024 | |
8.0.0-preview1 | 114 | 2/21/2024 | |
7.2.0 | 1,130 | 11/16/2023 | |
7.1.0 | 233 | 5/8/2023 | |
7.0.0 | 431 | 1/20/2023 | |
6.6.0 | 552 | 11/9/2022 | |
6.5.1 | 444 | 6/28/2022 | |
6.5.0 | 428 | 6/28/2022 | |
6.4.0 | 472 | 4/14/2022 | |
6.3.0 | 461 | 3/8/2022 | |
6.2.0 | 2,201 | 1/30/2022 | |
6.1.0 | 458 | 1/23/2022 | |
6.0.0 | 307 | 1/1/2022 | |
5.2.0 | 327 | 12/15/2021 | |
5.1.0 | 292 | 12/2/2021 | |
5.0.0 | 290 | 11/27/2021 | |
4.0.0 | 327 | 11/9/2021 | |
3.9.0 | 322 | 12/15/2021 | |
3.8.0 | 402 | 11/9/2021 | |
3.7.2 | 589 | 4/22/2021 | |
3.7.1 | 441 | 4/20/2021 | |
3.7.0 | 505 | 3/17/2021 | |
3.6.0 | 723 | 11/12/2020 | |
3.5.2 | 821 | 4/14/2020 | |
3.5.1 | 893 | 4/12/2020 | |
3.5.0 | 974 | 4/1/2020 | |
3.4.0 | 1,070 | 2/20/2020 | |
3.3.0 | 1,234 | 2/14/2020 | |
3.2.0 | 1,601 | 1/22/2020 | |
3.1.0 | 1,617 | 12/30/2019 | |
3.0.1 | 1,519 | 12/26/2019 | |
2.2.0 | 1,245 | 2/19/2020 | |
2.1.0 | 1,665 | 12/24/2019 | |
2.0.0 | 1,574 | 8/31/2019 | |
1.2.0 | 1,649 | 5/20/2019 | |
1.1.0 | 1,557 | 5/8/2019 | |
1.0.0 | 1,576 | 5/1/2019 |