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:
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 juisteSystem.CommandLine
app op basis van de app.Voeg
bash
de inhoud van dotnet-suggest-shim.bash toe aan ~/.bash_profile.Voeg
zsh
voor 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 AddCompletions
van:
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 tei
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 deLabel
, 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