Bagikan melalui


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 sesuai System.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 mengonversi i ke string dua digit, sehingga pengurutan didasarkan pada 01, 02, 03, dan seterusnya, hingga 14. Jika Anda tidak mengatur parameter ini, pengurutan didasarkan pada Label, 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

Lihat juga

System.CommandLine ringkasan