Udostępnij za pośrednictwem


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:

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 odpowiedniej System.CommandLineaplikacji opartej na aplikacji.

    • W przypadku bashpolecenia dodaj zawartość pliku dotnet-suggest-shim.bash do pliku ~/.bash_profile.

    • W przypadku zshpolecenia 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-Completionsetykietą . 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 przekonwertowanie i 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 elemencie Label, 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

Zobacz też

System.CommandLine Przegląd