Partager via


Saisie semi-automatique de tabulation pour System.CommandLine

Important

System.CommandLine est actuellement disponible en préversion et cette documentation concerne la version 2.0 bêta 5. Certaines informations se rapportent à un produit en version préliminaire qui peut être sensiblement modifié avant sa sortie. Microsoft n’offre aucune garantie, expresse ou implicite, en ce qui concerne les informations fournies ici.

Les applications qui utilisent System.CommandLine prennent en charge la prise en charge intégrée de la saisie semi-automatique de tabulation 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 cette opération effectuée, la saisie semi-automatique de tabulation est automatique pour les valeurs statiques dans votre application, telles que les valeurs d’énumération ou les valeurs définies par l’appel System.CommandLine.Option<T>.AcceptOnlyFromAmong. Vous pouvez également personnaliser la saisie semi-automatique des onglets en fournissant des valeurs dynamiquement au moment de l’exécution.

Activer la saisie semi-automatique pour les onglets

Sur l’ordinateur sur lequel vous souhaitez activer la saisie semi-automatique de tabulation, procédez comme suit.

Pour l’interface CLI .NET :

Pour les autres applications en ligne de commande basées sur System.CommandLine:

  • Installez l’outil dotnet-suggest global.

  • Ajoutez le script shim approprié à votre profil shell. Vous devrez peut-être créer un fichier de profil shell. Le script shim transfère les demandes d’achèvement de votre interpréteur de commandes à l’outil dotnet-suggest , qui les délègue à l’application appropriée System.CommandLine.

    • 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 trouverez le chemin attendu de votre profil PowerShell en exécutant la commande suivante dans votre console :

      echo $profile
      
  • Inscrivez l’application en appelant dotnet-suggest register --command-path $executableFilePath, où $executableFilePath est le chemin d’accès au fichier exécutable de l’application.

Une fois que l’interpréteur de commandes de l’utilisateur est configuré et que l’exécutable est inscrit, les achèvements fonctionnent pour toutes les applications générées à l’aide System.CommandLinede .

Pour cmd.exe sur Windows (invite de commandes Windows) il n’existe aucun mécanisme de saisie semi-automatique d’onglet enfichable. Par conséquent, aucun script shim n’est 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 des onglets au moment de l’exécution

Le code suivant montre une application qui récupère les valeurs de saisie semi-automatique de tabulation dynamiquement au moment de l’exécution. Le code obtient la liste des deux prochaines semaines de dates suivant la date actuelle. La liste est fournie à l’option --date en appelant CompletionSources.Add:

using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;

new DateCommand().Parse(args).Invoke();

class DateCommand : Command
{
    private Argument<string> subjectArgument = new("subject")
    {
        Description = "The subject of the appointment."
    };
    private Option<DateTime> dateOption = new("--date")
    {
        Description = "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.Arguments.Add(subjectArgument);
        this.Options.Add(dateOption);

        dateOption.CompletionSources.Add(ctx => {
            var today = System.DateTime.Today;
            List<CompletionItem> dates = new();
            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.SetAction(parseResult =>
        {
            Console.WriteLine($"Scheduled \"{parseResult.GetValue(subjectArgument)}\" for {parseResult.GetValue(dateOption)}");
        });
    }
}

Les valeurs affichées lorsque la touche Tab est enfoncée sont fournies en tant qu’instances CompletionItem :

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

Les propriétés suivantes CompletionItem sont définies :

  • Label est la valeur d’achèvement à afficher.
  • SortText garantit que les valeurs de la liste sont présentées dans l’ordre correct. Il est défini en convertissant i en chaîne à deux chiffres, afin 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é sur le Labelparamètre , qui dans cet exemple est au format de date courte et ne trie pas correctement.

Il existe d’autres CompletionItem propriétés, telles que Documentation et Detail, mais elles ne sont pas encore utilisées dans System.CommandLine.

La liste de saisie semi-automatique de tabulation dynamique créée par ce code apparaît é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

Voir aussi

vue d’ensemble System.CommandLine