Beberapa orang mungkin berpikir itu lebih mudah digunakan setq
. Beberapa orang mungkin berpikir itu lebih lispy. Pada kenyataannya, itu naif dalam kasus umum.
Memang benar bahwa untuk beberapa opsi pengguna tidak masalah. Tetapi bagi yang lain, itu penting, dan setq
merupakan pendekatan yang salah untuk opsi-opsi itu. Jadi sebagai aturan umum, setq
adalah pendekatan yang salah.
Jika Anda menggunakan custom-set-variables
atau customize-set-variable
alih-alih setq
, atau jika Anda menggunakan antarmuka pengguna Kustomisasi (mis. M-x customize-option
), Maka Anda yakin bahwa setiap inisialisasi atau memperbarui kode yang diperlukan untuk nilai opsi akan secara otomatis dipicu dan dijalankan sesuai kebutuhan. Jika Anda menggunakan setq
, ini tidak akan dilakukan.
Sekarang, ini juga merupakan kasus dimana sebagian besar opsi pengguna, terutama banyak dari mereka yang ditulis untuk perpustakaan pihak ke-3, tidak menggunakan defcustom
kata kunci :set
dan :initialize
, dan menggunakan setq
tidak penting bagi mereka. Tetapi banyak opsi vanilla Emacs menggunakan kata kunci seperti itu, dan bagi mereka yang melakukannya, setq
bukanlah hal yang benar. Jadi jika Anda ingin menggunakan kode Lisp dan bukan Customize UI untuk mengatur opsi Anda, maka Anda lebih baik menggunakan custom-set-variables
atau customize-set-variable
bukannya setq
. Tidak pernah sakit dan kadang-kadang membantu (banyak).
Tetapi yang saya rekomendasikan adalah melakukan kedua hal ini:
Gunakan Customize UI alih-alih menulis kode Lisp untuk ini.
Tentukan variabelcustom-file
, sehingga Kustomisasi menulis kustomisasi ke file itu dan bukan ke file init Anda ( ~/.emacs
). TKI, biarkan kode inisialisasi tulisan tangan Anda terpisah dari kode otomatis yang ditulis oleh Customize.
:type
dengandefvar
- Saya tidak berpikir itu harus dibatasi pada opsi pengguna. Sayangnya, banyak programmer malas dalam penggunaannya:type
, dan hasilnya tidak terlalu membantu (itu bukan kesalahan Customize).setq
alih-alihcustomize-set-variable
sekali saja. (Satu kali untuk ituauto-revert-interval
, dan saya kemudian menyadari bahwa menggunakansetq
sebelum memuatautorevert
sebenarnya jauh lebih cepat daripada menggunakancustomize-set-variable
.)Saya lebih suka
setq
lebihcustomize
karena beberapa alasan:(setq foo (calculate-foo))
). Saya menggunakan kekuatan ini sepanjang waktu dalam konfigurasi saya untuk menjaga hal-hal KERING. Bagi saya, inti dari menggunakan Emacs adalah kemampuan diprogram, dancustomize
antarmuka tidak melakukan apa pun selain menghalangi.setq
cocok untuk kontrol versi dan organisasi kode. Saya membagi inisialisasi saya di antara puluhan file; jika semuanya ada dalam satucustom.el
file besar , akan jauh lebih sulit untuk menemukan dan mengedit pengaturan dengan cepat.customize
antarmuka terasa seperti peninggalan mengerikan dari UI terburuk tahun 90-an. Saya lebih suka mengedit teks dengan kekuatan Emacs setiap hari.@Rew membuat beberapa poin bagus tentang beberapa seluk-beluk dengan
:set
dan:initialize
. Saya telah menggunakan Emacs selama bertahun-tahun dan jarang mengalami masalah seperti itu. Ketika saya lakukan, itu mudah untuk swap keluarsetq
untukcustom-set-variable
dalam kasus-kasus tertentu.sumber
customize-set-variable(s)
, dan lebih baik karena pemicu mereka berjalan secara otomatis. 2. Anda dapat menggunakan berbagai perintah penyesuaian untuk melihat semua set dan / atau variabel yang disimpan dalam hierarki yang berbeda, sehingga Anda mendapatkan organisasi grup yang berbeda secara otomatis tanpa harus menggunakan file terpisah dalam kontrol versi. 3. Sudah jauh lebih baik. Jika Anda tidak menyukai UI, Anda masih dapat menggunakan kustomisasi secara programatik dan melalui perintah interaktif yang menghindari mode kustomisasi untuk mendapatkan semua manfaat lain dari menggunakan kustomisasi.Salah satu keuntungan menggunakan
setq
alih-alihcustomize
adalah keterbacaan. Satu bebas untuk membubuhi keterangan setiap penyesuaian sesuai keinginan seseorang yang IMO meningkatkan keterbacaan. Satu juga dapat mengelompokkan penyesuaian terkait bersama yang meningkatkan modularitas. Akhirnya, saya berpendapat bahwa menavigasi melalui buffer elisp lebih "mudah" daripada menavigasi UI dan widget khusus.Di sisi lain, kustomisasi memungkinkan Anda dengan mudah kembali ke nilai default yang tidak ternilai harganya ketika berbagai hal menjadi berantakan.
EDIT: Jawaban Drew memberikan alasan bagus untuk menggunakan
customize-set-variables
yang dapat memberikan semua keuntungan yang saya tunjukkan. Namun, Customize UI tidak cocok untuk konfigurasi portabel di antara platform yang berbeda semudah yang dilakukan oleh raw elisp. Jika Anda memerlukan variabel untuk memiliki pengaturan tergantung os, Anda harus mundur ke elisp dalam banyak kasus. Maksud saya tentang navigasi yang lebih mudah di buffer elisp masih berdiri.sumber
setq
, cukup berkomentar di luarsetq
baris dan mulai ulang emacs.custom-set-variables
adalah "raw elisp", dan saya menggunakannya setiap hari di banyak mesin. Cukup salin dari tempat di mana kustomisasi menulisnya (jika Anda tidak menulisnya sendiri).Alternatif lain adalah dengan menggunakan John Wiegley ini penggunaan-paket . Ini menyediakan cara terprogram untuk mengonfigurasi paket yang berfungsi baik dengan proses inisialisasi paket emacs 24+. Berikut adalah contoh penggunaan dari readme:
Intinya adalah bahwa paket penggunaan adalah makro dan tidak mengevaluasi argumennya segera. The
:init
dan:config
parameter yang dievaluasi pada berbagai tahap proses inisialisasi, sehingga memungkinkan untuk memiliki konfigurasi masing-masing paket di satu tempat, tetapi memiliki setiap bagian mengeksekusi pada tahap yang sesuai inisialisasi.Tanpa sesuatu seperti
use-package
beberapa paket memerlukan bagian dari kode inisialisasi mereka untuk pergi sebelum(package-initialize)
dan bagian lain untuk mengejar. Jika Anda memiliki banyak paket seperti itu maka inisialisasi mereka harus disisipkan.Manfaat lain
use-package
adalah bahwa ia dapat secara otomatis menginstal paket yang hilang dari menggunakan package.el jika Anda membawa Anda .emacs ke mesin baru atau jika Anda berbagi konfigurasi Anda dengan pengguna lain dan semua inisialisasi dapat ditunda sampai paket benar-benar perlu dimuat.Ada juga argumen kata kunci tambahan yang memungkinkan kontrol lebih besar atas proses inisialisasi.
Semua yang dikatakan, satu keuntungan besar dari menyesuaikan adalah menunjukkan kepada Anda apa yang harus dikonfigurasi dalam paket yang diberikan. Itulah salah satu alasan saya masih menggunakannya untuk banyak paket saya.
sumber
use-package
itu sendiri menawarkan keuntungan dari konfigurasi modularised, dan juga mengimpor dan mengkonfigurasi paket di satu tempat. Tapi ya, contohnya menggunakansetq
. Mungkinkah itu digunakan dicustomize-set-variable
sini? Saya tidak yakin. Bisakah / haruskah kita menukarnya (ataucustomize-set-value
)setq
?:custom
kata kunci.