Dela via


Tabbavslut för System.CommandLine

Viktigt!

System.CommandLine är för närvarande i förhandsversion och den här dokumentationen är för version 2.0 beta 4. Viss information gäller förhandsversionsprodukt som kan ändras avsevärt innan den släpps. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.

Appar som använder System.CommandLine har inbyggt stöd för att slutföra flikar i vissa gränssnitt. För att aktivera den måste slutanvändaren vidta några steg en gång per gränssnitt. När användaren gör detta är tabbens slutförande automatiskt för statiska värden i din app, till exempel uppräkningsvärden eller värden som du definierar genom att anropa FromAmong. Du kan också anpassa flikens slutförande genom att hämta värden dynamiskt vid körning.

Aktivera tabbifyllning

Gör följande på den dator där du vill aktivera flikavslut.

För .NET CLI:

För andra kommandoradsappar som bygger på System.CommandLine:

  • Installera det dotnet-suggest globala verktyget.

  • Lägg till lämpligt shim-skript i din gränssnittsprofil. Du kan behöva skapa en shell-profilfil. Shim-skriptet vidarebefordrar slutförandebegäranden från gränssnittet till dotnet-suggest verktyget, som delegerar till lämplig System.CommandLine-baserad app.

    • För bashlägger du till innehållet i dotnet-suggest-shim.bash i ~/.bash_profile.

    • För zshlägger du till innehållet i dotnet-suggest-shim.zsh i ~/.zshrc.

    • För PowerShell lägger du till innehållet i dotnet-suggest-shim.ps1 i din PowerShell-profil. Du hittar den förväntade sökvägen till PowerShell-profilen genom att köra följande kommando i konsolen:

      echo $profile
      

När användarens gränssnitt har konfigurerats fungerar slutföranden för alla appar som skapas med hjälp System.CommandLineav .

För cmd.exe i Windows (Kommandotolken för Windows) finns det ingen mekanism för att slutföra flikar som kan anslutas, så inget shim-skript är tillgängligt. För andra gränssnitt letar du efter ett GitHub-problem som är märkt Area-Completions. Om du inte hittar något problem kan du öppna ett nytt.

Hämta flikslutvärden vid körning

Följande kod visar en app som hämtar värden för flikavslut dynamiskt vid körning. Koden hämtar en lista över de kommande två veckornas datum efter det aktuella datumet. Listan tillhandahålls till alternativet --date genom att anropa 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);
    }
}

Värdena som visas när tabbtangenten trycks in anges som CompletionItem instanser:

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

Följande CompletionItem egenskaper anges:

  • Label är det slutförandevärde som ska visas.
  • SortText ser till att värdena i listan visas i rätt ordning. Den anges genom att i konvertera till en tvåsiffrig sträng, så att sortering baseras på 01, 02, 03 och så vidare, till och med 14. Om du inte anger den här parametern baseras sortering på Label, som i det här exemplet är i kort datumformat och inte sorteras korrekt.

Det finns andra CompletionItem egenskaper, till exempel Documentation och Detail, men de används inte ännu i System.CommandLine.

Den dynamiska flikslutlistan som skapas av den här koden visas också i hjälputdata:

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

Se även

System.CommandLine Översikt