Cara menggunakan B-0101 pada JavaScript

Lompati ke konten utama

Browser ini sudah tidak didukung.

Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.

Panduan: Membuat hiasan tampilan, perintah, dan pengaturan [panduan kolom]

  • Artikel
  • 09/27/2022
  • 32 menit untuk membaca

Dalam artikel ini

Berlaku untuk:

Visual Studio
Visual Studio untuk Mac
Visual Studio Code

Anda dapat memperluas editor teks/kode Visual Studio dengan perintah dan melihat efek. Artikel ini memperlihatkan kepada Anda cara memulai fitur ekstensi populer, panduan kolom. Panduan kolom adalah garis terang visual yang digambar pada tampilan editor teks untuk membantu Anda mengelola kode ke lebar kolom tertentu. Secara khusus, kode yang diformat bisa penting untuk sampel yang Anda sertakan dalam dokumen, posting blog, atau laporan bug.

Dalam panduan ini, Anda:

  • Membuat proyek VSIX

  • Menambahkan hiasan tampilan editor

  • Menambahkan dukungan untuk menyimpan dan mendapatkan pengaturan [tempat menggambar panduan kolom dan warnanya]

  • Tambahkan perintah [tambahkan/hapus panduan kolom, ubah warnanya]

  • Tempatkan perintah pada menu Edit dan menu konteks dokumen teks

  • Menambahkan dukungan untuk memanggil perintah dari Jendela Perintah Visual Studio

    Anda dapat mencoba versi fitur panduan kolom denganekstensi Visual Studio Gallery ini.

    Catatan

    Dalam panduan ini, Anda menempelkan sejumlah besar kode ke dalam beberapa file yang dihasilkan oleh templat ekstensi Visual Studio. Tetapi, segera panduan ini akan merujuk ke solusi lengkap di GitHub dengan contoh ekstensi lainnya. Kode yang diselesaikan sedikit berbeda karena memiliki ikon perintah nyata alih-alih menggunakan ikon generiktemplate.

Mulai

Mulai dari Visual Studio 2015, Anda tidak menginstal Visual Studio SDK dari pusat unduhan. Ini disertakan sebagai fitur opsional dalam penyiapan Visual Studio. Anda juga dapat menginstal VS SDK nanti. Untuk informasi selengkapnya, lihat Menginstal Visual Studio SDK.

Menyiapkan solusi

Pertama, Anda membuat proyek VSIX, menambahkan hiasan tampilan editor, lalu menambahkan perintah [yang menambahkan VSPackage untuk memiliki perintah]. Arsitektur dasarnya adalah sebagai berikut:

  • Anda memiliki pendengar pembuatan tampilan teks yang membuat ColumnGuideAdornment objek per tampilan. Objek ini mendengarkan peristiwa tentang perubahan tampilan atau pengaturan yang mengubah, memperbarui, atau menggambar ulang panduan kolom seperlunya.

  • Ada GuidesSettingsManager yang menangani pembacaan dan penulisan dari penyimpanan pengaturan Visual Studio. Manajer pengaturan juga memiliki operasi untuk memperbarui pengaturan yang mendukung perintah pengguna [tambahkan kolom, hapus kolom, ubah warna].

  • Ada paket VSIP yang diperlukan jika Anda memiliki perintah pengguna, tetapi hanya kode boilerplate yang menginisialisasi objek implementasi perintah.

  • Ada ColumnGuideCommands objek yang menjalankan perintah pengguna dan menghubungkan handler perintah untuk perintah yang dideklarasikan dalam file .vsct .

    VSIX. Gunakan | File Baru... perintah untuk membuat proyek. Pilih simpul Ekstensibilitas di bawah C# di panel navigasi kiri dan pilih Proyek VSIX di panel kanan. Masukkan nama ColumnGuides dan pilih OK untuk membuat proyek.

    Lihat hiasan. Tekan tombol penunjuk kanan pada simpul proyek di Penjelajah Solusi. Pilih tambahkan | Item Baru ... perintah untuk menambahkan item hiasan tampilan baru. Pilih | Ekstensibilitas Editor di panel navigasi kiri dan pilih Hiasan Tampilan Editor di panel kanan. Masukkan nama ColumnGuideAdornment sebagai nama item dan pilih Tambahkan untuk menambahkannya.

    Anda dapat melihat templat item ini menambahkan dua file ke proyek [serta referensi, dan sebagainya]: ColumnGuideAdornment.cs dan ColumnGuideAdornmentTextViewCreationListener.cs. Templat menggambar persegi panjang ungu pada tampilan. Di bagian berikut, Anda mengubah beberapa baris dalam pendengar pembuatan tampilan dan mengganti konten ColumnGuideAdornment.cs.

    Perintah. Di Penjelajah Solusi, tekan tombol penunjuk kanan pada simpul proyek. Pilih tambahkan | Item Baru ... perintah untuk menambahkan item hiasan tampilan baru. Pilih | Ekstensibilitas VSPackage di panel navigasi kiri dan pilih Perintah Kustom di panel kanan. Masukkan nama ColumnGuideCommands sebagai nama item dan pilih Tambahkan. Selain beberapa referensi, menambahkan perintah dan paket juga menambahkan ColumnGuideCommands.cs, ColumnGuideCommandsPackage.cs, dan ColumnGuideCommandsPackage.vsct. Di bagian berikut, Anda mengganti konten file pertama dan terakhir untuk menentukan dan mengimplementasikan perintah.

