Saya mulai mengkode mode minor untuk memberikan beberapa keybindings. Upaya awal saya salah ketik:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(([b] . 'previous-line)))
Saya berniat untuk menggunakan b
kunci, dan segera menyadari bahwa saya harus menggunakan "b"
bukan [b]
. Jadi saya mendefinisikan kembali mode minor:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(("b" . 'previous-line)))
Namun, ini tidak berhasil. Ini membuat saya mengejar angsa liar melalui semua berbagai cara mengikat kunci (yaitu, (kbd ...), [...], dll). Akhirnya saya menyadari bahwa hanya mengevaluasi ulang (define-minor-mode ...)
formulir itu tidak mengubah apa pun, saya terjebak dengan peta kunci yang asli dan rusak. Saya kemudian mencoba mengubah keymap secara langsung melalui (define-key borked-mode-map ...)
dan masih tidak bisa mendapatkan keymap yang diperbaiki. Akhirnya saya me-restart Emacs, dan mode minor saya dimuat dengan benar.
Pertanyaan saya adalah: bagaimana Anda memperbarui definisi mode minor saat Anda mengembangkannya? Apakah ada cara untuk menghapus definisi yang rusak, atau Anda harus me-restart emacs untuk membersihkan bit yang rusak?
sumber
defvar
tidak akan mengevaluasi nilainya lagi setelahC-M-x
:) Anda perludefparameter
atau terpisahsetf
.define-minor-mode
makro: memanggildefvar
untuk menentukan peta. Mengevaluasi defvar itu untuk kedua kalinya tidak berpengaruh.C-M-x
(eval-defun
) untuk mengevaluasi kembalidefvar
variabelnya diperbarui. Ini adalah kasus khusus dieval-defun
; jika Anda meneleponeval-buffer
ataueval-region
kemudian nilai yang ada tidak berubah.C-M-x
padadefvar
formulir hanya memperbarui variabel peta mode itu sendiri. Anda juga harusC-M-x
padadefine-minor-mode
formulir untuk mengubah peta yang 'terpasang' ke mode minor. Saya mencoba mencari tahu mengapa dengan memperluas makro, tetapi itu di luar kemampuan saya.