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ämpligSystem.CommandLine
-baserad app.För
bash
lägger du till innehållet i dotnet-suggest-shim.bash i ~/.bash_profile.För
zsh
lä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.CommandLine
av .
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 atti
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