{"id":20331035,"url":"https://github.com/fracerqueira/promptplus","last_synced_at":"2025-04-05T04:14:13.217Z","repository":{"id":44718857,"uuid":"413140388","full_name":"FRACerqueira/PromptPlus","owner":"FRACerqueira","description":"Interactive command-line toolkit for .Net core with powerful controls and commands to create professional console applications.","archived":false,"fork":false,"pushed_at":"2024-12-17T16:03:01.000Z","size":821740,"stargazers_count":57,"open_issues_count":9,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T03:11:17.946Z","etag":null,"topics":["autocomplete-suggestions","chart","cli","command-line","console","console-table","csharp","datagridview","dotnet","grid-layout","maskedit","prompt","readline","table","terminal"],"latest_commit_sha":null,"homepage":"https://fracerqueira.github.io/PromptPlus/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FRACerqueira.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"FRACerqueira"}},"created_at":"2021-10-03T16:57:15.000Z","updated_at":"2025-01-31T20:13:17.000Z","dependencies_parsed_at":"2023-10-23T21:28:06.772Z","dependency_job_id":"7007bb8a-481a-4436-8787-a613ad4a3062","html_url":"https://github.com/FRACerqueira/PromptPlus","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FRACerqueira%2FPromptPlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FRACerqueira%2FPromptPlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FRACerqueira%2FPromptPlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FRACerqueira%2FPromptPlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FRACerqueira","download_url":"https://codeload.github.com/FRACerqueira/PromptPlus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284952,"owners_count":20913704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autocomplete-suggestions","chart","cli","command-line","console","console-table","csharp","datagridview","dotnet","grid-layout","maskedit","prompt","readline","table","terminal"],"created_at":"2024-11-14T20:18:33.688Z","updated_at":"2025-04-05T04:14:13.194Z","avatar_url":"https://github.com/FRACerqueira.png","language":"C#","funding_links":["https://github.com/sponsors/FRACerqueira"],"categories":[],"sub_categories":[],"readme":"# \u003cimg align=\"left\" width=\"100\" height=\"100\" src=\"./docs/images/icon.png\"\u003eWelcome to PromptPlus\n[![Build](https://github.com/FRACerqueira/PromptPlus/workflows/Build/badge.svg)](https://github.com/FRACerqueira/PromptPlus/actions/workflows/build.yml)\n[![Publish](https://github.com/FRACerqueira/PromptPlus/actions/workflows/publish.yml/badge.svg)](https://github.com/FRACerqueira/PromptPlus/actions/workflows/publish.yml)\n[![License](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://github.com/FRACerqueira/PromptPlus/blob/master/LICENSE)\n[![NuGet](https://img.shields.io/nuget/v/PromptPlus)](https://www.nuget.org/packages/PromptPlus/)\n[![Downloads](https://img.shields.io/nuget/dt/PromptPlus)](https://www.nuget.org/packages/PromptPlus/)\n\n\n**Interactive command-line toolkit for .NET Core with powerful controls and commands to create professional console applications.**\n\n**PromptPlus** was developed in C# with the **netstandard2.1**, **.NET 6** , **.NET 7** and **.NET 8** target frameworks.\n\n**[Visit the official page for more documentation of PromptPlus](https://fracerqueira.github.io/PromptPlus)**\n\n## Table of Contents\n\n- [What's new - previous versions](whatsnewprev.md)\n- [Features](#features)\n- [Migrate Version V3.3 to V4.0](#migrate-version)\n- [Console Engine](#console-engine)\n- [Installing](#installing)\n- [Examples](#examples)\n- [Controls Snapshot](#controls-snapshot)\n- [Usage](#usage)\n- [Culture](#culture)\n- [Colors](#colors)\n- [Hotkeys](#hotkeys)\n- [Keypress Extensions Emacs](#keypress-extensions-emacs)\n- [Validators](#validators)\n- [Supported Platforms](#supported-platforms)\n- [Code of Conduct](#code-of-conduct)\n- [Contributing](#contributing)\n- [Credits](#credits)\n- [License](#license)\n- [API Reference](https://fracerqueira.github.io/PromptPlus/apis/apis.html)\n\n## What's new in the latest version \n### V4.2.0 \n\n[**Top**](#table-of-contents)\n\n- Added .NET8 target frameworks.\n- Split of feature:\n    - PromptPlus.TableSelect\\\u003cT\u003e to Select item in table : Select row, column and data in a grid/table \n        - Samples in project [Table Select Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableSelectSamples)\n    - PromptPlus.Table\\\u003cT\u003e to write table in console : Show data in a grid/table \n        - Samples in project [Table Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableBasicSamples)\n- New Control : TableMultSelect\\\u003cT\u003e :  Select multi-data in a grid/table \n    - Samples in project [Table MultiSelect Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableMultiSelectSamples)\n    - Main features :\n        - More than 80 layout combinations\n        - Navigation by row and columns\n        - Scroll the table when it is larger than the screen\n        - Split text when it is larger than the column size\n        - Automatic header and column completion\n        - Color customization of each element\n        - Search for data filtered by columns\n        - Formatting by column or by data type definition\n- New feature: \n    - MinimalRender the prompt and control description are not rendered, showing only the minimum necessary without using resources.\n        - Global property : MinimalRender\n        - Instance control(By config command): MinimalRender(bool value = true)\n- New feature: \n    - Pagination Template to customize pagination information\n        - Global property : PaginationTemplate\n        - Instance control(By config command) : PaginationTemplate(Func\u003cint, int, int, string\u003e? value)\n- New feature: \n    - PromptPlus.Join() \n    - Fluent-Interface to write text (less code typed) \n- Changed feature:\n    - Moved tooltips and validation message to the end of render to all control\n- Improvement : \n    - Color Token now accepts ':' to separate foreground color from background color\n    - eg: [RED:BLUE] = [RED ON BLUE]\n- Improvement : \n    - Optimized the Calendar control to have symbols when selecting elements\n- Improvement :\n    - Optimize Render of ProgressBar (less lines)\n- Improvement : \n    - Optimize Render of SliderNumber (less lines)\n- Improvement : \n    - Added Styles command for custom colors on all controls\n        - Removed the ApplyStyle command from the Config interface (now use the Styles command)\n        - Added ToStyle() extension for Color Class (less code typed)\n- Improvement : \n    - Added command HideRange to not show range (Min/Max values) in the SliderNumber control    \n- Improvement : \n    - Optimize resource usage in rendering (less cultural dependency)\n- Improvement : \n    - Reinforce the validation of invalid or optional parameters in all controls\n- Improvement : \n    - Remove code copy (MIT license) from other project and applied package (for lower maintenance)\n- Improvement : \n    - Optimized the WaitControl control (for cancel correctly tasks)\n    - Removed property Context (EventWaitProcess) \n    - Added Method ChangeContext(Action\u003cT\u003e action) in EventWaitProcess (for change context over thread safe)\n    - Renamed command 'CancelAllNextTasks' to 'CancelAllTasks' (WaitControl)\n- Documentation: \n    - Examples of snapshot controls updated to reflect layout changes and reduced image size (faster page loading)\n    - Reviewed credit references and licenses\n- Renamed command: \n    - 'DescriptionWithInputType' to 'ShowTipInputType'.\n    - Now extra-line to tip InputType\n- Renamed command: \n    - 'AppendGroupOnDescription' to 'ShowTipGroup'.\n    - Now extra-line to tip group\n- Fixed bug : \n    - Table control does not render correctly when it does not support Unicode\n- Fixed bug : \n    - The Slide Switch Control does not show on/off values ​​when they are not customized\n- Fixed bug : \n    - Alternate screen doesn't update background style when changing color\n- Fixed bug : \n    - Exception when try delete[F3] in empty colletion in AddTolist/AddtoMaskEditList control\n- Fixed bug : \n    - Edit[F2] Immutable item in AddTolist/AddtoMaskEditList control\n- Fixed bug : \n    - CTRL-V (paste data) does not show input in some controls\n- Fixed bug : \n    - Refinement of Unicode symbol rendering in all controls (Corret render)\n- Removed Control Pipeline :\n    - Now use [PipeAndFilter component](https://github.com/FRACerqueira/PipeAndFilter)\n    - See [Pipeline Sample](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/PipelineSamples)\n## Features\n[**Top**](#table-of-contents)\n\n**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** :\n- Banner Ascii\n- Input text / Secret / AutoComplete with spinner\n- MaskEdit Generic / Only Date / Only Time / DateTime / Number /  Currency\n- Calendar with multiple layouts\n- Select and Multi-Select(with group select!) \n- AddTo(Add/Remove) items for text and masked text\n- Wait Keypress with animate spinner\n- Slider numeric ranger with gradient colors\n- Up-Down numeric ranger \n- Switch (style on/off)\n- Wait Process (Run background tasks Sequential/Parallel) with elapsedtime and spinner \n- Wait Time with countdown and spinner\n- ChartBar with enabled Interaction to switch layout, Legend and order when browse the charts / Legends.\n- Progress bar with 8 types , gradient colors and spinner\n- Browser File and Folder with multi-select, colors and spinner\n- Treeview hierarchical structures with multi-select and colors\n- Switch Alternate screen\n- Execution pipeline with conditions\n- Table, TableSelect and TableMultSelct with multiple layouts\n\n**All controls** have the same organization (see in action: [**Controls Snapshot**](#controls-snapshot)):\n- input/filter (except Masked input) using **[GNU Readline](https://en.wikipedia.org/wiki/GNU_Readline) Emacs keyboard shortcuts**.  \n- Prompt, description and data entry (ever)\n- Extra actions per stage: OnStartControl/OnInputRender/OnTryAcceptInput/OnFinishControl (ever)\n- Tooltips (ever and configurable) \n- Filter by Contains / StartsWith (configurable) (depends on the control)\n- Collection subset items and iterations (depends on the control)\n- Page information and page-size(depends on the control)\n- Spinner animation (depends on the control)\n- Error message (depends on the control and validators)\n \nPromptPlus driver console  **Supports 4/8/24-bit colors** in the terminal with **auto-detection** of the current terminal's capabilities.\n\n## Migrate Version\n[**Top**](#table-of-contents)\n\nUntil version 3 the console engine was based on a model from another project. **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.\n**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.\n\nFor migrate V3.3 to V4.0 [**see this link**](https://fracerqueira.github.io/PromptPlus/migrateversion.html).\n\n## Console Engine\n[**Top**](#table-of-contents)\n\nThe 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 and automatic color conversion.\nThe 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.\n\n### Sample Output detect (ConsoleFeaturesSamples)\n![](./docs/images/consoleinfo.gif)\n\n### Sample Output Overflow Capacity (ConsoleFeaturesSamples)\n\n![](./docs/images/consoleoverflowcapacity.gif)\n\n### Sample color capacity (ConsoleFeaturesSamples)\n\n**_Note: This layout and code were based (code copy and adaptation) on the excellent project: spectrum console, having the same color palette_**\n\n![](./docs/images/consolecolorcapacity.gif)\n\n## Installing\n[**Top**](#table-of-contents)\n\n```\nInstall-Package PromptPlus [-pre]\n```\n\n```\ndotnet add package PromptPlus [--prerelease]\n```\n\n**_Note:  [-pre]/[--prerelease] usage for pre-release versions_**\n\n## Examples\n[**Top**](#table-of-contents)\n\nThe folder [**Samples**](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples) contains more **40** samples!.\n\n```\ndotnet run --project [name of sample]\n```\n\n## Controls Snapshot\n\n### AddToList\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/AddToListSamples)\n\n![](./docs/images/AddtoList.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/AddtoMaskEditListSamples)\n\n![](./docs/images/AddtoMaskEditList.gif)\n\n### AlternateScreen\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/AlternateScreenSamples)\n\n![](./docs/images/AlternateScreen.gif)\n\n### AutoComplete\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/AutoCompleteSamples)\n\n![](./docs/images/AutoComplete.gif)\n\n### Banner\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/BannerSamples)\n\n![](./docs/images/Banner.gif)\n\n### Browser\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/BrowserMultSelectSamples)\n\n![](./docs/images/BrowserMultiSelect.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/BrowserSamples)\n\n![](./docs/images/BrowserSelect.gif)\n\n### Calendar\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/CalendarSamples)\n\n![](./docs/images/Calendar.gif)\n\n### ChartBar\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/ChartSamples)\n\n![](./docs/images/ChartBar.gif)\n\n### Confirm\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/ConfirmSamples)\n\n![](./docs/images/Confirm.gif)\n\n### Console Features\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/ConsoleFeaturesSamples)\n\n![](./docs/images/ConsoleFeatures.gif)\n\n### Input\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/InputBasicSamples)\n\n![](./docs/images/InputBasic.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/InputSecretSamples)\n\n![](./docs/images/InputSecret.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/InputWithHistorySamples)\n\n![](./docs/images/InputWithHistory.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/InputWithSuggestionSamples)\n\n![](./docs/images/InputWithSuggestion.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/InputWithValidatorSamples)\n\n![](./docs/images/InputWithValidator.gif)\n\n### KeyPress\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/KeyPressSamples)\n\n![](./docs/images/KeyPress.gif)\n\n### MaskEdit\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditCurrencyTypeSamples)\n\n![](./docs/images/MaskEditCurrencyType.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditDateTimeTypeSamples)\n\n![](./docs/images/MaskEditDateTimeType.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditGenericSamples)\n\n![](./docs/images/MaskEditGenericType.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditNumberTypeSamples)\n\n![](./docs/images/MaskEditNumberType.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditDateTypeSamples)\n\n![](./docs/images/MaskEditOnlyDateType.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MaskEditTimeTypeSamples)\n\n![](./docs/images/MaskEditOnlyTimeType.gif)\n\n### MultSelect\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/MultiSelectBasicSamples)\n\n![](./docs/images/MultiSelect.gif)\n\n### ProgressBar\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/ProgressBarSamples)\n\n![](./docs/images/ProgressBar.gif)\n\n### Select\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/SelectBasicSamples)\n\n![](./docs/images/Select.gif)\n\n### SliderNumber\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/SliderNumberLeftRightModeSamples)\n\n![](./docs/images/SliderNumberLeftRight.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/SliderNumberUpDownModeSamples)\n\n![](./docs/images/SliderNumberUpDown.gif)\n\n### SliderSwitch\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/SliderSwitchSamples)\n\n![](./docs/images/SliderSwitch.gif)\n\n### Table\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableMultiSelectSamples)\n\n![](./docs/images/TableMultiSelect.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableSelectSamples)\n\n![](./docs/images/TableSelect.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TableBasicSamples)\n\n![](./docs/images/TableWrite.gif)\n\n### TreeView\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TreeViewMultiSelectSamples)\n\n![](./docs/images/TreeViewMultiSelect.gif)\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/TreeViewSamples)\n\n![](./docs/images/TreeViewSelect.gif)\n\n### Wait Tasks\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/WaitTasksSamples)\n\n![](./docs/images/WaitTasks.gif)\n\n### Wait Timer\n\n[**Top**](#table-of-contents)  | [Samples](https://github.com/FRACerqueira/PromptPlus/tree/main/Samples/WaitTimerSamples)\n\n![](./docs/images/WaitTime.gif)\n\n## Usage\n[**Top**](#table-of-contents)\n\nAll 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.\n```csharp\n//MaskEdit Generic\nvar mask = PromptPlus.MaskEdit(\"input\", \"MaskEdit Generic input\")\n    .Mask(@\"\\XYZ 9{3}-L{3}-C[ABC]N{1}[XYZ]-A{3}\")\n    .ShowTipInputType(FormatWeek.Short)\n    .Run();\n\nif (!mask.IsAborted)\n{\n    PromptPlus.WriteLine($\"You input with mask is {mask.Value.Masked}\");\n    PromptPlus.WriteLine($\"You input without mask is {mask.Value.Input}\");\n}\n\n//AnyKey\nvar kp1 = PromptPlus\n    .KeyPress()\n    .Run();\n\nif (!kp1.IsAborted)\n{\n    PromptPlus.WriteLine($\"You Pressed {kp1.Value.Key}\");\n}\n\n//input\nvar in1 = PromptPlus\n    .Input(\"Input sample1\")\n    .Run();\n\nif (!in1.IsAborted)\n{\n    PromptPlus.WriteLine($\"You input is {in1.Value}\");\n}\n```\n\n## Culture\n[**Top**](#table-of-contents)\n\nPromptPlus 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.\n\nAll messages are affected when changed language/culture. PromptPlus has languages embedded:\n- en-US (Default)\n- pt-BR\n\nTo use a non-embedded language/culture:\n\n- Copy the **PromptPlusResources.resx** file in folder PromptPlus/Resources\n- Translate messages with same format to your language/culture\n- Convert .resx files to binary .resources files ([**reference link here**](https://docs.microsoft.com/en-us/dotnet/core/extensions/work-with-resx-files-programmatically))\n- Publish the compiled file (**PromptPlus.[Language].resources**) in the same folder as the binaries.\n\n## Colors\n[**Top**](#table-of-contents)\n\nPromptPlus is in accordance with informal standard [**NO COLOR**](https://no-color.org/). when there is the environment variable \"no_color\" the colors are disabled.\n\nPrompt Plus also has commands for coloring parts of the text.\n\n#### Direct console\n```csharp\nPromptPlus.WriteLine(\"[RGB(255,0,0) ON WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text\");\nPromptPlus.WriteLine(\"[RGB(255,0,0):WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text\");\nPromptPlus.WriteLine(\"[#ff0000 ON WHITE]Test [YELLOW] COLOR [/] BACK COLOR [/] other text\");\nPromptPlus.WriteLine(\"[RED ON WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text\");\nPromptPlus.WriteLine(\"[RED:WHITE]Test[YELLOW] COLOR [/] BACK COLOR [/] other text\");\n````\n\n### Using Style\n\n```csharp\nPromptPlus.WriteLine(\"Test\", new Style(Color.White, Color.Red, Overflow.None));\nPromptPlus.WriteLine(\"Test\", new Style(new Color(255, 255, 255), Color.Red, Overflow.None));\nPromptPlus.WriteLine(\"Test\", new Style(Color.FromConsoleColor(ConsoleColor.White), Color.Red, Overflow.None));\nPromptPlus.WriteLine(\"Test\", new Style(Color.FromInt32(255), Color.Red, Overflow.None));\n````\n\n### Over controls\n```csharp\nPromptPlus\n    .Input(\"Input [blue]sample2[/]\", \"with [yellow]description[/]\")\n    .Run();\n````\n\n### Escaping format characters\nTo output a [ you use [[, and to output a ] you use ]].\n```csharp\nPromptPlus.WriteLine(\"[[Test]]\");\n\nusing (PromptPlus.EscapeColorTokens())\n{\n   PromptPlus.DoubleDash($\"PromptPlus with context IgnoreColorTokens = true\");\n   //show text without color\n   PromptPlus.WriteLine(\"ValidformedColor_TokenAny[RED ON WHITE]Text[/]_[YELLOW]Othertext[/]\");\n}\n````\n\nPromptplus uses the **same default colors and engine(softly modified)** as the third party project: spectreconsole.\nFor more details [visit the **official page**](https://fracerqueira.github.io/PromptPlus/#colors) or see the samples in folder **Samples/ConsoleFeaturesSamples**\n\n\n## Hotkeys\n[**Top**](#table-of-contents)\n\nHotkeys (global and control-specific) are configurable. Some hotkeys are internal and reserved.\nFor more details [visit the **official page**](https://fracerqueira.github.io/PromptPlus/#hotkeys)\n\n## Keypress Extensions Emacs\n[**Top**](#table-of-contents)\n\nPromptPlus have a lot extensions to check Key-press with GNU Readline Emacs keyboard shortcuts.\nFor more details [visit the **official page**](https://fracerqueira.github.io/PromptPlus/#keypress-extensions-emacs)\n\n## Validators\n\nPromptPlus have a lot extensions to **commons validator** and **validator import**(No duplicate code!) \nFor more details [visit the **official page**](https://fracerqueira.github.io/PromptPlus/#validators) or see the samples in folder **Samples**\n\n```csharp\nprivate class MylCass\n{\n    [Required(ErrorMessage = \"{0} is required!\")]\n    [MinLength(3, ErrorMessage = \"Min. Length = 3.\")]\n    [MaxLength(5, ErrorMessage = \"Max. Length = 5.\")]\n    [Display(Prompt =\"My Input\")]\n    public string MyInput { get; set; }\n}\n```\n```csharp\nvar inst = new MylCass();\n\nPromptPlus\n    .Input(\"Input sample2\", \"import validator from decorate\")\n    .Default(inst.Text)\n    .AddValidators(PromptValidators.ImportValidators(inst,x =\u003e x!.Text!))\n    .Run();\n\nif (name.IsAborted)\n{\n   return;\n}\nPromptPlus.WriteLine($\"Your input: {name.Value}!\");\n```\n\n## Supported platforms\n[**Top**](#table-of-contents)\n\n- Windows\n    - Command Prompt, PowerShell, Windows Terminal\n- Linux (Ubuntu, etc)\n    - Windows Terminal (WSL 2)\n- macOS\n    - Terminal.app\n\n## Code of Conduct\n[**Top**](#table-of-contents)\n\nThis project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.\nFor more information see the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## Contributing\n\nSee the [Contributing guide](CONTRIBUTING.md) for developer documentation.\n\n## Credits\n[**Top**](#table-of-contents)\n\nPromptPlus **\u003cu\u003eincludes code(Copy)\u003c/u\u003e** from other software released under the **MIT license**:\n\n- [Spectre.Console](https://spectreconsole.net/), Copyright (c) 2020 Patrik Svensson, Phil Scott, Nils Andresen. See [LICENSE](Licenses/LICENSE-SpectreConsole.md).\n\n- [FIGlet](https://github.com/auriou/FIGlet), Copyright (c) 2014 Philippe AURIOU. See [LICENSE](Licenses/LICENSE-FIGlet.md).  \n\n**EastAsian width generated by package**\n\n- [EastAsianWidthDotNet](https://github.com/nuitsjp/EastAsianWidthDotNet), Copyright (c) 2020 Atsushi Nakamura. See [LICENSE](Licenses/LICENSE-EastAsianWidthDotNet.md).\n\n**API documentation generated by**\n\n- [xmldoc2md](https://github.com/FRACerqueira/xmldoc2md), Copyright (c) 2022 Charles de Vandière. See [LICENSE](Licenses/LICENSE-xmldoc2md.md).\n\n## License\n[**Top**](#table-of-contents)\n\nCopyright 2021 @ Fernando Cerqueira\n\nPromptPlus is licensed under the MIT license. See [LICENSE](https://github.com/FRACerqueira/PromptPlus/blob/master/LICENSE).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffracerqueira%2Fpromptplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffracerqueira%2Fpromptplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffracerqueira%2Fpromptplus/lists"}