Завершение вкладки для 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