Поделиться через


Завершение вкладки для System.CommandLine

Внимание

System.CommandLine в настоящее время находится в предварительной версии, и эта документация предназначена для версии 2.0 бета-версии 4. Некоторые сведения относятся к предварительному выпуску продукта, который может быть существенно изменен до его выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Приложения, использующие System.CommandLine встроенную поддержку завершения вкладок в определенных оболочках. Чтобы включить его, конечный пользователь должен выполнить несколько шагов один раз на оболочку. После этого завершение вкладки автоматически выполняется для статических значений в приложении, таких как значения перечисления или значения, которые определяются путем вызова FromAmong. Кроме того, можно настроить завершение вкладки, динамически получая значения во время выполнения.

Включение выполнения нажатием клавиши TAB

На компьютере, на котором вы хотите включить завершение вкладки, выполните следующие действия.

Для .NET CLI:

Для других приложений командной строки, созданных на System.CommandLineоснове:

  • Установите глобальное dotnet-suggest средство.

  • Добавьте соответствующую оболочку совместимости к профилю оболочки. Может потребоваться создать файл профиля оболочки. Скрипт shim перенаправит запросы на завершение из оболочки dotnet-suggest в инструмент, который делегирует соответствующее System.CommandLineприложение на основе.

    • Для bashэтого добавьте содержимое dotnet-suggest-shim.bash в ~/.bash_profile.

    • Для zshэтого добавьте содержимое dotnet-suggest-shim.zsh в ~/.zshrc.

    • Для PowerShell следует добавить содержимое dotnet-suggest-shim.ps1 в свой профиль PowerShell. Ожидаемый путь к профилю PowerShell можно получить, выполнив следующую команду в консоли:

      echo $profile
      

После настройки оболочки пользователя завершения будут работать для всех приложений, созданных с помощью .System.CommandLine

Для cmd.exe в Windows (командной строке Windows) нет механизма завершения подключаемой вкладки, поэтому скрипт shim недоступен. В других оболочках найдите проблему с GitHub, помеченную меткой Area-Completions. Если вы не найдете проблему, вы можете открыть новую.

Получение значений завершения вкладки во время выполнения

В следующем коде показано приложение, которое получает значения для завершения вкладки динамически во время выполнения. Код получает список следующих двух недель дат после текущей даты. Список предоставляется параметру --date путем вызова 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);
    }
}

Значения, отображаемые при нажатии клавиши tab, предоставляются как CompletionItem экземпляры:

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

Задаются следующие CompletionItem свойства:

  • Label — это значение завершения, которое будет отображаться.
  • SortText гарантирует, что значения в списке представлены в правильном порядке. Он задается путем i преобразования в двухзначную строку, чтобы сортировка была основана на 01, 02, 03 и т. д. до 14. Если этот параметр не задан, сортировка основана на Labelтом, что в этом примере имеет короткий формат даты и не будет правильно сортироваться.

Существуют другие CompletionItem свойства, такие как Documentation и Detail, но они еще System.CommandLineне используются.

Список завершения динамической вкладки, созданный этим кодом, также отображается в выходных данных справки:

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

См. также

Обзор System.CommandLine