Share via


Tabvoltooiing voor System.CommandLine

Belangrijk

System.CommandLine bevindt zich momenteel in PREVIEW en deze documentatie is voor versie 2.0 beta 4. Sommige informatie heeft betrekking op voorlopige versie van het product dat aanzienlijk kan worden gewijzigd voordat het wordt vrijgegeven. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.

Apps die gebruikmaken System.CommandLine van ingebouwde ondersteuning voor het voltooien van tabbladen in bepaalde shells. Om dit in te schakelen, moet de eindgebruiker één keer per shell enkele stappen uitvoeren. Zodra de gebruiker dit doet, wordt tabvoltooiing automatisch uitgevoerd voor statische waarden in uw app, zoals opsommingswaarden of waarden die u definieert door FromAmong aan te roepen. U kunt de voltooiing van het tabblad ook aanpassen door waarden dynamisch op te halen tijdens runtime.

Tabvoltooiing inschakelen

Voer de volgende stappen uit op de computer waarop u tabvoltooiing wilt inschakelen.

Voor de .NET CLI:

  • Zie Tabvoltooiing inschakelen.

Voor andere opdrachtregel-apps die zijn gebouwd op System.CommandLine:

  • Installeer het dotnet-suggest globale hulpprogramma.

  • Voeg het juiste shim-script toe aan uw shell-profiel. Mogelijk moet u een shellprofielbestand maken. Het shim-script stuurt voltooiingsaanvragen van uw shell door naar het dotnet-suggest hulpprogramma, dat delegeert naar de juiste System.CommandLineapp op basis van de app.

    • Voeg bashde inhoud van dotnet-suggest-shim.bash toe aan ~/.bash_profile.

    • Voeg zshvoor de inhoud van dotnet-suggest-shim.zsh toe aan ~/.zshrc.

    • Voor PowerShell voegt u de inhoud van dotnet-suggest-shim.ps1 toe aan uw PowerShell-profiel. U vindt het verwachte pad naar uw PowerShell-profiel door de volgende opdracht uit te voeren in uw console:

      echo $profile
      

Zodra de shell van de gebruiker is ingesteld, werken voltooiingen voor alle apps die zijn gebouwd met behulp van System.CommandLine.

Voor cmd.exe in Windows (de Windows-opdrachtprompt) is er geen pluggable tab voltooiingsmechanisme, dus er is geen shim-script beschikbaar. Zoek voor andere shells naar een GitHub-probleem dat is gelabeld Area-Completions. Als u geen probleem vindt, kunt u een nieuw probleem openen.

Voltooiingswaarden voor tabbladen ophalen tijdens runtime

De volgende code toont een app die waarden voor het voltooien van tabbladen dynamisch ophaalt tijdens runtime. De code haalt een lijst op van de volgende twee weken datums na de huidige datum. De lijst wordt geleverd aan de --date optie door het aanroepen AddCompletionsvan:

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);
    }
}

De waarden die worden weergegeven wanneer op de tabtoets wordt gedrukt, worden geleverd als CompletionItem exemplaren:

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

De volgende CompletionItem eigenschappen zijn ingesteld:

  • Label is de voltooiingswaarde die moet worden weergegeven.
  • SortText zorgt ervoor dat de waarden in de lijst in de juiste volgorde worden weergegeven. Deze wordt ingesteld door te i converteren naar een tekenreeks met twee cijfers, zodat sorteren is gebaseerd op 01, 02, 03, enzovoort, tot en met 14. Als u deze parameter niet instelt, is sorteren gebaseerd op de Label, die in dit voorbeeld een korte datumnotatie heeft en niet correct sorteert.

Er zijn andere CompletionItem eigenschappen, zoals Documentation en Detail, maar ze worden nog niet gebruikt in System.CommandLine.

De lijst met dynamische tabvoltooiing die door deze code is gemaakt, wordt ook weergegeven in de Help-uitvoer:

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

Zie ook

System.CommandLine-overzicht