Saya telah mengalami beberapa situasi di mana akan sangat mudah untuk memiliki keymap dari satu tindakan modus utama sebagai keymap mundur untuk mode utama lainnya. Misalnya:
- Saya menulis banyak LaTeX di beberapa dokumen org saya, jadi alangkah baiknya memiliki
latex-mode
perintah yang mudah tersedia saat mengeditorg-mode
. - Saya sering menggunakan ruang irc dengan dukungan Markdown, jadi alangkah baiknya
markdown-mode
jika ditambahkan keybindserc-mode
.
Dalam kedua kasus, keymap tambahan ini harus bertindak sebagai fallback (ini sebabnya saya tidak bisa hanya menggunakan mode minor untuk ini). Saya tidak ingin perintah lateks untuk menimpa org-mode
kunci apa pun . Yang saya inginkan adalah:
Jika kunci didefinisikan dalam latex-mode-map
DAN itu tidak didefinisikan di
org-mode-map
kemudian gunakan latex-mode-map
penjilidan .
T: Bagaimana saya bisa mengatur keymap sebagai fallback keymap untuk mode-utama?
ATAU
T: Bagaimana cara menyalin kunci dari satu mode-besar-peta ke yang lain, tanpa mengabaikan apa pun?
Untuk lebih jelasnya. Saya tahu saya bisa mendefinisikan kunci ini satu per satu, tetapi akan jauh lebih nyaman untuk memiliki solusi otomatis.
sumber
make-composed-keymap
.Jawaban:
Ini ternyata lebih sederhana dari yang diharapkan. Seperti yang disarankan dalam komentar di sini dan di pertanyaan:
Ini akan membuat keymap yang merupakan salinan
erc-mode-map
tetapi yang juga mewarisi darimarkdown-mode-map
. Jadi semuamarkdown
kunci akan dibayangi setiap kali mereka bertabrakan denganerc
kunci.Jika Anda tidak ingin beberapa kunci dari keymap fallback untuk lebih cemerlang dr kemap utama, hanya menonaktifkan mereka dalam satu utama.
sumber
define-key
nilai pengembalianmake-composed-keymap
dapat memiliki efek samping yang tidak terduga pada kartu kunci asli, dan saya menduga hal yang sama berlaku untukappended
peta ini secara manual . Jika Anda ingin menggunakandefine-key
, sepertinya paling aman untuk membuat keymap baru yang induknya keymap adalah keymap tersusun.(define-key erc-mode-map "\C-c\C-s" nil)
,markdown-mode
kunci yang sesuai masih akan tersedia bahkan dalam buffer erc.make-composed-keymap
dokumentasi mengatakan "sebuah nihil mengikat dalam MAPS menimpa setiap sesuai mengikat dalam INDUK, tetapi tidak mengesampingkan sesuai binding di keymap lain MAPS." Seperti halnyamarkdown-mode-map
ORANGTUA dalam contoh Anda, saya berharapnil
ikatan itu akan menghambat ikatan penurunan harga?(make-composed-keymap (list erc-mode-map markdown-mode-map))
akan memiliki efek yang Anda gambarkan, namun?cl-copy-list
tidak akan benar-benar melakukan apa yang Anda inginkan. Jika Anda ingin menyalin keymap, maka Anda seharusnya sudah menggunakannyacopy-keymap
.Seperti yang disebutkan oleh @Malabarba, Anda dapat menggunakannya
make-composed-keymap
untuk itu. Tetapi jika Anda benar-benar ingin keymap baru untuk mewarisi dari kedua keymap, sehingga memodifikasi keymap baru tidak mempengaruhi salah satu dari dua keymap lainnya, Anda perlu melakukannya dalam dua langkah:Ini karena
define-key
kadang-kadang dapat memodifikasi peta yang dilewati sebagai argumen pertamamake-composed-keymap
tetapi tidak yang dilewatkan sebagai yang kedua. Saya kira Anda harusM-x report-emacs-bug
dan meminta yangmake-composed-keymap
menerima daftar keymaps sebagai argumen kedua, jadi Anda bisa melakukannyasumber