mirror of
https://github.com/spectreconsole/spectre.console.git
synced 2025-10-25 15:19:23 +00:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5a9c0ca26 | ||
|
|
23564612c1 | ||
|
|
f2b8afffb3 | ||
|
|
3e2eea730b | ||
|
|
bc9f610258 | ||
|
|
ae96606ab7 | ||
|
|
41ccc0b464 | ||
|
|
3545e0f6b5 | ||
|
|
2fe2bb3c32 | ||
|
|
1fc6f22ea9 | ||
|
|
6a5c507936 | ||
|
|
efa3d3b130 | ||
|
|
6007fcaafc | ||
|
|
13ac38ed04 | ||
|
|
ca036f6543 | ||
|
|
36ec3d1fd3 | ||
|
|
fe5096dceb | ||
|
|
39b59c8d4a | ||
|
|
8cf7794852 | ||
|
|
4edc647fdd | ||
|
|
be45a0ff4e | ||
|
|
256fcdd27f | ||
|
|
dafbfe63ba | ||
|
|
a2ab522516 | ||
|
|
8778ab1739 | ||
|
|
693e1fa170 | ||
|
|
4b37a4708f | ||
|
|
a690ce4955 | ||
|
|
759b16aed9 | ||
|
|
254880e93a | ||
|
|
6f16081f42 | ||
|
|
6121203fee | ||
|
|
9204671b27 | ||
|
|
c765bbd0dd | ||
|
|
6bceac8a5e | ||
|
|
1ed7e65fcb | ||
|
|
20650f1e7e | ||
|
|
2ba6da3514 | ||
|
|
8830779875 | ||
|
|
9c46c21e27 | ||
|
|
c643ec735d | ||
|
|
b17eabaa1f | ||
|
|
7f6f2437b1 | ||
|
|
c2bab0ebf8 | ||
|
|
9502aaf2b9 | ||
|
|
57a8e6ccc1 | ||
|
|
8c099a0038 | ||
|
|
08b65cfa47 | ||
|
|
2540f48622 |
4
.github/workflows/ci.yaml
vendored
4
.github/workflows/ci.yaml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -63,7 +63,7 @@ jobs:
|
|||||||
- name: Setup dotnet 5.0.100
|
- name: Setup dotnet 5.0.100
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Integration Tests
|
- name: Integration Tests
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
2
.github/workflows/docs.yaml
vendored
2
.github/workflows/docs.yaml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Publish
|
- name: Publish
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
6
.github/workflows/publish.yaml
vendored
6
.github/workflows/publish.yaml
vendored
@@ -29,7 +29,7 @@ jobs:
|
|||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -72,7 +72,7 @@ jobs:
|
|||||||
- name: Setup dotnet 5.0.100
|
- name: Setup dotnet 5.0.100
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
- name: Setup dotnet 5.0.100
|
- name: Setup dotnet 5.0.100
|
||||||
uses: actions/setup-dotnet@v1
|
uses: actions/setup-dotnet@v1
|
||||||
with:
|
with:
|
||||||
dotnet-version: 5.0.100
|
dotnet-version: 5.0.202
|
||||||
|
|
||||||
- name: Publish
|
- name: Publish
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ By contributing to Spectre.Console, you assert that:
|
|||||||
* The contribution is your own original work.
|
* The contribution is your own original work.
|
||||||
* You have the right to assign the copyright for the work (it is not owned by your employer, or
|
* You have the right to assign the copyright for the work (it is not owned by your employer, or
|
||||||
you have been given copyright assignment in writing).
|
you have been given copyright assignment in writing).
|
||||||
* You [license](https://github.com/spectresystems/spectre.console/blob/main/LICENSE) the contribution under the terms applied to the rest of the Spectre.Console project.
|
* You [license](https://github.com/spectreconsole/spectre.console/blob/main/LICENSE) the contribution under the terms applied to the rest of the Spectre.Console project.
|
||||||
* You agree to follow the [code of conduct](https://github.com/spectresystems/spectre.console/blob/main/CODE_OF_CONDUCT.md).
|
* You agree to follow the [code of conduct](https://github.com/spectreconsole/spectre.console/blob/main/CODE_OF_CONDUCT.md).
|
||||||
|
|
||||||
## Definition of trivial contributions
|
## Definition of trivial contributions
|
||||||
It's hard to define what is a trivial contribution. Sometimes even a 1 character change can be considered significant.
|
It's hard to define what is a trivial contribution. Sometimes even a 1 character change can be considered significant.
|
||||||
@@ -53,19 +53,19 @@ Any new code should also have reasonable unit test coverage.
|
|||||||
## Contributing process
|
## Contributing process
|
||||||
### Get buyoff or find open community issues or features
|
### Get buyoff or find open community issues or features
|
||||||
|
|
||||||
* Through GitHub, or through the [GitHub discussions](https://github.com/spectresystems/spectre.console/discussions) (preferred),
|
* Through GitHub, or through the [GitHub discussions](https://github.com/spectreconsole/spectre.console/discussions) (preferred),
|
||||||
you talk about a feature you would like to see (or a bug), and why it should be in Spectre.Console.
|
you talk about a feature you would like to see (or a bug), and why it should be in Spectre.Console.
|
||||||
* If approved through the GitHub discussions, ensure an accompanying GitHub issue is created with
|
* If approved through the GitHub discussions, ensure an accompanying GitHub issue is created with
|
||||||
information and a link back to the discussion.
|
information and a link back to the discussion.
|
||||||
* Once you get a nod from someone in the Spectre.Console Team, you can start on the feature.
|
* Once you get a nod from someone in the Spectre.Console Team, you can start on the feature.
|
||||||
* Alternatively, if a feature is on the issues list with the
|
* Alternatively, if a feature is on the issues list with the
|
||||||
[Up For Grabs](https://github.com/spectresystems/spectre.console/labels/up-for-grabs) label,
|
[Up For Grabs](https://github.com/spectreconsole/spectre.console/labels/up-for-grabs) label,
|
||||||
it is open for a community member (contributor) to patch. You should comment that you are signing up for it on
|
it is open for a community member (contributor) to patch. You should comment that you are signing up for it on
|
||||||
the issue so someone else doesn't also sign up for the work.
|
the issue so someone else doesn't also sign up for the work.
|
||||||
|
|
||||||
### Set up your environment
|
### Set up your environment
|
||||||
|
|
||||||
* You create, or update, a fork of `spectresystems/spectre.console` under your GitHub account.
|
* You create, or update, a fork of `spectreconsole/spectre.console` under your GitHub account.
|
||||||
* From there you create a branch named specific to the feature.
|
* From there you create a branch named specific to the feature.
|
||||||
* In the branch you do work specific to the feature.
|
* In the branch you do work specific to the feature.
|
||||||
* Please also observe the following:
|
* Please also observe the following:
|
||||||
@@ -96,7 +96,7 @@ Prerequisites:
|
|||||||
|
|
||||||
Submitting PR:
|
Submitting PR:
|
||||||
|
|
||||||
* Once you feel it is ready, submit the pull request to the `spectresystems/spectre.console` repository against the `main` branch
|
* Once you feel it is ready, submit the pull request to the `spectreconsole/spectre.console` repository against the `main` branch
|
||||||
unless specifically requested to submit it against another branch.
|
unless specifically requested to submit it against another branch.
|
||||||
* In the case of a larger change that is going to require more discussion,
|
* In the case of a larger change that is going to require more discussion,
|
||||||
please submit a PR sooner. Waiting until you are ready may mean more changes than you are
|
please submit a PR sooner. Waiting until you are ready may mean more changes than you are
|
||||||
@@ -129,7 +129,7 @@ the issue/open a new PR (referencing old one).
|
|||||||
Sometimes we may need you to rebase your commit against the latest code before we can review it further.
|
Sometimes we may need you to rebase your commit against the latest code before we can review it further.
|
||||||
If this happens, you can do the following:
|
If this happens, you can do the following:
|
||||||
|
|
||||||
* `git fetch upstream` (upstream remote would be `spectresystems/spectre.console`)
|
* `git fetch upstream` (upstream remote would be `spectreconsole/spectre.console`)
|
||||||
* `git checkout main`
|
* `git checkout main`
|
||||||
* `git rebase upstream/main`
|
* `git rebase upstream/main`
|
||||||
* `git checkout your-branch`
|
* `git checkout your-branch`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2020 Spectre Systems AB
|
Copyright (c) 2020 Patrik Svensson, Phil Scott
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
6
NuGet.Config
Normal file
6
NuGet.Config
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||||
|
</packageSources>
|
||||||
|
</configuration>
|
||||||
@@ -39,7 +39,7 @@ dotnet add package Spectre.Console
|
|||||||
مستندات `Spectre.Console` را در اینجا میتوایند پیدا کنید:
|
مستندات `Spectre.Console` را در اینجا میتوایند پیدا کنید:
|
||||||
|
|
||||||
<div dir="ltr">
|
<div dir="ltr">
|
||||||
https://spectresystems.github.io/spectre.console/
|
https://spectreconsole.net/
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 id="examples">مثالها</h2>
|
<h2 id="examples">مثالها</h2>
|
||||||
@@ -67,7 +67,7 @@ https://spectresystems.github.io/spectre.console/
|
|||||||
<h2 id="license">مجوز</h2>
|
<h2 id="license">مجوز</h2>
|
||||||
|
|
||||||
<div dir="ltr">
|
<div dir="ltr">
|
||||||
Copyright © Spectre Systems.
|
Copyright © Patrik Svensson, Phil Scott
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
همانطور که Spectre.Console تحت مجوز MIT ارائه شده است؛ برای کسب اطلاعات بیشتر به مجوز مراجعه کنید.
|
همانطور که Spectre.Console تحت مجوز MIT ارائه شده است؛ برای کسب اطلاعات بیشتر به مجوز مراجعه کنید.
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ dotnet add package Spectre.Console
|
|||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
The documentation for `Spectre.Console` can be found at
|
The documentation for `Spectre.Console` can be found at
|
||||||
https://spectresystems.github.io/spectre.console/
|
https://spectreconsole.net/
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
@@ -78,13 +78,14 @@ Spectre.Console to show their support and to ensure the longevity of the project
|
|||||||
* [Viktor Elofsson](https://github.com/vktr)
|
* [Viktor Elofsson](https://github.com/vktr)
|
||||||
* [Steven Knox](https://github.com/stevenknox)
|
* [Steven Knox](https://github.com/stevenknox)
|
||||||
* [David Pendray](https://github.com/dpen2000)
|
* [David Pendray](https://github.com/dpen2000)
|
||||||
|
* [Elmah.io](https://github.com/elmahio)
|
||||||
|
|
||||||
I really appreciate it.
|
I really appreciate it.
|
||||||
**Thank you very much!**
|
**Thank you very much!**
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © Spectre Systems.
|
Copyright © Patrik Svensson, Phil Scott
|
||||||
|
|
||||||
Spectre.Console is provided as-is under the MIT license. For more information see LICENSE.
|
Spectre.Console is provided as-is under the MIT license. For more information see LICENSE.
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ dotnet add package Spectre.Console
|
|||||||
## 文档
|
## 文档
|
||||||
|
|
||||||
`Spectre.Console`的文档可以在这里查看
|
`Spectre.Console`的文档可以在这里查看
|
||||||
https://spectresystems.github.io/spectre.console/
|
https://spectreconsole.net/
|
||||||
|
|
||||||
## 例子
|
## 例子
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ https://spectresystems.github.io/spectre.console/
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
版权所有 © Spectre Systems。
|
版权所有 © Patrik Svensson, Phil Scott
|
||||||
|
|
||||||
Spectre.Console 基于 MIT 协议提供。查看 LICENSE 文件了解更多信息。
|
Spectre.Console 基于 MIT 协议提供。查看 LICENSE 文件了解更多信息。
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
dotnet run -- preview --virtual-dir "spectre.console"
|
dotnet run -- preview
|
||||||
@@ -11,11 +11,10 @@ namespace Docs
|
|||||||
public static async Task<int> Main(string[] args) =>
|
public static async Task<int> Main(string[] args) =>
|
||||||
await Bootstrapper.Factory
|
await Bootstrapper.Factory
|
||||||
.CreateWeb(args)
|
.CreateWeb(args)
|
||||||
.AddSetting(Keys.Host, "spectresystems.github.io")
|
.AddSetting(Keys.Host, "spectreconsole.net")
|
||||||
.AddSetting(Keys.LinkRoot, "/spectre.console")
|
|
||||||
.AddSetting(Keys.LinksUseHttps, true)
|
.AddSetting(Keys.LinksUseHttps, true)
|
||||||
.AddSetting(Constants.EditLink, ConfigureEditLink())
|
.AddSetting(Constants.EditLink, ConfigureEditLink())
|
||||||
.ConfigureSite("spectresystems", "spectre.console", "main")
|
.ConfigureSite("spectreconsole", "spectre.console", "main")
|
||||||
.ConfigureDeployment(deployBranch: "docs")
|
.ConfigureDeployment(deployBranch: "docs")
|
||||||
.AddShortcode("Children", typeof(ChildrenShortcode))
|
.AddShortcode("Children", typeof(ChildrenShortcode))
|
||||||
.AddShortcode("ColorTable", typeof(ColorTableShortcode))
|
.AddShortcode("ColorTable", typeof(ColorTableShortcode))
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
To start contributing to the [Spectre.Console](https://github.com/spectresystems/spectre.console) documentation, you will need the [.NET Core SDK](https://dot.net) 3.1 or higher.
|
To start contributing to the [Spectre.Console](https://github.com/spectreconsole/spectre.console) documentation, you will need the [.NET Core SDK](https://dot.net) 3.1 or higher.
|
||||||
|
|
||||||
## Running Preview Site
|
## Running Preview Site
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ The documentation site has custom enhancements to Statiq located under the [./sr
|
|||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2020 Spectre Systems AB
|
Copyright (c) 2020 Patrik Svensson, Phil Scott
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
|||||||
1
docs/input/CNAME
Normal file
1
docs/input/CNAME
Normal file
@@ -0,0 +1 @@
|
|||||||
|
spectreconsole.net
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<a class="nav-link font-weight-light font-size-lg text-red" href="https://github.com/sponsors/patriksvensson"><i class="far fa-heart"></i> Sponsor</a>
|
<a class="nav-link font-weight-light font-size-lg text-red" href="https://github.com/sponsors/patriksvensson"><i class="far fa-heart"></i> Sponsor</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link font-weight-light font-size-lg" href="https://github.com/spectresystems/spectre.console"><i class="fab fa-github"></i> GitHub</a>
|
<a class="nav-link font-weight-light font-size-lg" href="https://github.com/spectreconsole/spectre.console"><i class="fab fa-github"></i> GitHub</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
<div id="footer" class="p-3 text-white font-size-sm">
|
<div id="footer" class="p-3 text-white font-size-sm">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div>
|
<div>
|
||||||
<span>© @DateTime.Today.Year Spectre Systems AB</span>
|
<span>© @DateTime.Today.Year Patrik Svensson, Phil Scott</span>
|
||||||
<span class="float-right" style="color: #888888;">@VersionUtilities.GetVersion()</span>
|
<span class="float-right" style="color: #888888;">@VersionUtilities.GetVersion()</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ public class AddReferenceCommand : Command<AddReferenceSettings>
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can use `AsyncCommand` if you need async support.
|
||||||
|
|
||||||
## Let's tie it together
|
## Let's tie it together
|
||||||
|
|
||||||
Now when we have our commands and settings implemented, we can compose a command tree
|
Now when we have our commands and settings implemented, we can compose a command tree
|
||||||
|
|||||||
12
docs/input/live/index.cshtml
Normal file
12
docs/input/live/index.cshtml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Title: Live Displays
|
||||||
|
Order: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
<h1>Sections</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
@foreach (IDocument child in OutputPages.GetChildrenOf(Document))
|
||||||
|
{
|
||||||
|
<li>@Html.DocumentLink(child)</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
@@ -1,16 +1,23 @@
|
|||||||
Title: Progress
|
Title: Progress
|
||||||
Order: 5
|
Order: 5
|
||||||
|
RedirectFrom: progress
|
||||||
---
|
---
|
||||||
|
|
||||||
Spectre.Console can display information about long running tasks in the console.
|
Spectre.Console can display information about long running tasks in the console.
|
||||||
|
|
||||||
<img src="assets/images/progress.png" style="max-width: 100%;margin-bottom:20px;">
|
<img src="../assets/images/progress.png" style="max-width: 100%;margin-bottom:20px;">
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<i class="fas fa-exclamation-triangle icon-web"></i> The progress display is not
|
||||||
|
thread safe, and using it together with other interactive components such as
|
||||||
|
prompts, status displays or other progress displays are not supported.
|
||||||
|
</div>
|
||||||
|
|
||||||
If the current terminal isn't considered "interactive", such as when running
|
If the current terminal isn't considered "interactive", such as when running
|
||||||
in a continuous integration system, or the terminal can't display
|
in a continuous integration system, or the terminal can't display
|
||||||
ANSI control sequence, any progress will be displayed in a simpler way.
|
ANSI control sequence, any progress will be displayed in a simpler way.
|
||||||
|
|
||||||
<img src="assets/images/progress_fallback.png" style="max-width: 100%;">
|
<img src="../assets/images/progress_fallback.png" style="max-width: 100%;">
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
@@ -1,10 +1,17 @@
|
|||||||
Title: Status
|
Title: Status
|
||||||
Order: 6
|
Order: 6
|
||||||
|
RedirectFrom: status
|
||||||
---
|
---
|
||||||
|
|
||||||
Spectre.Console can display information about long running tasks in the console.
|
Spectre.Console can display information about long running tasks in the console.
|
||||||
|
|
||||||
<img src="assets/images/status.gif" style="max-width: 100%;margin-bottom:20px;">
|
<img src="../assets/images/status.gif" style="max-width: 100%;margin-bottom:20px;">
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<i class="fas fa-exclamation-triangle icon-web"></i> The status display is not
|
||||||
|
thread safe, and using it together with other interactive components such as
|
||||||
|
prompts, progress displays or other status displays are not supported.
|
||||||
|
</div>
|
||||||
|
|
||||||
If the current terminal isn't considered "interactive", such as when running
|
If the current terminal isn't considered "interactive", such as when running
|
||||||
in a continuous integration system, or the terminal can't display
|
in a continuous integration system, or the terminal can't display
|
||||||
@@ -7,6 +7,11 @@ one or many items from a provided list.
|
|||||||
|
|
||||||
<img src="../assets/images/multiselection.gif" style="width: 100%;" />
|
<img src="../assets/images/multiselection.gif" style="width: 100%;" />
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert" style="margin-top:20px;">
|
||||||
|
<i class="fas fa-exclamation-triangle icon-web"></i> The use of prompts
|
||||||
|
insides status or progress displays is not supported.
|
||||||
|
</div>
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
@@ -16,6 +21,10 @@ var fruits = AnsiConsole.Prompt(
|
|||||||
.Title("What are your [green]favorite fruits[/]?")
|
.Title("What are your [green]favorite fruits[/]?")
|
||||||
.NotRequired() // Not required to have a favorite fruit
|
.NotRequired() // Not required to have a favorite fruit
|
||||||
.PageSize(10)
|
.PageSize(10)
|
||||||
|
.MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]")
|
||||||
|
.InstructionsText(
|
||||||
|
"[grey](Press [blue]<space>[/] to toggle a fruit, " +
|
||||||
|
"[green]<enter>[/] to accept)[/]")
|
||||||
.AddChoice("Apple")
|
.AddChoice("Apple")
|
||||||
.AddChoices(new[] {
|
.AddChoices(new[] {
|
||||||
"Apricot", "Avocado",
|
"Apricot", "Avocado",
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ a single item from a provided list.
|
|||||||
|
|
||||||
<img src="../assets/images/selection.gif" style="width: 100%;" />
|
<img src="../assets/images/selection.gif" style="width: 100%;" />
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert" style="margin-top:20px;">
|
||||||
|
<i class="fas fa-exclamation-triangle icon-web"></i> Using prompts inside
|
||||||
|
status or progress displays, are not supported.
|
||||||
|
</div>
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
@@ -15,6 +20,7 @@ var fruit = AnsiConsole.Prompt(
|
|||||||
new SelectionPrompt<string>()
|
new SelectionPrompt<string>()
|
||||||
.Title("What's your [green]favorite fruit[/]?")
|
.Title("What's your [green]favorite fruit[/]?")
|
||||||
.PageSize(10)
|
.PageSize(10)
|
||||||
|
.MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]")
|
||||||
.AddChoice("Apple")
|
.AddChoice("Apple")
|
||||||
.AddChoices(new[] {
|
.AddChoices(new[] {
|
||||||
"Apricot", "Avocado",
|
"Apricot", "Avocado",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Title: Text
|
Title: Text prompt
|
||||||
Order: 0
|
Order: 0
|
||||||
RedirectFrom: prompt
|
RedirectFrom: prompt
|
||||||
---
|
---
|
||||||
@@ -6,6 +6,11 @@ RedirectFrom: prompt
|
|||||||
Sometimes you want to get some input from the user, and for this
|
Sometimes you want to get some input from the user, and for this
|
||||||
you can use the `Prompt<TResult>`.
|
you can use the `Prompt<TResult>`.
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<i class="fas fa-exclamation-triangle icon-web"></i> The use of prompts
|
||||||
|
insides status or progress displays is not supported.
|
||||||
|
</div>
|
||||||
|
|
||||||
# Confirmation
|
# Confirmation
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ Spectre.Console to show their support and to ensure the longevity of the project
|
|||||||
* [Viktor Elofsson](https://github.com/vktr)
|
* [Viktor Elofsson](https://github.com/vktr)
|
||||||
* [Steven Knox](https://github.com/stevenknox)
|
* [Steven Knox](https://github.com/stevenknox)
|
||||||
* [David Pendray](https://github.com/dpen2000)
|
* [David Pendray](https://github.com/dpen2000)
|
||||||
|
* [Elmah.io](https://github.com/elmahio)
|
||||||
|
|
||||||
I really appreciate it.
|
I really appreciate it.
|
||||||
**Thank you very much!**
|
**Thank you very much!**
|
||||||
@@ -10,10 +10,10 @@ The `Tree` widget can be used to render hierarchical data.
|
|||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
// Create the tree
|
// Create the tree
|
||||||
var tree = new Tree("Root");
|
var root = new Tree("Root");
|
||||||
|
|
||||||
// Add some nodes
|
// Add some nodes
|
||||||
var foo = tree.AddNode("[yellow]Foo[/]");
|
var foo = root.AddNode("[yellow]Foo[/]");
|
||||||
var table = foo.AddNode(new Table()
|
var table = foo.AddNode(new Table()
|
||||||
.RoundedBorder()
|
.RoundedBorder()
|
||||||
.AddColumn("First")
|
.AddColumn("First")
|
||||||
@@ -25,7 +25,7 @@ var table = foo.AddNode(new Table()
|
|||||||
table.AddNode("[blue]Baz[/]");
|
table.AddNode("[blue]Baz[/]");
|
||||||
foo.AddNode("Qux");
|
foo.AddNode("Qux");
|
||||||
|
|
||||||
var bar = tree.AddNode("[yellow]Bar[/]");
|
var bar = root.AddNode("[yellow]Bar[/]");
|
||||||
bar.AddNode(new Calendar(2020, 12)
|
bar.AddNode(new Calendar(2020, 12)
|
||||||
.AddCalendarEvent(2020, 12, 12)
|
.AddCalendarEvent(2020, 12, 12)
|
||||||
.HideHeader());
|
.HideHeader());
|
||||||
@@ -67,4 +67,4 @@ var root = new Tree("Root")
|
|||||||
// Bold guide lines
|
// Bold guide lines
|
||||||
var root = new Tree("Root")
|
var root = new Tree("Root")
|
||||||
.Guide(TreeGuide.BoldLine);
|
.Guide(TreeGuide.BoldLine);
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace Docs
|
|||||||
|
|
||||||
public static class Colors
|
public static class Colors
|
||||||
{
|
{
|
||||||
public const string Url = "https://raw.githubusercontent.com/spectresystems/spectre.console/main/resources/scripts/Generator/Data/colors.json";
|
public const string Url = "https://raw.githubusercontent.com/spectreconsole/spectre.console/main/resources/scripts/Generator/Data/colors.json";
|
||||||
public const string Root = "COLORS_ROOT";
|
public const string Root = "COLORS_ROOT";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"isRoot": true,
|
"isRoot": true,
|
||||||
"tools": {
|
"tools": {
|
||||||
"cake.tool": {
|
"cake.tool": {
|
||||||
"version": "1.0.0-rc0002",
|
"version": "1.1.0",
|
||||||
"commands": [
|
"commands": [
|
||||||
"dotnet-cake"
|
"dotnet-cake"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Delegates
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static partial class Program
|
public static partial class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System;
|
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Delegates
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static partial class Program
|
public static partial class Program
|
||||||
{
|
{
|
||||||
@@ -22,7 +21,7 @@ namespace Delegates
|
|||||||
|
|
||||||
private static int Foo(CommandContext context)
|
private static int Foo(CommandContext context)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Foo");
|
AnsiConsole.WriteLine("Foo");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +29,7 @@ namespace Delegates
|
|||||||
{
|
{
|
||||||
for (var index = 0; index < settings.Count; index++)
|
for (var index = 0; index < settings.Count; index++)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Bar");
|
AnsiConsole.WriteLine("Bar");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Dynamic
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class MyCommand : Command
|
public sealed class MyCommand : Command
|
||||||
{
|
{
|
||||||
@@ -13,7 +13,7 @@ namespace Dynamic
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Value = {0}", data);
|
AnsiConsole.WriteLine("Value = {0}", data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Dynamic
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using System;
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Injection.Commands
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class DefaultCommand : Command<DefaultCommand.Settings>
|
public sealed class DefaultCommand : Command<DefaultCommand.Settings>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using System;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace Injection
|
|
||||||
{
|
{
|
||||||
public interface IGreeter
|
public interface IGreeter
|
||||||
{
|
{
|
||||||
@@ -11,7 +9,7 @@ namespace Injection
|
|||||||
{
|
{
|
||||||
public void Greet(string name)
|
public void Greet(string name)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Hello {name}!");
|
AnsiConsole.WriteLine($"Hello {name}!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using System;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Injection
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class TypeRegistrar : ITypeRegistrar
|
public sealed class TypeRegistrar : ITypeRegistrar
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ using System;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Injection
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class TypeResolver : ITypeResolver
|
public sealed class TypeResolver : ITypeResolver, IDisposable
|
||||||
{
|
{
|
||||||
private readonly IServiceProvider _provider;
|
private readonly IServiceProvider _provider;
|
||||||
|
|
||||||
@@ -17,5 +17,13 @@ namespace Injection
|
|||||||
{
|
{
|
||||||
return _provider.GetRequiredService(type);
|
return _provider.GetRequiredService(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (_provider is IDisposable disposable)
|
||||||
|
{
|
||||||
|
disposable.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Injection.Commands;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Injection
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Spectre.Console;
|
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Logging.Commands
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public class HelloCommand : Command<HelloCommand.Settings>
|
public class HelloCommand : Command<HelloCommand.Settings>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Logging.Commands
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public class LogCommandSettings : CommandSettings
|
public class LogCommandSettings : CommandSettings
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Logging.Commands;
|
|
||||||
using Serilog.Core;
|
using Serilog.Core;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Logging
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public class LogInterceptor : ICommandInterceptor
|
public class LogInterceptor : ICommandInterceptor
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Serilog.Core;
|
using Serilog.Core;
|
||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
|
|
||||||
namespace Logging
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
internal class LoggingEnricher : ILogEventEnricher
|
internal class LoggingEnricher : ILogEventEnricher
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Logging
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class TypeRegistrar : ITypeRegistrar
|
public sealed class TypeRegistrar : ITypeRegistrar
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
|
|
||||||
namespace Logging
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class TypeResolver : ITypeResolver
|
public sealed class TypeResolver : ITypeResolver
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
using Logging.Commands;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
@@ -13,7 +12,7 @@ using Spectre.Console.Cli;
|
|||||||
* Spectre.Console CommandInterceptor
|
* Spectre.Console CommandInterceptor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Logging
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Spectre.Console;
|
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
namespace BordersExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace Calendars
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj" />
|
<ProjectReference Include="..\..\..\src\Spectre.Console.ImageSharp\Spectre.Console.ImageSharp.csproj" />
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -4,9 +4,8 @@ Licensed under GNU Free Documentation License 1.2
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace CanvasExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Mandelbrot
|
public static class Mandelbrot
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using SixLabors.ImageSharp.Processing;
|
using SixLabors.ImageSharp.Processing;
|
||||||
using Spectre.Console;
|
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
namespace CanvasExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Spectre.Console;
|
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
namespace Charts
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,27 +1,23 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace ColorExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
public static void Main()
|
public static void Main()
|
||||||
{
|
{
|
||||||
if (AnsiConsole.Profile.ColorSystem == ColorSystem.NoColors)
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// No colors
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
if (AnsiConsole.Profile.Capabilities.ColorSystem == ColorSystem.NoColors)
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// No colors
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
AnsiConsole.WriteLine("No colors are supported.");
|
AnsiConsole.WriteLine("No colors are supported.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 3-BIT
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
if (AnsiConsole.Profile.Supports(ColorSystem.Legacy))
|
if (AnsiConsole.Profile.Supports(ColorSystem.Legacy))
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// 3-BIT
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
AnsiConsole.Render(new Rule("[yellow bold underline]3-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
AnsiConsole.Render(new Rule("[yellow bold underline]3-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
||||||
@@ -30,6 +26,7 @@ namespace ColorExample
|
|||||||
for (var i = 0; i < 8; i++)
|
for (var i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
AnsiConsole.Background = Color.FromInt32(i);
|
AnsiConsole.Background = Color.FromInt32(i);
|
||||||
|
AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor();
|
||||||
AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString()));
|
AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString()));
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
if ((i + 1) % 8 == 0)
|
if ((i + 1) % 8 == 0)
|
||||||
@@ -39,12 +36,11 @@ namespace ColorExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 4-BIT
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
if (AnsiConsole.Profile.Supports(ColorSystem.Standard))
|
if (AnsiConsole.Profile.Supports(ColorSystem.Standard))
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// 4-BIT
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
AnsiConsole.Render(new Rule("[yellow bold underline]4-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
AnsiConsole.Render(new Rule("[yellow bold underline]4-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
||||||
@@ -53,6 +49,7 @@ namespace ColorExample
|
|||||||
for (var i = 0; i < 16; i++)
|
for (var i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
AnsiConsole.Background = Color.FromInt32(i);
|
AnsiConsole.Background = Color.FromInt32(i);
|
||||||
|
AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor();
|
||||||
AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString()));
|
AnsiConsole.Write(string.Format(" {0,-9}", AnsiConsole.Background.ToString()));
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
if ((i + 1) % 8 == 0)
|
if ((i + 1) % 8 == 0)
|
||||||
@@ -62,12 +59,11 @@ namespace ColorExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 8-BIT
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
if (AnsiConsole.Profile.Supports(ColorSystem.EightBit))
|
if (AnsiConsole.Profile.Supports(ColorSystem.EightBit))
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// 8-BIT
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
AnsiConsole.Render(new Rule("[yellow bold underline]8-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
AnsiConsole.Render(new Rule("[yellow bold underline]8-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
||||||
@@ -79,6 +75,7 @@ namespace ColorExample
|
|||||||
{
|
{
|
||||||
var number = i * 16 + j;
|
var number = i * 16 + j;
|
||||||
AnsiConsole.Background = Color.FromInt32(number);
|
AnsiConsole.Background = Color.FromInt32(number);
|
||||||
|
AnsiConsole.Foreground = AnsiConsole.Background.GetInvertedColor();
|
||||||
AnsiConsole.Write(string.Format(" {0,-4}", number));
|
AnsiConsole.Write(string.Format(" {0,-4}", number));
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
if ((number + 1) % 16 == 0)
|
if ((number + 1) % 16 == 0)
|
||||||
@@ -89,31 +86,17 @@ namespace ColorExample
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 24-BIT
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
if (AnsiConsole.Profile.Supports(ColorSystem.TrueColor))
|
if (AnsiConsole.Profile.Supports(ColorSystem.TrueColor))
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// 24-BIT
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
AnsiConsole.ResetColors();
|
AnsiConsole.ResetColors();
|
||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
AnsiConsole.Render(new Rule("[yellow bold underline]24-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
AnsiConsole.Render(new Rule("[yellow bold underline]24-bit Colors[/]").RuleStyle("grey").LeftAligned());
|
||||||
AnsiConsole.WriteLine();
|
AnsiConsole.WriteLine();
|
||||||
|
|
||||||
var index = 0;
|
AnsiConsole.Render(new ColorBox(width: 80, height: 15));
|
||||||
for (var i = 0.0005; i < 1; i += 0.0025)
|
|
||||||
{
|
|
||||||
index++;
|
|
||||||
|
|
||||||
var color = Utilities.HSL2RGB(i, 0.5, 0.5);
|
|
||||||
AnsiConsole.Background = new Color(color.R, color.G, color.B);
|
|
||||||
AnsiConsole.Write(" ");
|
|
||||||
|
|
||||||
if (index % 50 == 0)
|
|
||||||
{
|
|
||||||
AnsiConsole.WriteLine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace ColorExample
|
|
||||||
{
|
|
||||||
public static class Utilities
|
|
||||||
{
|
|
||||||
// Borrowed from https://geekymonkey.com/Programming/CSharp/RGB2HSL_HSL2RGB.htm
|
|
||||||
public static Color HSL2RGB(double h, double sl, double l)
|
|
||||||
{
|
|
||||||
double v;
|
|
||||||
double r, g, b;
|
|
||||||
|
|
||||||
r = l; // default to gray
|
|
||||||
g = l;
|
|
||||||
b = l;
|
|
||||||
v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl);
|
|
||||||
|
|
||||||
if (v > 0)
|
|
||||||
{
|
|
||||||
double m;
|
|
||||||
double sv;
|
|
||||||
int sextant;
|
|
||||||
double fract, vsf, mid1, mid2;
|
|
||||||
|
|
||||||
m = l + l - v;
|
|
||||||
sv = (v - m) / v;
|
|
||||||
h *= 6.0;
|
|
||||||
|
|
||||||
sextant = (int)h;
|
|
||||||
fract = h - sextant;
|
|
||||||
vsf = v * sv * fract;
|
|
||||||
mid1 = m + vsf;
|
|
||||||
mid2 = v - vsf;
|
|
||||||
|
|
||||||
switch (sextant)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
r = v;
|
|
||||||
g = mid1;
|
|
||||||
b = m;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
r = mid2;
|
|
||||||
g = v;
|
|
||||||
b = m;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
r = m;
|
|
||||||
g = v;
|
|
||||||
b = mid1;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
r = m;
|
|
||||||
g = mid2;
|
|
||||||
b = v;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
r = mid1;
|
|
||||||
g = m;
|
|
||||||
b = v;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
r = v;
|
|
||||||
g = m;
|
|
||||||
b = mid2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Color(
|
|
||||||
Convert.ToByte(r * 255.0f),
|
|
||||||
Convert.ToByte(g * 255.0f),
|
|
||||||
Convert.ToByte(b * 255.0f));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace ColumnsExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ColumnsExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public sealed class User
|
public sealed class User
|
||||||
{
|
{
|
||||||
@@ -22,9 +22,9 @@ namespace ColumnsExample
|
|||||||
},
|
},
|
||||||
new User
|
new User
|
||||||
{
|
{
|
||||||
FirstName = "Brandon",
|
FirstName = "Phil",
|
||||||
LastName = "Cole",
|
LastName = "Scott",
|
||||||
City = "Washington",
|
City = "Dayton",
|
||||||
Country = "United States",
|
Country = "United States",
|
||||||
},
|
},
|
||||||
new User
|
new User
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace Cursor
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace EmojiExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Security.Authentication;
|
using System.Security.Authentication;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace Exceptions
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace EmojiExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace GridExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace InfoExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
@@ -10,12 +8,13 @@ namespace InfoExample
|
|||||||
.AddColumn(new GridColumn().NoWrap().PadRight(4))
|
.AddColumn(new GridColumn().NoWrap().PadRight(4))
|
||||||
.AddColumn()
|
.AddColumn()
|
||||||
.AddRow("[b]Enrichers[/]", string.Join(", ", AnsiConsole.Profile.Enrichers))
|
.AddRow("[b]Enrichers[/]", string.Join(", ", AnsiConsole.Profile.Enrichers))
|
||||||
.AddRow("[b]Color system[/]", $"{AnsiConsole.Profile.ColorSystem}")
|
.AddRow("[b]Color system[/]", $"{AnsiConsole.Profile.Capabilities.ColorSystem}")
|
||||||
|
.AddRow("[b]Unicode?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Unicode)}")
|
||||||
.AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Ansi)}")
|
.AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Ansi)}")
|
||||||
.AddRow("[b]Supports links?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Links)}")
|
.AddRow("[b]Supports links?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Links)}")
|
||||||
.AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Legacy)}")
|
.AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Legacy)}")
|
||||||
.AddRow("[b]Interactive?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Interactive)}")
|
.AddRow("[b]Interactive?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Interactive)}")
|
||||||
.AddRow("[b]TTY?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Tty)}")
|
.AddRow("[b]Terminal?[/]", $"{YesNo(AnsiConsole.Profile.Out.IsTerminal)}")
|
||||||
.AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Profile.Width}")
|
.AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Profile.Width}")
|
||||||
.AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Profile.Height}")
|
.AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Profile.Height}")
|
||||||
.AddRow("[b]Encoding[/]", $"{AnsiConsole.Console.Profile.Encoding.EncodingName}");
|
.AddRow("[b]Encoding[/]", $"{AnsiConsole.Console.Profile.Encoding.EncodingName}");
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace LinkExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace PanelExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ProgressExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class DescriptionGenerator
|
public static class DescriptionGenerator
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace ProgressExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
@@ -25,8 +24,12 @@ namespace ProgressExample
|
|||||||
.Start(ctx =>
|
.Start(ctx =>
|
||||||
{
|
{
|
||||||
var random = new Random(DateTime.Now.Millisecond);
|
var random = new Random(DateTime.Now.Millisecond);
|
||||||
var tasks = CreateTasks(ctx, random);
|
|
||||||
|
|
||||||
|
// Create some tasks
|
||||||
|
var tasks = CreateTasks(ctx, random);
|
||||||
|
var warpTask = ctx.AddTask("Going to warp", autoStart: false).IsIndeterminate();
|
||||||
|
|
||||||
|
// Wait for all tasks (except the indeterminate one) to complete
|
||||||
while (!ctx.IsFinished)
|
while (!ctx.IsFinished)
|
||||||
{
|
{
|
||||||
// Increment progress
|
// Increment progress
|
||||||
@@ -44,13 +47,24 @@ namespace ProgressExample
|
|||||||
// Simulate some delay
|
// Simulate some delay
|
||||||
Thread.Sleep(100);
|
Thread.Sleep(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now start the "warp" task
|
||||||
|
warpTask.StartTask();
|
||||||
|
warpTask.IsIndeterminate(false);
|
||||||
|
while (!ctx.IsFinished)
|
||||||
|
{
|
||||||
|
warpTask.Increment(12 * random.NextDouble());
|
||||||
|
|
||||||
|
// Simulate some delay
|
||||||
|
Thread.Sleep(100);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
AnsiConsole.MarkupLine("[green]Done![/]");
|
AnsiConsole.MarkupLine("[green]Done![/]");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(ProgressTask, int)> CreateTasks(ProgressContext progress, Random random)
|
private static List<(ProgressTask Task, int Delay)> CreateTasks(ProgressContext progress, Random random)
|
||||||
{
|
{
|
||||||
var tasks = new List<(ProgressTask, int)>();
|
var tasks = new List<(ProgressTask, int)>();
|
||||||
while (tasks.Count < 5)
|
while (tasks.Count < 5)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace Cursor
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
@@ -59,6 +57,8 @@ namespace Cursor
|
|||||||
new MultiSelectionPrompt<string>()
|
new MultiSelectionPrompt<string>()
|
||||||
.PageSize(10)
|
.PageSize(10)
|
||||||
.Title("What are your [green]favorite fruits[/]?")
|
.Title("What are your [green]favorite fruits[/]?")
|
||||||
|
.MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]")
|
||||||
|
.InstructionsText("[grey](Press [blue]<space>[/] to toggle a fruit, [green]<enter>[/] to accept)[/]")
|
||||||
.AddChoices(new[]
|
.AddChoices(new[]
|
||||||
{
|
{
|
||||||
"Apple", "Apricot", "Avocado", "Banana", "Blackcurrant", "Blueberry",
|
"Apple", "Apricot", "Avocado", "Banana", "Blackcurrant", "Blueberry",
|
||||||
@@ -74,6 +74,7 @@ namespace Cursor
|
|||||||
fruit = AnsiConsole.Prompt(
|
fruit = AnsiConsole.Prompt(
|
||||||
new SelectionPrompt<string>()
|
new SelectionPrompt<string>()
|
||||||
.Title("Ok, but if you could only choose [green]one[/]?")
|
.Title("Ok, but if you could only choose [green]one[/]?")
|
||||||
|
.MoreChoicesText("[grey](Move up and down to reveal more fruits)[/]")
|
||||||
.AddChoices(favorites));
|
.AddChoices(favorites));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,8 +89,8 @@ namespace Cursor
|
|||||||
|
|
||||||
return AnsiConsole.Prompt(
|
return AnsiConsole.Prompt(
|
||||||
new TextPrompt<string>("What's your [green]favorite sport[/]?")
|
new TextPrompt<string>("What's your [green]favorite sport[/]?")
|
||||||
.InvalidChoiceMessage("[red]That's not a valid fruit[/]")
|
.InvalidChoiceMessage("[red]That's not a sport![/]")
|
||||||
.DefaultValue("Lol")
|
.DefaultValue("Sport?")
|
||||||
.AddChoice("Soccer")
|
.AddChoice("Soccer")
|
||||||
.AddChoice("Hockey")
|
.AddChoice("Hockey")
|
||||||
.AddChoice("Basketball"));
|
.AddChoice("Basketball"));
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace EmojiExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
30
examples/Console/Showcase/ExceptionGenerator.cs
Normal file
30
examples/Console/Showcase/ExceptionGenerator.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Examples
|
||||||
|
{
|
||||||
|
public static class ExceptionGenerator
|
||||||
|
{
|
||||||
|
public static Exception GenerateException()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SomeOperation();
|
||||||
|
throw new InvalidOperationException();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SomeOperation()
|
||||||
|
{
|
||||||
|
SomeOperationGoingWrong();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SomeOperationGoingWrong()
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Something went very wrong!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
153
examples/Console/Showcase/Program.cs
Normal file
153
examples/Console/Showcase/Program.cs
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Examples
|
||||||
|
{
|
||||||
|
public static partial class Program
|
||||||
|
{
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
var table = new Table().HideHeaders().NoBorder();
|
||||||
|
table.Title("[u][yellow]Spectre.Console[/] [b]Features[/][/]");
|
||||||
|
table.AddColumn("Feature", c => c.NoWrap().RightAligned().Width(10).PadRight(3));
|
||||||
|
table.AddColumn("Demonstration", c => c.PadRight(0));
|
||||||
|
table.AddEmptyRow();
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]Colors[/]"),
|
||||||
|
GetColorTable());
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]OS[/]"),
|
||||||
|
new Grid().Expand().AddColumns(3)
|
||||||
|
.AddRow(
|
||||||
|
"[bold green]Windows[/]",
|
||||||
|
"[bold blue]macOS[/]",
|
||||||
|
"[bold yellow]Linux[/]"));
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
"[red]Styles[/]",
|
||||||
|
"All ansi styles: [bold]bold[/], [dim]dim[/], [italic]italic[/], [underline]underline[/], "
|
||||||
|
+ "[strikethrough]strikethrough[/], [reverse]reverse[/], and even [blink]blink[/].");
|
||||||
|
|
||||||
|
// Text
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]Text[/]"),
|
||||||
|
new Markup("Word wrap text. Justify [green]left[/], [yellow]center[/] or [blue]right[/]."));
|
||||||
|
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
Text.Empty,
|
||||||
|
GetTextGrid());
|
||||||
|
|
||||||
|
// Markup
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
"[red]Markup[/]",
|
||||||
|
"[bold purple]Spectre.Console[/] supports a simple [i]bbcode[/] like "
|
||||||
|
+ "[b]markup[/] for [yellow]color[/], [underline]style[/], and emoji! "
|
||||||
|
+ ":thumbs_up: :red_apple: :ant: :bear: :baguette_bread: :bus:");
|
||||||
|
|
||||||
|
// Trees and tables
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]Tables and Trees[/]"),
|
||||||
|
GetTreeTable());
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]Charts[/]"),
|
||||||
|
new Grid().Collapse().AddColumns(2).AddRow(
|
||||||
|
new Panel(GetBreakdownChart()).BorderColor(Color.Grey),
|
||||||
|
new Panel(GetBarChart()).BorderColor(Color.Grey)));
|
||||||
|
|
||||||
|
|
||||||
|
// Exceptions
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
new Markup("[red]Exceptions[/]"),
|
||||||
|
ExceptionGenerator.GenerateException().GetRenderable());
|
||||||
|
|
||||||
|
// Much more
|
||||||
|
table.AddEmptyRow();
|
||||||
|
table.AddRow(
|
||||||
|
"[red]+ Much more![/]",
|
||||||
|
"Tables, Grids, Trees, Progress bars, Status, Bar charts, Calendars, Figlet, Images, Text prompts, "
|
||||||
|
+ "List boxes, Separators, Pretty exceptions, Canvas, CLI parsing");
|
||||||
|
table.AddEmptyRow();
|
||||||
|
|
||||||
|
// Render the table
|
||||||
|
AnsiConsole.WriteLine();
|
||||||
|
AnsiConsole.Render(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable GetColorTable()
|
||||||
|
{
|
||||||
|
var colorTable = new Table().Collapse().HideHeaders().NoBorder();
|
||||||
|
colorTable.AddColumn("Desc", c => c.PadRight(3)).AddColumn("Colors", c => c.PadRight(0));
|
||||||
|
colorTable.AddRow(
|
||||||
|
new Markup(
|
||||||
|
"✓ [bold grey]NO_COLOR support[/]\n" +
|
||||||
|
"✓ [bold green]3-bit color[/]\n" +
|
||||||
|
"✓ [bold blue]4-bit color[/]\n" +
|
||||||
|
"✓ [bold purple]8-bit color[/]\n" +
|
||||||
|
"✓ [bold yellow]Truecolor (16.7 million)[/]\n" +
|
||||||
|
"✓ [bold aqua]Automatic color conversion[/]"),
|
||||||
|
new ColorBox(height: 6));
|
||||||
|
|
||||||
|
return colorTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable GetTextGrid()
|
||||||
|
{
|
||||||
|
var loremTable = new Grid();
|
||||||
|
var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in metus sed sapien ultricies pretium a at justo. Maecenas luctus velit et auctor maximus.";
|
||||||
|
loremTable.AddColumn(new GridColumn().LeftAligned());
|
||||||
|
loremTable.AddColumn(new GridColumn().Centered());
|
||||||
|
loremTable.AddColumn(new GridColumn().RightAligned());
|
||||||
|
loremTable.AddRow($"[green]{lorem}[/]", $"[yellow]{lorem}[/]", $"[blue]{lorem}[/]");
|
||||||
|
return loremTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable GetTreeTable()
|
||||||
|
{
|
||||||
|
var tree = new Tree("📁 src");
|
||||||
|
tree.AddNode("📁 foo").AddNode("📄 bar.cs");
|
||||||
|
tree.AddNode("📁 baz").AddNode("📁 qux").AddNode("📄 corgi.txt");
|
||||||
|
tree.AddNode("📄 waldo.xml");
|
||||||
|
|
||||||
|
var table = new Table().SimpleBorder().BorderColor(Color.Grey);
|
||||||
|
table.AddColumn(new TableColumn("Overview"));
|
||||||
|
table.AddColumn(new TableColumn("").Footer("[grey]3 Files, 225 KiB[/]"));
|
||||||
|
table.AddRow(new Markup("[yellow]Files[/]"), tree);
|
||||||
|
|
||||||
|
return new Table().RoundedBorder().Collapse().BorderColor(Color.Yellow)
|
||||||
|
.AddColumn("Foo").AddColumn("Bar")
|
||||||
|
.AddRow(new Text("Baz"), table)
|
||||||
|
.AddRow("Qux", "Corgi");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable GetBarChart()
|
||||||
|
{
|
||||||
|
return new BarChart()
|
||||||
|
.AddItem("Apple", 32, Color.Green)
|
||||||
|
.AddItem("Oranges", 13, Color.Orange1)
|
||||||
|
.AddItem("Bananas", 22, Color.Yellow);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IRenderable GetBreakdownChart()
|
||||||
|
{
|
||||||
|
return new BreakdownChart()
|
||||||
|
.ShowPercentage()
|
||||||
|
.FullSize()
|
||||||
|
.AddItem("C#", 82, Color.Green)
|
||||||
|
.AddItem("PowerShell", 13, Color.Red)
|
||||||
|
.AddItem("Bash", 5, Color.Blue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
examples/Console/Showcase/Showcase.csproj
Normal file
15
examples/Console/Showcase/Showcase.csproj
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<ExampleTitle>Showcase</ExampleTitle>
|
||||||
|
<ExampleDescription>Demonstation of Spectre.Console.</ExampleDescription>
|
||||||
|
<ExampleGroup>Misc</ExampleGroup>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace ProgressExample
|
namespace Spectre.Console.Examples
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace TableExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Spectre.Console;
|
namespace Spectre.Console.Examples
|
||||||
|
|
||||||
namespace TableExample
|
|
||||||
{
|
{
|
||||||
public static class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
<ProjectReference Include="..\..\Shared\Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
124
examples/Shared/ColorBox.cs
Normal file
124
examples/Shared/ColorBox.cs
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
|
namespace Spectre.Console.Examples
|
||||||
|
{
|
||||||
|
public sealed class ColorBox : Renderable
|
||||||
|
{
|
||||||
|
private readonly int _height;
|
||||||
|
private int? _width;
|
||||||
|
|
||||||
|
public ColorBox(int height)
|
||||||
|
{
|
||||||
|
_height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorBox(int width, int height)
|
||||||
|
: this(height)
|
||||||
|
{
|
||||||
|
_width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Measurement Measure(RenderContext context, int maxWidth)
|
||||||
|
{
|
||||||
|
return new Measurement(1, GetWidth(maxWidth));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IEnumerable<Segment> Render(RenderContext context, int maxWidth)
|
||||||
|
{
|
||||||
|
maxWidth = GetWidth(maxWidth);
|
||||||
|
|
||||||
|
for (var y = 0; y < _height; y++)
|
||||||
|
{
|
||||||
|
for (var x = 0; x < maxWidth; x++)
|
||||||
|
{
|
||||||
|
var h = x / (float)maxWidth;
|
||||||
|
var l = 0.1f + ((y / (float)_height) * 0.7f);
|
||||||
|
var (r1, g1, b1) = ColorFromHSL(h, l, 1.0f);
|
||||||
|
var (r2, g2, b2) = ColorFromHSL(h, l + (0.7f / 10), 1.0f);
|
||||||
|
|
||||||
|
var background = new Color((byte)(r1 * 255), (byte)(g1 * 255), (byte)(b1 * 255));
|
||||||
|
var foreground = new Color((byte)(r2 * 255), (byte)(g2 * 255), (byte)(b2 * 255));
|
||||||
|
|
||||||
|
yield return new Segment("▄", new Style(foreground, background));
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return Segment.LineBreak;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetWidth(int maxWidth)
|
||||||
|
{
|
||||||
|
var width = maxWidth;
|
||||||
|
if (_width != null)
|
||||||
|
{
|
||||||
|
width = Math.Min(_width.Value, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static (float, float, float) ColorFromHSL(double h, double l, double s)
|
||||||
|
{
|
||||||
|
double r = 0, g = 0, b = 0;
|
||||||
|
if (l != 0)
|
||||||
|
{
|
||||||
|
if (s == 0)
|
||||||
|
{
|
||||||
|
r = g = b = l;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double temp2;
|
||||||
|
if (l < 0.5)
|
||||||
|
{
|
||||||
|
temp2 = l * (1.0 + s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
temp2 = l + s - (l * s);
|
||||||
|
}
|
||||||
|
|
||||||
|
var temp1 = 2.0 * l - temp2;
|
||||||
|
|
||||||
|
r = GetColorComponent(temp1, temp2, h + 1.0 / 3.0);
|
||||||
|
g = GetColorComponent(temp1, temp2, h);
|
||||||
|
b = GetColorComponent(temp1, temp2, h - 1.0 / 3.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((float)r, (float)g, (float)b);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double GetColorComponent(double temp1, double temp2, double temp3)
|
||||||
|
{
|
||||||
|
if (temp3 < 0.0)
|
||||||
|
{
|
||||||
|
temp3 += 1.0;
|
||||||
|
}
|
||||||
|
else if (temp3 > 1.0)
|
||||||
|
{
|
||||||
|
temp3 -= 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (temp3 < 1.0 / 6.0)
|
||||||
|
{
|
||||||
|
return temp1 + (temp2 - temp1) * 6.0 * temp3;
|
||||||
|
}
|
||||||
|
else if (temp3 < 0.5)
|
||||||
|
{
|
||||||
|
return temp2;
|
||||||
|
}
|
||||||
|
else if (temp3 < 2.0 / 3.0)
|
||||||
|
{
|
||||||
|
return temp1 + ((temp2 - temp1) * ((2.0 / 3.0) - temp3) * 6.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return temp1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
examples/Shared/Extensions/ColorExtensions.cs
Normal file
15
examples/Shared/Extensions/ColorExtensions.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
namespace Spectre.Console.Examples
|
||||||
|
{
|
||||||
|
public static class ColorExtensions
|
||||||
|
{
|
||||||
|
public static Color GetInvertedColor(this Color color)
|
||||||
|
{
|
||||||
|
return GetLuminance(color) < 140 ? Color.White : Color.Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float GetLuminance(this Color color)
|
||||||
|
{
|
||||||
|
return (float)((0.2126 * color.R) + (0.7152 * color.G) + (0.0722 * color.B));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
examples/Shared/Shared.csproj
Normal file
12
examples/Shared/Shared.csproj
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<ExampleVisible>false</ExampleVisible>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\Spectre.Console\Spectre.Console.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"projects": [ "src" ],
|
"projects": [ "src" ],
|
||||||
"sdk": {
|
"sdk": {
|
||||||
"version": "5.0.100",
|
"version": "5.0.202",
|
||||||
"rollForward": "latestPatch"
|
"rollForward": "latestPatch"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,16 +15,15 @@
|
|||||||
|
|
||||||
<PropertyGroup Label="Package Information">
|
<PropertyGroup Label="Package Information">
|
||||||
<Description>A library that makes it easier to create beautiful console applications.</Description>
|
<Description>A library that makes it easier to create beautiful console applications.</Description>
|
||||||
<Company>Spectre Systems AB</Company>
|
<Copyright>Patrik Svensson, Phil Scott</Copyright>
|
||||||
<Copyright>Spectre Systems AB</Copyright>
|
<Authors>Patrik Svensson, Phil Scott</Authors>
|
||||||
<Authors>Patrik Svensson</Authors>
|
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<RepositoryUrl>https://github.com/spectresystems/spectre.console</RepositoryUrl>
|
<RepositoryUrl>https://github.com/spectreconsole/spectre.console</RepositoryUrl>
|
||||||
<PackageIcon>small-logo.png</PackageIcon>
|
<PackageIcon>small-logo.png</PackageIcon>
|
||||||
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
|
||||||
<PackageProjectUrl>https://github.com/spectresystems/spectre.console</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/spectreconsole/spectre.console</PackageProjectUrl>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
<PackageReleaseNotes>https://github.com/spectresystems/spectre.console/releases</PackageReleaseNotes>
|
<PackageReleaseNotes>https://github.com/spectreconsole/spectre.console/releases</PackageReleaseNotes>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Label="Source Link">
|
<PropertyGroup Label="Source Link">
|
||||||
@@ -35,7 +34,7 @@
|
|||||||
<ItemGroup Label="Package References">
|
<ItemGroup Label="Package References">
|
||||||
<PackageReference Include="MinVer" PrivateAssets="All" Version="2.4.0" />
|
<PackageReference Include="MinVer" PrivateAssets="All" Version="2.4.0" />
|
||||||
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" Version="1.0.0" />
|
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" Version="1.0.0" />
|
||||||
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.1">
|
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.3">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Spectre.Console.Rendering;
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
@@ -9,29 +8,32 @@ namespace Spectre.Console.Testing
|
|||||||
{
|
{
|
||||||
private readonly StringWriter _writer;
|
private readonly StringWriter _writer;
|
||||||
private readonly IAnsiConsole _console;
|
private readonly IAnsiConsole _console;
|
||||||
|
private readonly FakeExclusivityMode _exclusivityLock;
|
||||||
|
|
||||||
public string Output => _writer.ToString();
|
public string Output => _writer.ToString();
|
||||||
|
|
||||||
public Profile Profile => _console.Profile;
|
public Profile Profile => _console.Profile;
|
||||||
public IAnsiConsoleCursor Cursor => _console.Cursor;
|
public IAnsiConsoleCursor Cursor => _console.Cursor;
|
||||||
public FakeConsoleInput Input { get; }
|
public FakeConsoleInput Input { get; }
|
||||||
|
public IExclusivityMode ExclusivityMode => _exclusivityLock;
|
||||||
public RenderPipeline Pipeline => _console.Pipeline;
|
public RenderPipeline Pipeline => _console.Pipeline;
|
||||||
|
|
||||||
IAnsiConsoleInput IAnsiConsole.Input => Input;
|
IAnsiConsoleInput IAnsiConsole.Input => Input;
|
||||||
|
|
||||||
public FakeAnsiConsole(
|
public FakeAnsiConsole(
|
||||||
ColorSystem system,
|
ColorSystem colors,
|
||||||
AnsiSupport ansi = AnsiSupport.Yes,
|
AnsiSupport ansi = AnsiSupport.Yes,
|
||||||
int width = 80)
|
int width = 80)
|
||||||
{
|
{
|
||||||
|
_exclusivityLock = new FakeExclusivityMode();
|
||||||
_writer = new StringWriter();
|
_writer = new StringWriter();
|
||||||
|
|
||||||
var factory = new AnsiConsoleFactory();
|
var factory = new AnsiConsoleFactory();
|
||||||
_console = factory.Create(new AnsiConsoleSettings
|
_console = factory.Create(new AnsiConsoleSettings
|
||||||
{
|
{
|
||||||
Ansi = ansi,
|
Ansi = ansi,
|
||||||
ColorSystem = (ColorSystemSupport)system,
|
ColorSystem = (ColorSystemSupport)colors,
|
||||||
Out = _writer,
|
Out = new AnsiConsoleOutput(_writer),
|
||||||
Enrichment = new ProfileEnrichment
|
Enrichment = new ProfileEnrichment
|
||||||
{
|
{
|
||||||
UseDefaultEnrichers = false,
|
UseDefaultEnrichers = false,
|
||||||
@@ -39,6 +41,7 @@ namespace Spectre.Console.Testing
|
|||||||
});
|
});
|
||||||
|
|
||||||
_console.Profile.Width = width;
|
_console.Profile.Width = width;
|
||||||
|
_console.Profile.Capabilities.Unicode = true;
|
||||||
|
|
||||||
Input = new FakeConsoleInput();
|
Input = new FakeConsoleInput();
|
||||||
}
|
}
|
||||||
@@ -53,17 +56,9 @@ namespace Spectre.Console.Testing
|
|||||||
_console.Clear(home);
|
_console.Clear(home);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(IEnumerable<Segment> segments)
|
public void Write(IRenderable renderable)
|
||||||
{
|
{
|
||||||
if (segments is null)
|
_console.Write(renderable);
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var segment in segments)
|
|
||||||
{
|
|
||||||
_console.Write(segment);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
19
src/Spectre.Console.Testing/Fakes/FakeCapabilities.cs
Normal file
19
src/Spectre.Console.Testing/Fakes/FakeCapabilities.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
namespace Spectre.Console.Testing
|
||||||
|
{
|
||||||
|
public sealed class FakeCapabilities : IReadOnlyCapabilities
|
||||||
|
{
|
||||||
|
public ColorSystem ColorSystem { get; set; } = ColorSystem.TrueColor;
|
||||||
|
|
||||||
|
public bool Ansi { get; set; }
|
||||||
|
|
||||||
|
public bool Links { get; set; }
|
||||||
|
|
||||||
|
public bool Legacy { get; set; }
|
||||||
|
|
||||||
|
public bool IsTerminal { get; set; }
|
||||||
|
|
||||||
|
public bool Interactive { get; set; }
|
||||||
|
|
||||||
|
public bool Unicode { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,10 +12,11 @@ namespace Spectre.Console.Testing
|
|||||||
public Profile Profile { get; }
|
public Profile Profile { get; }
|
||||||
public IAnsiConsoleCursor Cursor => new FakeAnsiConsoleCursor();
|
public IAnsiConsoleCursor Cursor => new FakeAnsiConsoleCursor();
|
||||||
IAnsiConsoleInput IAnsiConsole.Input => Input;
|
IAnsiConsoleInput IAnsiConsole.Input => Input;
|
||||||
|
public IExclusivityMode ExclusivityMode { get; }
|
||||||
public RenderPipeline Pipeline { get; }
|
public RenderPipeline Pipeline { get; }
|
||||||
|
|
||||||
public FakeConsoleInput Input { get; }
|
public FakeConsoleInput Input { get; }
|
||||||
public string Output => Profile.Out.ToString();
|
public string Output => Profile.Out.Writer.ToString();
|
||||||
public IReadOnlyList<string> Lines => Output.TrimEnd('\n').Split(new char[] { '\n' });
|
public IReadOnlyList<string> Lines => Output.TrimEnd('\n').Split(new char[] { '\n' });
|
||||||
|
|
||||||
public FakeConsole(
|
public FakeConsole(
|
||||||
@@ -24,37 +25,34 @@ namespace Spectre.Console.Testing
|
|||||||
bool legacyConsole = false, bool interactive = true)
|
bool legacyConsole = false, bool interactive = true)
|
||||||
{
|
{
|
||||||
Input = new FakeConsoleInput();
|
Input = new FakeConsoleInput();
|
||||||
|
ExclusivityMode = new FakeExclusivityMode();
|
||||||
Pipeline = new RenderPipeline();
|
Pipeline = new RenderPipeline();
|
||||||
|
|
||||||
Profile = new Profile(new StringWriter(), encoding ?? Encoding.UTF8);
|
Profile = new Profile(new AnsiConsoleOutput(new StringWriter()), encoding ?? Encoding.UTF8);
|
||||||
Profile.Width = width;
|
Profile.Width = width;
|
||||||
Profile.Height = height;
|
Profile.Height = height;
|
||||||
Profile.ColorSystem = colorSystem;
|
Profile.Capabilities.ColorSystem = colorSystem;
|
||||||
Profile.Capabilities.Ansi = supportsAnsi;
|
Profile.Capabilities.Ansi = supportsAnsi;
|
||||||
Profile.Capabilities.Legacy = legacyConsole;
|
Profile.Capabilities.Legacy = legacyConsole;
|
||||||
Profile.Capabilities.Interactive = interactive;
|
Profile.Capabilities.Interactive = interactive;
|
||||||
Profile.Capabilities.Links = true;
|
Profile.Capabilities.Links = true;
|
||||||
|
Profile.Capabilities.Unicode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Profile.Out.Dispose();
|
Profile.Out.Writer.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear(bool home)
|
public void Clear(bool home)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(IEnumerable<Segment> segments)
|
public void Write(IRenderable renderable)
|
||||||
{
|
{
|
||||||
if (segments is null)
|
foreach (var segment in renderable.GetSegments(this))
|
||||||
{
|
{
|
||||||
return;
|
Profile.Out.Writer.Write(segment.Text);
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var segment in segments)
|
|
||||||
{
|
|
||||||
Profile.Out.Write(segment.Text);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user