Menyiapkan pendengar pembuatan tampilan teks

Buka ColumnGuideAdornmentTextViewCreationListener.cs di editor. Kode ini mengimplementasikan handler untuk setiap kali Visual Studio membuat tampilan teks. Ada atribut yang mengontrol kapan handler dipanggil tergantung pada karakteristik tampilan.

Kode juga harus mendeklarasikan lapisan hiasan. Ketika editor memperbarui tampilan, editor mendapatkan lapisan hiasan untuk tampilan dan dari yang mendapatkan elemen hiasan. Anda dapat mendeklarasikan pengurutan lapisan Anda relatif terhadap orang lain dengan atribut. Ganti baris berikut:

[Order[After = PredefinedAdornmentLayers.Caret]]

dengan dua baris ini:

[Order[Before = PredefinedAdornmentLayers.Text]]
[TextViewRole[PredefinedTextViewRoles.Document]]

Baris yang Anda ganti berada dalam sekelompok atribut yang mendeklarasikan lapisan hiasan. Baris pertama yang Anda ubah hanya mengubah tempat baris panduan kolom muncul. Menggambar baris "sebelum" teks dalam tampilan berarti teks muncul di belakang atau di bawah teks. Baris kedua menyatakan bahwa hiasan panduan kolom berlaku untuk entitas teks yang sesuai dengan gagasan Anda tentang dokumen, tetapi Anda dapat mendeklarasikan hiasan, misalnya, untuk hanya berfungsi untuk teks yang dapat diedit. Ada informasi lebih lanjut dalam layanan Bahasa dan titik ekstensi editor

Menerapkan pengelola pengaturan

Ganti konten GuidesSettingsManager.cs dengan kode berikut [dijelaskan di bawah]:

using Microsoft.VisualStudio.Settings;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Settings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;

namespace ColumnGuides
{
    internal static class GuidesSettingsManager
    {
        // Because my code is always called from the UI thred, this succeeds.
        internal static SettingsManager VsManagedSettingsManager =
            new ShellSettingsManager[ServiceProvider.GlobalProvider];

        private const int _maxGuides = 5;
        private const string _collectionSettingsName = "Text Editor";
        private const string _settingName = "Guides";
        // 1000 seems reasonable since primary scenario is long lines of code
        private const int _maxColumn = 1000;

        static internal bool AddGuideline[int column]
        {
            if [! IsValidColumn[column]]
                throw new ArgumentOutOfRangeException[
                    "column",
                    "The paramenter must be between 1 and " + _maxGuides.ToString[]];
            var offsets = GuidesSettingsManager.GetColumnOffsets[];
            if [offsets.Count[] >= _maxGuides]
                return false;
            // Check for duplicates
            if [offsets.Contains[column]]
                return false;
            offsets.Add[column];
            WriteSettings[GuidesSettingsManager.GuidelinesColor, offsets];
            return true;
        }

        static internal bool RemoveGuideline[int column]
        {
            if [!IsValidColumn[column]]
                throw new ArgumentOutOfRangeException[
                    "column", "The paramenter must be between 1 and 10,000"];
            var columns = GuidesSettingsManager.GetColumnOffsets[];
            if [! columns.Remove[column]]
            {
                // Not present.  Allow user to remove the last column
                // even if they're not on the right column.
                if [columns.Count != 1]
                    return false;

                columns.Clear[];
            }
            WriteSettings[GuidesSettingsManager.GuidelinesColor, columns];
            return true;
        }

        static internal bool CanAddGuideline[int column]
        {
            if [!IsValidColumn[column]]
                return false;
            var offsets = GetColumnOffsets[];
            if [offsets.Count >= _maxGuides]
                return false;
            return ! offsets.Contains[column];
        }

        static internal bool CanRemoveGuideline[int column]
        {
            if [! IsValidColumn[column]]
                return false;
            // Allow user to remove the last guideline regardless of the column.
            // Okay to call count, we limit the number of guides.
            var offsets = GuidesSettingsManager.GetColumnOffsets[];
            return offsets.Contains[column] || offsets.Count[] == 1;
        }

        static internal void RemoveAllGuidelines[]
        {
            WriteSettings[GuidesSettingsManager.GuidelinesColor, new int[0]];
        }

        private static bool IsValidColumn[int column]
        {
            // zero is allowed [per user request]
            return 0  4]
                    {
                        string[] rgbs = config.Substring[4, lastParen - 4].Split[','];

                        if [rgbs.Length >= 3]
                        {
                            byte r, g, b;
                            if [byte.TryParse[rgbs[0], out r] &&
                                byte.TryParse[rgbs[1], out g] &&
                                byte.TryParse[rgbs[2], out b]]
                            {
                                return Color.FromRgb[r, g, b];
                            }
                        }
                    }
                }
                return Colors.DarkRed;
            }

            set
            {
                WriteSettings[value, GetColumnOffsets[]];
            }
        }

        // Parse a list of integer values out of a string that looks like
        // "RGB[255,0,0] 1, 5, 10, 80"
        static internal List GetColumnOffsets[]
        {
            var result = new List[];
            string settings = GuidesSettingsManager.GuidelinesConfiguration;
            if [String.IsNullOrEmpty[settings]]
                return new List[];

            if [!settings.StartsWith["RGB["]]
                return new List[];

            int lastParen = settings.IndexOf[']'];
            if [lastParen 

Bài mới nhất

Chủ Đề