Sdílet prostřednictvím


Dokončování tabulátoru pro System.CommandLine

Aplikace, které používají System.CommandLine, mají vestavěnou podporu pro automatické doplňování tabulátorů v některých shellech. Pokud ho chcete povolit, musí koncový uživatel provést několik kroků jednou pro každé shellové prostředí. Po dokončení je dokončení tabulátoru automatické pro statické hodnoty v aplikaci, například výčtové hodnoty nebo hodnoty definované voláním AcceptOnlyFromAmong(String[]). Dokončování tabulátoru můžete také přizpůsobit tak, že za běhu poskytnete hodnoty dynamicky.

Povolit dokončování tabulátoru

Na počítači, na kterém chcete povolit dokončování tabulátoru, postupujte takto.

Pro .NET CLI:

Pro další aplikace příkazového řádku postavené na System.CommandLine:

  • dotnet-suggest Nainstalujte globální nástroj.

  • Přidejte do shellového profilu příslušný skript shim. Možná budete muset vytvořit shell profilový soubor. Propojovací skript předá požadavky na dokončení z prostředí do dotnet-suggest nástroje, který je deleguje na příslušnou System.CommandLine aplikaci.

    • Přidejte obsah souboru bash do souboru ~/.bash_profile.

    • Přidejte obsah zsh do ~/.zshrc.

    • Pro PowerShell přidejte do profilu PowerShellu obsah dotnet-suggest-shim.ps1 . Očekávanou cestu k profilu PowerShellu najdete spuštěním následujícího příkazu v konzole:

      echo $profile
      
  • Zaregistrujte aplikaci voláním dotnet-suggest register --command-path $executableFilePath, kde $executableFilePath je cesta ke spustitelnému souboru aplikace.

Po nastavení prostředí uživatele a registraci spustitelného souboru budou dokončení fungovat pro všechny aplikace vytvořené pomocí System.CommandLine.

Pro cmd.exe ve Windows (příkazový řádek systému Windows) neexistuje žádný mechanismus pro automatické doplňování příkazů, takže není k dispozici žádný náhražkový skript. V případě jiných prostředí vyhledejte problém GitHubu, který je označený Area-Completions. Pokud problém nenajdete, můžete otevřít nový.

Získání hodnot dokončení tabulátoru za běhu

Následující kód ukazuje aplikaci, která dynamicky načítá hodnoty pro dokončování tabulátoru za běhu. Kód získá seznam dat pro následující dva týdny počínaje aktuálním datem. Seznam je poskytován do možnosti --date voláním 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)}");
        });
    }
}

Hodnoty zobrazené při stisknutí klávesy Tab jsou k dispozici jako CompletionItem instance:

dates.Add(new CompletionItem(
    label: date.ToShortDateString(),
    sortText: $"{i:2}"));

Jsou nastaveny následující CompletionItem vlastnosti:

  • Label je hodnota dokončení, která se má zobrazit.
  • SortText zajišťuje, aby se hodnoty v seznamu zobrazovaly ve správném pořadí. Nastaví se převodem i na dvouciferný řetězec, aby řazení bylo založeno na hodnotě 01, 02, 03 atd. až 14. Pokud tento parametr nenastavíte, řazení je založené na Labelhodnotě , která je v tomto příkladu v krátkém formátu data a nebude se řadit správně.

Existují další CompletionItem vlastnosti, například Documentation a Detail, ale ještě nejsou použity v System.CommandLine.

Seznam dynamického dokončování tabulátoru vytvořený tímto kódem se také zobrazí ve výstupu nápovědy:

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

Viz také

System.CommandLine přehled