Jika Anda ingin membagi custom-set-variables
Anda, tetapi menginginkan sesuatu yang lebih ringan dari initsplit.el
, cobalah ini:
(defmacro custom-set-variable (var value)
"Call `custom-set-variables' with a warning shown
when customizing using the customize GUI.
XXX: does not support setting the optional NOW and
REQUEST (dependency) fields."
(custom-set-variables
;; `load-file-name' is set by `load-file':
;; http://stackoverflow.com/a/1971376/470844
`(,var ,value nil nil
,(format "!!! CAREFUL: CUSTOM-SET IN %s !!!" load-file-name))))
Sekarang, letakkan modul konfigurasi Anda di file terpisah, dan muat dengan load-file
di ~/.emacs
Anda, seperti yang disarankan orang lain. Di setiap modul konfigurasi, gunakan
(custom-set-variable var value)
alih-alih
(custom-set-variables '(var value))
or
(setq-default var value)
saat mengatur variabel yang dikelola dengan menyesuaikan. Kemudian, jika Anda perlu menyesuaikan variabel menggunakan antarmuka penyesuaian, Anda akan melihat peringatan yang memberi tahu Anda di file mana penyesuaian tersebut harus disimpan:
"!!! CAREFUL: CUSTOM-SET IN <path to module file> !!!"
Jika Anda mengontrol versi file konfigurasi Anda, maka diff akan memberi tahu baris mana dari ~/.emacs
Anda yang akan dipindahkan ke modul khusus.
Diskusi masalah dengan naif menggunakan beberapa panggilan custom-set-variables
: http://www.dotemacs.de/custbuffer.html
Sunting: Respons terhadap pertanyaan Alan
Masalah yang dipecahkan oleh makro custom-set-variable
di atas
Antarmuka penyesuaian di Emacs menyimpan semua variabel kumpulan khusus di ~/.emacs
Anda setiap kali Anda mengedit variabel kumpulan khusus apa pun. Jika Anda memodulasi variabel set kustom Anda, dengan menyebarkannya ke beberapa file, maka Anda perlu menyadari kapan emacs menyisipkan pengaturan duplikat di .emacs Anda, dan menghapusnya. Makro custom-set-variable
di atas membantu Anda melakukan ini.
Contoh nyata dari file konfigurasi saya
Saya mengatur variabel khusus yang terkait dengan spasi dalam file ~/.emacs.d/extensions/whitespace.el
yang dimuat oleh ~/.emacs
. Misalnya, saya menyetel search-whitespace-regexp
seperti ini:
(nc:custom-set-variable search-whitespace-regexp "[ \t\r\n]+")
Sekarang, ada dua hal yang terjadi. Pertama, ketika saya menemukan variabel itu di antarmuka penyesuaian, saya mendapat peringatan:
![Peringatan yang dihasilkan dalam dialog penyesuaian Emacs](https://i.stack.imgur.com/KDJMX.png)
Kedua, jika saya mengedit variabel apa pun menggunakan antarmuka penyesuaian, ~/.emacs
saya membuatnya sangat jelas bahwa saya telah membayangi beberapa definisi. Misalnya, setelah mengubah search-whitespace-regexp
dan global-whitespace-mode
di antarmuka penyesuaian, saya mendapatkan:
$ svn di --diff-cmd "diff" -x "-U0" ~/v/conf
Index: /home/collins/v/conf/dot.emacs
===================================================================
--- /home/collins/v/conf/dot.emacs (revision 267)
+++ /home/collins/v/conf/dot.emacs (working copy)
@@ -55,0 +56 @@
+ '(agda2-include-dirs (\` ("." (\, (file-truename "~/local/opt/agda-std-lib/src")))) nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/agda.el !!!")
@@ -58,0 +60,3 @@
+ '(global-whitespace-mode t)
+ '(indent-tabs-mode nil nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
+ '(indicate-empty-lines t nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
@@ -72,0 +77 @@
+ '(search-whitespace-regexp "" nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
@@ -74,0 +80 @@
+ '(tab-width 2 nil nil "!!! CAREFUL: CUSTOM-SET IN /home/collins/.emacs.d/extensions/whitespace.el !!!")
Makro tidak membantu saya mengingat bahwa saya mengubah search-whitespace-regexp
, hanya saja sudah disetel di tempat lain, tetapi makro membantu saya mengetahui pengaturan variabel mana yang harus saya hapus dari ~/.emacs
saya (semua yang memiliki peringatan), dan mana yang harus saya tinggalkan. ~/.emacs
saya, atau pindah ke file terpisah lainnya (semuanya tanpa peringatan).
Kesimpulan
Makro mungkin berlebihan, tetapi begitu ada, makro ini mudah digunakan, dan membuatnya lebih mudah untuk menghindari kesalahan dengan variabel set kustom yang dibayangi.
person
ntc2
schedule
10.06.2012