Udostępnij przez


Uzupełnianie kart dla System.CommandLine

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 przy każdym uruchomieniu powłoki. Po wykonaniu tego kroku, automatyczne uzupełnianie dla wartości statycznych w aplikacji, takich jak wartości enumeracji lub wartości zdefiniowane poprzez wywołanie metody AcceptOnlyFromAmong(String[]), będzie dostępne. Możesz również dostosować uzupełnianie automatyczne, podając wartości dynamicznie podczas działania programu.

Włącz uzupełnianie kart.

Na komputerze, na którym chcesz włączyć uzupełnianie poleceń, wykonaj następujące kroki.

Interfejs CLI .NET:

W przypadku innych aplikacji wiersza polecenia utworzonych na platformie System.CommandLine:

  • dotnet-suggest Zainstaluj narzędzie globalne:

    dotnet tool install -g dotnet-suggest
    
  • Dodaj odpowiedni skrypt podkładki do profilu powłoki. Może być konieczne utworzenie pliku profilu powłoki. Skrypt pomocniczy przekazuje żądania uzupełnienia z powłoki do narzędzia dotnet-suggest, które przekazuje je odpowiedniej aplikacji opartej na System.CommandLine.

    • W polu bashdodaj zawartość pliku dotnet-suggest-shim.bash do pliku ~/.bash_profile.

    • W przypadku zsh, dodaj zawartość pliku dotnet-suggest-shim.zsh do pliku ~/.zshrc.

    • W przypadku programu PowerShell dodaj zawartość dotnet-suggest-shim.ps1 do profilu programu PowerShell, a następnie uruchom ponownie program PowerShell. Oczekiwaną ścieżkę do profilu programu PowerShell można znaleźć za pomocą następującego polecenia:

      echo $profile
      
  • Zarejestruj aplikację, wywołując metodę dotnet-suggest register --command-path $executableFilePath, gdzie $executableFilePath jest ścieżką do pliku wykonywalnego aplikacji.

Po skonfigurowaniu powłoki użytkownika i zarejestrowaniu pliku wykonywalnego, funkcja autouzupełniania będzie działać dla wszystkich aplikacji utworzonych przy użyciu System.CommandLine.

W przypadku cmd.exe w systemie Windows (wiersz polecenia systemu Windows) nie ma mechanizmu możliwości uzupełniania poleceń za pomocą klawisza Tab, więc nie jest dostępny żaden skrypt pośredniczący. W przypadku innych powłok poszukaj zgłoszenia na GitHub oznaczonego Area-Completionsetykietą. Jeśli nie znajdziesz problemu, możesz otworzyć nowy.

Pobieranie wartości uzupełniania poleceń przez tabulator 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ę dat z następnego tygodnia po bieżącej dacie. Lista jest udostępniana --date opcji przez wywołanie metody CompletionSources.Add:

using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;

new DateCommand().Parse(args).Invoke();

class DateCommand : Command
{
    private Argument<string> subjectArgument = new("subject")
    {
        Description = "The subject of the appointment."
    };
    private Option<DateTime> dateOption = new("--date")
    {
        Description = "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.Arguments.Add(subjectArgument);
        this.Options.Add(dateOption);

        dateOption.CompletionSources.Add(ctx => {
            var today = System.DateTime.Today;
            List<CompletionItem> dates = new();
            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.SetAction(parseResult =>
        {
            Console.WriteLine($"Scheduled \"{parseResult.GetValue(subjectArgument)}\" for {parseResult.GetValue(dateOption)}");
        });
    }
}

Wartości wyświetlane po naciśnięciu Tab udostępniane są jako wystąpienia CompletionItem:

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 metodzie Label, która w tym przykładzie jest w formacie daty krótkiej i nie będzie sortować poprawnie.

Istnieją inne CompletionItem właściwości, takie jak Documentation i Detail, ale nie są jeszcze używane w kontekście 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.
  <12/4/2025|12/5/2025|12/6/2025|12/7/2025|12/8/2025|12/9/2025|12/10/2025>
  --version                                                                       Show version information
  -?, -h, --help

Zobacz także