Için sekme tamamlama System.CommandLine
Önemli
System.CommandLine
şu anda ÖNİzLEME aşamasındadır ve bu belgeler 2.0 beta 4 sürümüne yöneliktir.
Bazı bilgiler, yayımlanmadan önce önemli ölçüde değiştirilebilen yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
kullanan System.CommandLine
uygulamalar, belirli kabuklarda sekme tamamlama için yerleşik desteğe sahiptir. Bunu etkinleştirmek için son kullanıcının kabuk başına bir kez birkaç adım atılması gerekir. Kullanıcı bunu yaptıktan sonra, sekme tamamlama işlemi uygulamanızda sabit listesi değerleri veya FromAmong çağrısı yaparak tanımladığınız değerler gibi statik değerler için otomatik olarak tamamlanır. Çalışma zamanında değerleri dinamik olarak alarak sekme tamamlamayı da özelleştirebilirsiniz.
Sekme tamamlamayı etkinleştirme
Sekme tamamlama özelliğini etkinleştirmek istediğiniz makinede aşağıdaki adımları uygulayın.
.NET CLI için:
- Bkz. Sekme tamamlamayı etkinleştirme.
üzerinde System.CommandLine
oluşturulan diğer komut satırı uygulamaları için:
dotnet-suggest
Genel aracı yükleyin.Kabuk profilinize uygun dolgu betiğini ekleyin. Bir kabuk profili dosyası oluşturmanız gerekebilir. Dolgu betiği, kabuğunuzdan
dotnet-suggest
tamamlama isteklerini uygunSystem.CommandLine
tabanlı uygulamaya temsilci olarak veren ara çubuğuna iletir.için
bash
, dotnet-suggest-shim.bash dosyasının içeriğini ~/.bash_profile öğesine ekleyin.için
zsh
, dotnet-suggest-shim.zsh içeriğini ~/.zshrc'ye ekleyin.PowerShell için dotnet-suggest-shim.ps1 içeriğini PowerShell profilinize ekleyin. Konsolunuzda aşağıdaki komutu çalıştırarak PowerShell profilinizin beklenen yolunu bulabilirsiniz:
echo $profile
Kullanıcının kabuğu ayarlandıktan sonra, kullanılarak System.CommandLine
oluşturulan tüm uygulamalar için tamamlamalar çalışır.
Windows'da cmd.exe için (Windows Komut İstemi) takılabilir sekme tamamlama mekanizması yoktur, bu nedenle dolgu betiği yoktur. Diğer kabuklar için etiketli Area-Completions
bir GitHub sorunu arayın. Bir sorun bulamazsanız yeni bir sorun açabilirsiniz.
Çalışma zamanında sekme tamamlama değerlerini alma
Aşağıdaki kod, çalışma zamanında sekme tamamlama değerlerini dinamik olarak alan bir uygulamayı gösterir. Kod, geçerli tarihi izleyen sonraki iki haftalık tarihlerin listesini alır. Liste seçeneğine --date
çağrılarak AddCompletions
sağlanır:
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);
}
}
Sekme tuşuna basıldığında gösterilen değerler örnek olarak CompletionItem
sağlanır:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Aşağıdaki CompletionItem
özellikler ayarlanır:
Label
gösterilecek tamamlanma değeridir.SortText
listedeki değerlerin doğru sırada sunulmasını sağlar. İki basamaklı bir dizeye dönüştürülereki
ayarlanır, böylece sıralama 01, 02, 03 vb. ile 14 arasında olur. Bu parametreyi ayarlamazsanız, sıralama, bu örnekte kısa tarih biçiminde olan ve doğru sıralanmayacak olan öğesini temel alırLabel
.
ve Detail
gibi Documentation
başka CompletionItem
özellikler de vardır, ancak henüz içinde System.CommandLine
kullanılmazlar.
Bu kod tarafından oluşturulan dinamik sekme tamamlama listesi, yardım çıkışında da görünür:
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