Penyelesaian tab untuk System.CommandLine
Penting
System.CommandLine
saat ini dalam PRATINJAU, dan dokumentasi ini untuk versi 2.0 beta 4.
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Aplikasi yang menggunakan System.CommandLine
memiliki dukungan bawaan untuk penyelesaian tab di shell tertentu. Untuk mengaktifkannya, pengguna akhir harus mengambil beberapa langkah sekali per shell. Setelah pengguna melakukan ini, penyelesaian tab otomatis untuk nilai statis di aplikasi Anda, seperti nilai enum atau nilai yang Anda tentukan dengan memanggil FromAmong. Anda juga dapat menyesuaikan penyelesaian tab dengan mendapatkan nilai secara dinamis saat runtime.
Mengaktifkan penyelesaian tab
Pada komputer tempat Anda ingin mengaktifkan penyelesaian tab, lakukan langkah-langkah berikut.
Dari .NET CLI:
Untuk aplikasi baris perintah lain yang dibangun di System.CommandLine
:
Instal alat global
dotnet-suggest
.Tambahkan skrip shim yang sesuai ke profil shell Anda. Anda mungkin harus membuat file profil shell. Skrip shim meneruskan permintaan penyelesaian dari shell Anda ke alat
dotnet-suggest
, yang mendelegasikan ke aplikasi berbasis yang sesuaiSystem.CommandLine
.Untuk
bash
, tambahkan konten dotnet-suggest-shim.bash ke ~/.bash_profile.Untuk
zsh
, tambahkan konten dotnet-suggest-shim.zsh ke ~/.zshrc.Untuk PowerShell, tambahkan konten dotnet-suggest-shim.ps1 ke profil PowerShell Anda. Anda dapat menemukan jalur yang diharapkan ke profil PowerShell dengan menjalankan perintah berikut di konsol Anda:
echo $profile
Setelah shell pengguna disiapkan, penyelesaian akan berfungsi untuk semua aplikasi yang dibuat dengan menggunakan System.CommandLine
.
Untuk cmd.exe pada Windows (Prompt Perintah Windows) tidak ada mekanisme penyelesaian tab yang dapat dicolokkan, sehingga tidak ada skrip shim yang tersedia. Untuk shell lain, cari masalah GitHub yang diberi label Area-Completions
. Jika Anda tidak menemukan masalah, Anda dapat membuka baru.
Mendapatkan nilai penyelesaian tab pada run-time
Kode berikut menunjukkan aplikasi yang mendapatkan nilai untuk penyelesaian tab secara dinamis saat runtime. Kode mendapatkan daftar tanggal dua minggu berikutnya setelah tanggal saat ini. Daftar ini disediakan untuk --date
opsi dengan memanggil 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);
}
}
Nilai yang ditampilkan saat tombol tab ditekan disediakan sebagai CompletionItem
instans:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Properti berikut ini CompletionItem
diatur:
Label
adalah nilai penyelesaian yang akan ditampilkan.SortText
memastikan bahwa nilai dalam daftar disajikan dalam urutan yang tepat. Ini diatur dengan mengonversii
ke string dua digit, sehingga pengurutan didasarkan pada 01, 02, 03, dan seterusnya, hingga 14. Jika Anda tidak mengatur parameter ini, pengurutan didasarkan padaLabel
, yang dalam contoh ini dalam format tanggal pendek dan tidak akan mengurutkan dengan benar.
Ada properti lain CompletionItem
, seperti Documentation
dan Detail
, tetapi belum digunakan di System.CommandLine
.
Daftar penyelesaian tab dinamis yang dibuat oleh kode ini juga muncul dalam output bantuan:
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