Sdílet prostřednictvím


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

Důležité

System.CommandLine je aktuálně ve verzi PREVIEW a tato dokumentace je určená pro verzi 2.0 beta 4. Některé informace se týkají předběžné verze produktu, který může být podstatně změněn před vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aplikace, které používají System.CommandLine integrovanou podporu pro dokončování tabulátoru v určitých prostředích Pokud ho chcete povolit, musí koncový uživatel provést několik kroků jednou pro každé prostředí. Jakmile to uživatel provede, dokončení tabulátoru je automatické pro statické hodnoty v aplikaci, jako jsou například hodnoty výčtu nebo hodnoty, které definujete voláním FromAmong. Dokončování tabulátoru můžete také přizpůsobit dynamickým získáním hodnot za běhu.

Povolení dokončování pomocí tabulátoru

Na počítači, na kterém chcete povolit dokončování tabulátoru, proveďte následující kroky.

Pro .NET CLI:

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

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

  • Přidejte do profilu prostředí příslušný skript shim. Možná budete muset vytvořit soubor profilu prostředí. Skript překrytí předá požadavky na dokončení z prostředí do dotnet-suggest nástroje, který deleguje na příslušnou System.CommandLineaplikaci.

Po nastavení prostředí uživatele 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 doplňování karet, takže není k dispozici žádný skript pro převrácené změny. 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 získává hodnoty pro dokončování tabulátoru za běhu. Kód získá seznam následujících dvou týdnů kalendářních dat za aktuálním datem. Seznam je k --date dispozici voláním 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);
    }
}

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 ve formátu krátkého 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