Saya ingin menyesuaikan cc-mode
untuk menjalankan fungsi sebelum menyimpan. Salah satu solusinya adalah memodifikasi cc-mode
keymap untuk mengikat C-x C-s
ke fungsi yang melakukan pekerjaan yang saya butuhkan dan kemudian menyimpannya.
Pertanyaan saya adalah apakah ada kait yang bisa saya sesuaikan untuk ini? The CC Hooks docs tidak menyebutkan before-save-hook
secara khusus untuk cc-mode
. Bagaimana ini harus dilakukan melalui hook?
Atau, bagaimana saya melakukan ini defadvice
? Dari membaca manual, satu-satunya cara saya bisa melihat adalah mengaktifkan saran sebelum menyimpan dan kemudian menonaktifkan setelah pekerjaan selesai. Ini terdengar rumit. Apa yang akan menjadi cara idiomatik menggunakan advice
s?
before-save-hook
dapat memeriksa mode utama saat ini (mis.(eq major-mode ...)
) Dan tidak melakukan apa-apa jika tidak cocok dengan mode yang Anda sesuaikan.haskell-mode
memiliki setidaknya satuafter/before-save
kait dan saya berasumsi ini adalah praktik standar untuk prog-mode.after-save-hook
; Anda dapat menggunakan jenis prosedur yang sama tetapi sebagai gantinyabefore-save-hook
.Jawaban:
Salah satu cara yang cukup umum untuk membatasi aksi hook ke mode utama tertentu adalah dengan memeriksa nilainya
major-mode
.Misalnya, kait ini mencetak pesan sebelum menyimpan buffer menggunakan
c++-mode
:Sebagai catatan tambahan: terkadang berguna untuk memeriksa apakah mode utama diturunkan dari Mode CC; kita dapat melakukan ini dengan memeriksa apakah
c-buffer-is-cc-mode
tidaknil
:sumber
Atau, gunakan pengait lokal:
Hal ini menambah
MY-HOOK-FUNC
ke buffer lokalbefore-save-hook
dari setiap buffer C ++ Mode, atau penyangga dalam mode berasal dari C ++ Mode.Saya menemukan ini lebih elegan yang secara eksplisit memeriksa
major-mode
, dan memiliki keuntungan bahwa Anda dapat menonaktifkanbefore-save-hook
secara lokal untuk setiap bufferM-: (remove-hook 'before-save-hook MY-HOOK-FUNC 'local)
tanpa mempengaruhi buffer lainnya.sumber
Saya pernah membutuhkan sesuatu seperti itu untuk kompilasi otomatis file elisp saya ketika disimpan, saya menggunakan pendekatan seperti ini (mengubah pendekatan ke mode cc):
sumber
c-mode-common-hook
? Kedua, sepertinya akan menambah fungsibefore-save-hook
saat pertama kali Anda memasukkanC
bahasa yang terkait, tetapi kemudian fungsi itu akan dipanggil sebelum setiap penyimpanan di setiap buffer. Yang perlu OP lakukan adalah menjalankan fungsi kondisional pada buffer dalam mode tertentu (lihat komentar @ Constantine untuk caranya).