Emacs 24.4 hadir dengan sistem saran baru. The NEWS
berkas mengatakan:
** Paket baru
nadvice.el
menawarkan fasilitas saran yang lebih ringan. Itu berlapis sebagai:***
add-function
/remove-function
, yang dapat digunakan untuk menambah / menghapus kode di sembarang tempat pembawa fungsi, seperti filter proses atau<foo>-function
kait.***
advice-add
/advice-remove
untuk menambah / menghapus saran tentang fungsi bernama, sepertidefadvice
halnya.
T: Apa manfaat dan implikasi praktis dari paket baru ini?
Saya khususnya tertarik pada jawaban yang membahas hal-hal berikut:
Jika saya hanya menggunakan saran untuk mengkustomisasi Emacs (bukan menulis paket tambahan), apakah saya perlu beralih ke sistem baru? Apakah ini akan menggantikan sistem lama di beberapa titik?
Apa sebenarnya yang bisa saya lakukan dengan sistem baru yang tidak dapat saya capai
defadvice
?Apa pentingnya bisa "menambah / menghapus kode di sembarang tempat pembawa fungsi"?
:around
saran (:filter-args
atau:filter-result
saran) untuk mendapatkan efek yang sama.Salah satu manfaat jelas dari saran adalah fungsi normal adalah Anda dapat mengunjungi definisi dengan
find-function
.Saat ini, ketika melihat bantuan untuk fungsi yang disarankan (gaya baru), ia menyediakan tautan ke bantuan untuk fungsi saran, dan dari sana tautan ke sumber (seperti biasa untuk bantuan fungsi).
Sistem lama menyediakan saran yang mendokumentasikan, tetapi tidak ada cara untuk melihat kode (biasanya saya terpaksa
rgrep
).(Secara pribadi saya ingin melihat campuran dari pendekatan lama dan baru untuk menampilkan bantuan, karena saya suka memiliki inline docstring, tapi saya yakin itu mungkin di jalurnya.)
sumber
defadvice
halnya. Lihat laporan bug Emacs ini . Ini kekurangan.Dari header file:
Ketika saya membacanya, tujuan utama adalah menjadi lebih sederhana daripada sistem saran lama, bukan untuk memiliki lebih banyak kemampuan. Membaca dokumen, tampaknya
advice-add
berisi subset daridefadvice
fungsionalitas, sementaraadd-function
berisi beberapa fungsionalitas yang bagus untuk menasihati fungsi-fungsi non-tradisional seperti filter proses (yang mungkin mungkin dengandefadvice
, tapi saya tidak yakin bagaimana).Sejauh yang saya tahu,
defadvice
tidak secara resmi ditinggalkan sehingga Anda harus merasa bebas untuk tetap menggunakannya untuk saat ini (dan jika Anda seorang pembuat paket, Anda mungkin ingin terus menggunakannya sampai 24.4 menjadi lebih banyak diadopsi). Namun, sepertinya penulis Emacs ingin bermigrasi sepenuhnya ke sistem baru pada akhirnya, jadi mungkin masuk akal untuk perlahan-lahan beralih.sumber
defadvice
luar sana (dan akan terus ada).Satu hal yang belum saya lihat disebutkan di sini - meskipun dalam beberapa hal itu adalah karena pendekatan yang lebih sederhana (modularitas yang lebih baik dan "lem") dari sistem saran "baru", yang telah disebutkan dalam jawaban lain - adalah ini: lebih mudah untuk menambahkan, menggabungkan, menghapus, menyusun ulang , dll. saran saran.
Bahkan mungkin untuk melakukannya secara interaktif, dinamis, meskipun nadvice membutuhkan sedikit bantuan untuk memfasilitasi ini. Saya tidak mengetahui penggunaan lain dari nadvice dengan cara ini (komposisi saran interaktif), tetapi setidaknya ada satu aplikasi seperti itu. Saya memanfaatkannya di Isearch + , untuk memungkinkan Anda menambah dan menghapus kombinasi predikat filter Isearch arbitrer (filter) saat mencari.
TKI, sama seperti Anda mengubah pola pencarian Anda secara bertahap, sehingga Anda dapat mempersempit pencarian Anda dengan cepat menggunakan beberapa filter.
Penyaringan isearch dilakukan menggunakan variabel
isearch-filter-predicate
, yang telah tersedia cukup lama sekarang. Namun filter Isearch tidak sering didefinisikan. Mereka biasanya statis dan sudah ditentukan sebelumnya untuk konteks tertentu (misalnya Wdired). Tidak mudah bagi pengguna untuk mendefinisikan dan menggunakannya, setidaknya secara interaktif.Hanya ada satu variabel,
isearch-filter-predicate
sehingga mengubah penyaringan benar-benar berarti mengubah satu saringan predikat tunggal, yang berjumlah menyusun fungsi, menggabungkan predikat, untuk mempersempit, memperluas, atau memodifikasi pencarian.Tapi itulah yang harus dilakukan nadvice. Singkatnya, nadvice sangat berguna untuk menggabungkan fungsi-fungsi yang dapat memudahkan penyaringan pencarian secara interaktif . (Lihat Penyaringan Pencarian dinamis untuk lebih lanjut tentang ini.)
sumber