Hanya untuk mengklarifikasi ... Misalnya, dalam dokumen ini :
Hook adalah variabel Lisp yang menyimpan daftar fungsi, untuk dipanggil pada beberapa kesempatan yang didefinisikan dengan baik. (Ini disebut menjalankan hook.) Fungsi individual dalam daftar disebut fungsi hook dari hook. Misalnya, pengait
kill-emacs-hook
berjalan sesaat sebelum keluar dari Emacs ...
Saya pikir itu mengatakan ada variabel (simbol) bernama kill-emacs-hook
yang mewakili daftar dari set "fungsi kait" yang akan berjalan ketika kill-emacs-hook
dievaluasi, dengan demikian melakukan fungsi-fungsi tersebut. Benar? Kemudian
(add-hook 'text-mode-hook 'auto-fill-mode)
menambah auto-fill-mode
daftar yang diidentifikasi text-mode-hook
selain apa yang sudah ada. Baik. Sekarang ini
(defcustom text-mode-hook nil
"Normal hook run when entering Text mode and many related modes."
:type 'hook
:options '(turn-on-auto-fill flyspell-mode)
:group 'wp)
di mana tampaknya kita sedang membuat atau mengubah text-mode-hook
. Saya sekarang bingung dengan sifat kait dan hubungan mereka dengan defcustom
. Pilihan logis saya adalah bahwa kode ini menciptakan variabel text-mode-hook
yang "tipe" (tidak tahu apa yang dimaksud dengan tipe di elisp) hook
. Apakah ini, memang, seharusnya menjadi ciptaan awal kait text-mode-hook
? Jika demikian, ada apa dengan "opsi?" Apakah itu fungsi kait yang seharusnya, atau yang lainnya?
Jawaban:
Pemahaman Anda tentang gagasan Emacs Lisp tentang kait benar-benar benar. Memang, kait "normal" hanyalah daftar fungsi (setiap fungsi tidak mengambil argumen, kalau tidak biasanya tidak disebut "kait" atau "kait normal" di Emacs Lisp).
Antarmuka kustomisasi adalah hal yang berbeda. Semua perbedaan antara
defvar
dandefcustom
yang terakhir memungkinkan pengguna untuk mengedit variabel melalui antarmuka "kustomisasi". Interface ini dapat memfasilitasi mengedit jenis tertentu data, jadi misalnya jika Anda mengatakan bahwa:type
daritext-mode-hook
inihook
, maka antarmuka kustomisasi memastikan bahwatext-mode-hook
selalu daftar fungsi. Selanjutnya, Anda dapat menentukan opsi mana yang direkomendasikan dengan:options
argumen.Jadi, pemahaman Anda benar dan
defcustom
dan pilihannya hanyalah cara untuk menginstruksikan Emacs, sehingga dapat lebih membantu pengguna ketika dia menggunakan antarmuka "kustomisasi".sumber
defcustom
ini tidak bagus karenatext-mode-hook
sudah ada; sudah termasuk. Baik? Sekarang, jika saya menulis mode saya sendiri dan kemudian menginginkan penyesuaian, saya akan melakukan ini. Kebingungan saya adalah contoh ini benar-benar membuattext-mode-hook
, bukan mengubahnya. Apakah itu pemahaman yang benar? Dan jika ini memang membuat yang barutext-mode-hook
,:options
apakah menawarkan dua fungsi sebagai opsi untuk melakukanadd-hook
ke daftar, kan?defcustom
hanya mendefinisikan variabel baru. Dalam contoh khusustext-mode-hook
ini dibuat dan nilai awalnya adalahnil
. Antarmuka kustomisasi juga diberitahu bahwa nilai yang disarankan untuk ada dalam daftar ini adalahturn-on-auto-fill
danflyspell-mode
. Namun Anda dapat mengaturtext-mode-hook
apa pun yang Anda suka secara terprogram, itu variabel normal. Anda dapat menggunakanadd-hook
dengan fungsi lain juga.(defvar text-mode-hook nil)
.defcustom
cara kait awalnya dibuat? Seperti apa bentuknya. Dengan kata lain contoh ini diambil dari jauh di dalam perut kode Emacs di suatu tempat.