Uzupełnianie kart dla System.CommandLine
Ważne
System.CommandLine
jest obecnie dostępna w wersji zapoznawczej, a ta dokumentacja dotyczy wersji 2.0 beta 4.
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed jego wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aplikacje, które używają System.CommandLine
, mają wbudowaną obsługę uzupełniania kart w niektórych powłokach. Aby ją włączyć, użytkownik końcowy musi wykonać kilka kroków raz na powłokę. Gdy użytkownik to zrobi, uzupełnianie karty jest automatyczne dla wartości statycznych w aplikacji, takich jak wartości wyliczenia lub wartości definiowane przez wywołanie metody FromAmong. Możesz również dostosować uzupełnianie karty, dynamicznie uzyskując wartości w czasie wykonywania.
Włączanie uzupełniania po naciśnięciu tabulatora
Na maszynie, na której chcesz włączyć uzupełnianie kart, wykonaj następujące kroki.
W przypadku interfejsu wiersza polecenia platformy .NET:
- Zobacz Jak włączyć uzupełnianie kart.
W przypadku innych aplikacji wiersza polecenia utworzonych na platformie System.CommandLine
:
dotnet-suggest
Zainstaluj narzędzie globalne.Dodaj odpowiedni skrypt podkładki do profilu powłoki. Może być konieczne utworzenie pliku profilu powłoki. Skrypt podkładki przekazuje żądania ukończenia z powłoki do
dotnet-suggest
narzędzia, które deleguje do odpowiedniejSystem.CommandLine
aplikacji opartej na aplikacji.W przypadku
bash
polecenia dodaj zawartość pliku dotnet-suggest-shim.bash do pliku ~/.bash_profile.W przypadku
zsh
polecenia dodaj zawartość pliku dotnet-suggest-shim.zsh do pliku ~/.zshrc.W przypadku programu PowerShell dodaj do profilu programu PowerShell zawartość pliku dotnet-suggest-shim.ps1. Oczekiwaną ścieżkę do profilu programu PowerShell można znaleźć, uruchamiając następujące polecenie w konsoli programu :
echo $profile
Po skonfigurowaniu powłoki użytkownika ukończenie będzie działać dla wszystkich aplikacji utworzonych przy użyciu polecenia System.CommandLine
.
W przypadku cmd.exe w systemie Windows (wiersz polecenia systemu Windows) nie ma mechanizmu uzupełniania kart z możliwością podłączenia, więc nie jest dostępny skrypt podkładki. W przypadku innych powłok poszukaj problemu z usługą GitHub oznaczonego Area-Completions
etykietą . Jeśli nie znajdziesz problemu, możesz otworzyć nowy.
Pobieranie wartości uzupełniania tabulacji w czasie wykonywania
Poniższy kod przedstawia aplikację, która pobiera wartości na potrzeby dynamicznego uzupełniania tabulacji w czasie wykonywania. Kod pobiera listę najbliższych dwóch tygodni dat po bieżącej dacie. Lista jest udostępniana --date
opcji przez wywołanie metody AddCompletions
:
using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;
await new DateCommand().InvokeAsync(args);
class DateCommand : Command
{
private Argument<string> subjectArgument =
new ("subject", "The subject of the appointment.");
private Option<DateTime> dateOption =
new ("--date", "The day of week to schedule. Should be within one week.");
public DateCommand() : base("schedule", "Makes an appointment for sometime in the next week.")
{
this.AddArgument(subjectArgument);
this.AddOption(dateOption);
dateOption.AddCompletions((ctx) => {
var today = System.DateTime.Today;
var dates = new List<CompletionItem>();
foreach (var i in Enumerable.Range(1, 7))
{
var date = today.AddDays(i);
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
}
return dates;
});
this.SetHandler((subject, date) =>
{
Console.WriteLine($"Scheduled \"{subject}\" for {date}");
},
subjectArgument, dateOption);
}
}
Wartości wyświetlane po naciśnięciu klawisza tabulacji są udostępniane jako CompletionItem
wystąpienia:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Ustawiane są następujące CompletionItem
właściwości:
Label
to wartość ukończenia, która ma być wyświetlana.SortText
zapewnia, że wartości na liście są prezentowane w odpowiedniej kolejności. Jest on ustawiany przez przekonwertowaniei
na dwucyfrowy ciąg, tak aby sortowanie było oparte na wartości 01, 02, 03 itd. do 14. Jeśli nie ustawisz tego parametru, sortowanie jest oparte na elemencieLabel
, który w tym przykładzie jest w formacie daty krótkiej i nie będzie poprawnie sortowane.
Istnieją inne CompletionItem
właściwości, takie jak Documentation
i Detail
, ale nie są jeszcze używane w systemie System.CommandLine
.
Lista uzupełniania kart dynamicznych utworzona przez ten kod jest również wyświetlana w danych wyjściowych pomocy:
Description:
Makes an appointment for sometime in the next week.
Usage:
schedule <subject> [options]
Arguments:
<subject> The subject of the appointment.
Options:
--date The day of week to schedule. Should be within one week.
<2/4/2022|2/5/2022|2/6/2022|2/7/2022|2/8/2022|2/9/2022|2/10/2022>
--version Show version information
-?, -h, --help