Seperti dalam variabel mode-line-modified
bawaan yang menampilkan tanda bintang di baris mode jika buffer diubah.
Secara khusus, saya ingin hl-line-mode
mematikan ketika buffer dimodifikasi dan hidup ketika tidak.
Saya telah membaca dokumentasi tentang "Ubah Hooks", tetapi saya ingin hl-line-mode
beralih ketika saya membatalkan perubahan seperti tanda garis mode.
hooks
buffer-modified
pengasuh
sumber
sumber
after-change-functions
danfirst-change-hook
. Jika, karena alasan tertentu, membatalkan dari buffer yang dimodifikasi ke buffer yang tidak dimodifikasi tidak dihitung sebagai "perubahan" untuk kait ini, Anda dapat menyarankanundo
untuk melakukan sakelar.buffer-modified-p
untuk menguji apakah suatu modifikasi telah terjadi. Saya menggunakanafter-save-hook
danfirst-change-hook
untuk mengaktifkan indikator yang dimodifikasi di tabbar saya.post-command-hook
memeriksabuffer-modified-p
.Jawaban:
Membangun komentar, berikut adalah dua cara untuk mencapai apa yang Anda coba lakukan. (Tidak diuji secara luas, jadi YMMV.)
Pilihan 1:
post-command-hook
Buat fungsi yang menguji apakah buffer diubah atau tidak, lalu kaitkan ke
post-command-hook
:Keuntungannya adalah sangat sederhana. Kerugiannya adalah bahwa Emacs akan menjalankan tes ini setelah setiap perintah tunggal , yang sepertinya berlebihan.
Opsi 2:
first-change-hook
,after-save-hook
, danundo
Buat fungsi untuk
hl-line-mode
mematikan dan menghubungkannyafirst-change-hook
. Buat fungsi untuk menghidupkanhl-line-mode
dan menghubungkannyaafter-save-hook
. Berikanafter
saran tentangundo
hal itu yang dihidupkanhl-line-mode
ketika membatalkan mengembalikan buffer ke keadaan yang tidak dimodifikasi:Keuntungannya adalah ia jarang memanggil fungsi-fungsi ini daripada setiap perintah. Kerugiannya adalah Anda harus mempelajari saran, dan mungkin ada cara lain yang tidak diantisipasi untuk mendapatkan penyangga ke kondisi yang tidak dimodifikasi yang tidak memicu langkah "
hl-line-mode
kembali".sumber
post-command-hook
.revert-buffer
Sepertinya kasus umum lain yang akan menempatkan buffer ke keadaan yang tidak dimodifikasi. Anda dapat menggunakanafter-revert-hook
untuk menangani yang ini.after-change-major-mode-hook
?add-hook
memilikilocal
parameter, jadi jika Anda hanya ingin mengganti perilaku dalam mode atau buffer utama tertentu, Anda bisa.