Saisie semi-automatique via la touche Tab pour System.CommandLine
Important
System.CommandLine
est actuellement une PRÉVERSION et cette documentation concerne la version 2.0 beta 4.
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Les applications qui utilisent System.CommandLine
ont une prise en charge intégrée de la saisie semi-automatique via la touche Tab dans certains interpréteurs de commandes. Pour l’activer, l’utilisateur final doit effectuer quelques étapes une fois par interpréteur de commandes. Une fois que l’utilisateur effectue cette opération, la saisie semi-automatique via la touche Tab est automatique pour les valeurs statiques de votre application, telles que les valeurs d’énumération ou les valeurs que vous définissez en appelant FromAmong. Vous pouvez également personnaliser la saisie semi-automatique via la touche Tab en obtenant des valeurs dynamiquement au moment de l’exécution.
Activer la complétion par tabulation
Sur l’ordinateur sur lequel vous souhaitez activer la saisie semi-automatique via la touche Tab, procédez comme suit.
Pour l’interface CLI .NET :
Pour d’autres applications en ligne de commande basées sur System.CommandLine
:
Installer l’outil global
dotnet-suggest
.Ajoutez le script shim approprié au profil de votre interpréteur de commandes. Vous devrez peut-être créer un fichier de profil d’interpréteur de commandes. Le script shim transfère les demandes de complétion depuis votre interpréteur de commandes vers l’outil
dotnet-suggest
, qui délègue à l’application basée surSystem.CommandLine
appropriée.Pour
bash
, ajoutez le contenu de dotnet-suggest-shim.bash à ~/.bash_profile.Pour
zsh
, ajoutez le contenu de dotnet-suggest-shim.zsh à ~/.zshrc.Pour PowerShell, ajoutez le contenu de dotnet-suggest-shim.ps1 à votre profil PowerShell. Vous pouvez trouver le chemin attendu de votre profil PowerShell en exécutant la commande suivante dans votre console :
echo $profile
Une fois l’interpréteur de commandes de l’utilisateur configuré, les complétions fonctionnent pour toutes les applications créées à l’aide de System.CommandLine
.
Pour cmd.exe sur Windows (l’invite de commandes Windows), il n’existe aucun mécanisme de saisie semi-automatique via la touche Tab enfichable. Aucun script shim n’est donc disponible. Pour d’autres interpréteurs de commandes, recherchez un problème GitHub étiqueté Area-Completions
. Si vous ne trouvez pas de problème, vous pouvez en ouvrir un nouveau.
Obtenir les valeurs de saisie semi-automatique via la touche Tab au moment de l’exécution
Le code suivant montre une application qui obtient des valeurs pour l’achèvement de tabulation dynamiquement au moment de l’exécution. Le code obtient la liste des deux prochaines semaines à partir de la date actuelle. La liste est fournie à l’option --date
en appelant 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);
}
}
Les valeurs affichées lorsque la touche Tab est enfoncée sont fournies sous forme d’instances CompletionItem
:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Les propriétés CompletionItem
suivantes sont définies :
Label
est la valeur de saisie semi-automatique à afficher.SortText
garantit que les valeurs de la liste sont présentées dans le bon ordre. Elle est définie en convertissanti
en chaîne à deux chiffres, de sorte que le tri soit basé sur 01, 02, 03, et ainsi de suite, jusqu’à 14. Si vous ne définissez pas ce paramètre, le tri est basé surLabel
, qui, dans cet exemple, est au format de date courte et ne sera pas trié correctement.
Il existe d’autres propriétés CompletionItem
, telles que Documentation
et Detail
, mais elles ne sont pas encore utilisées dans System.CommandLine
.
La liste de saisie semi-automatique dynamique via la touche Tab créée par ce code s’affiche également dans la sortie d’aide :
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