Sistem kustomisasi adalah fitur bawaan Emacs yang dirancang untuk menyelesaikan masalah yang Anda uraikan dengan tepat — pemrograman mungkin bukan cara yang ideal bagi rata-rata pengguna untuk mengonfigurasi editor mereka.
Titik masuk utama ke fungsionalitas penyesuaian adalah M-x customize RET
(atau Options > Customize Emacs > Top-level Customization Group
dari menu). Dari sana Anda akan melihat sistem menu interaktif untuk menyesuaikan pengaturan. Antarmuka ini menegaskan bahwa semua pengaturan adalah jenis yang benar (angka, string, warna, dll.), Menghindari sumber kesalahan utama yang dihadapi ketika pengguna mengkonfigurasi Emacs secara terprogram. Jika pengguna memilih untuk tetap melakukan perubahan apa pun yang dilakukan melalui UI, pengaturan disimpan ke bagian khusus dalam file inisialisasi pengguna (baca .emacs
:).
defcustom
adalah pembungkus di sekitar fungsionalitas tingkat rendah Emacs Lisp seperti defvar
itu keduanya mendeklarasikan variabel dan membuatnya terlihat dalam antarmuka penyesuaian. Ini juga memungkinkan pengembang untuk memberikan metadata tambahan yang diperlukan untuk menampilkan kontrol interaktif yang sesuai — yaitu, jenis nilai apa yang disimpan dalam variabel ini? String yang sewenang-wenang? Sebuah angka? Pilihan dari serangkaian opsi yang sudah ditentukan? dll. defgroup
adalah konstruk pengelompokan untuk opsi yang dapat disesuaikan ini sehingga dapat diatur ke dalam hierarki yang bagus.
Fungsionalitas ini harus digunakan setiap saat sepotong data harus dianggap sebagai opsi yang dapat dikonfigurasi untuk pengguna daripada detail internal perpustakaan.
Berikut adalah contoh sederhana yang diambil dari perpustakaan kecil saya:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
The defgroup
menciptakan grup baru dalam antarmuka Kustomisasi di bawah convenience
item tingkat atas . Saya kemudian membutuhkan variabel untuk menyimpan status kotak centang yang mungkin. Saya bisa menggunakan defvar
, tetapi karena saya ingin ini mudah dikustomisasi, saya memilih untuk menggunakannya defcustom
. The :group
porsi menunjukkan bahwa itu milik kelompok yang sebelumnya ditetapkan, dan :type
menunjukkan bahwa itu adalah urutan string. Ada juga nilai default dan deskripsi. Ada juga fasilitas tambahan (tidak ditampilkan di sini) untuk mengubah nilai yang dimasukkan oleh pengguna.
Jika sekarang saya menjalankan M-x customize RET
dan menavigasi ke Convenience > Checkbox
, saya melihat yang berikut:
Ini bukan antarmuka yang paling indah di dunia, tetapi perhatikan bahwa ia memiliki alat interaktif untuk menyesuaikan nilai "Kotak Centang" (secara checkbox-states
internal). Ini menunjukkan nilai string saat ini bersama dengan tombol INS
(masukkan) dan DEL
(hapus), dan memungkinkan kita untuk mengedit nilai string dalam kotak edit. Setelah selesai, kami dapat memutuskan apakah akan menerapkan perubahan, mengembalikannya, atau menerapkan dan menyimpannya untuk sesi mendatang.
customize
fasilitas versus kapan harus menyesuaikan dengan tangan? Atau apakah Anda tertarik untuk menulis mode? Yang terakhir adalah situasi di mana Anda mungkin benar-benar menemukan diri Anda menggunakan hal-hal sepertidefcustom
dan sejenisnya.