Saya telah mengembalikan kunci 'd' gnus-article-mode
, tetapi perilaku lamanya masih aktif saat titik ada pada lampiran. Saya bisa melihat bahwa pemberontakan itu tidak berpengaruh di sana dengan melakukan C-h k d
, tetapi tidak memberi tahu saya apa keymap yang berlaku pada saat itu, sehingga saya dapat membaliknya.
Apakah ada cara untuk mengetahuinya?
Ini adalah contoh yang tepat: Saya menggunakan kejahatan, dan saya ingin artikel berada dalam mode gerak. Untuk tata letak keyboard saya, saya telah mengkonfigurasi sebagai tombol untuk naik.
(evil-mode 1)
(add-to-list 'evil-motion-state-modes 'gnus-article-mode)
(setq evil-emacs-state-modes (remove 'gnus-article-mode evil-emacs-state-modes))
(define-key evil-motion-state-map "d" 'evil-previous-line)
Untuk memastikan kunci kejahatan diperhitungkan, saya membatalkan kunci kunci gnus di peta lokal:
(defun as/alter-article-evil-map ()
(local-unset-key "d"))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
Sayangnya, saat titik berada pada lampiran, tombol 'd' tidak lagi naik tetapi menawarkan saya untuk menghapus lampiran. Saya kira pengikatan lain aktif pada saat itu, maka pertanyaannya.
Solusi Saya menggunakan di keymaps-at-point
bawah ini untuk menemukan keymap yang digunakan adalah dari properti teks. Saya kemudian melihat kode fungsi terikat untuk menemukan nama keymap gnus-mime-button-map
. Kode berikut melakukan apa yang saya inginkan:
(defun as/alter-article-evil-map ()
(define-key gnus-mime-button-map "d" nil))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
sumber
Searching Keymaps
. Lihat juga nodeFunctions for Key Lookup
danActive Keymaps
.Jawaban:
Emacs 25
Seperti yang disebutkan oleh @YoungFrog dalam komentar, dimulai dengan Emacs 25.1 ,
C-h k
metode lama yang bagus untuk menggambarkan key-bind juga akan memberi tahu Anda keymap mana kunci tersebut ditemukan.Sebelum Emacs 25
Ada beberapa kode di sini tentang ini, tetapi tidak lengkap karena tidak mencakup semuanya. Di bawah ini adalah versi yang disempurnakan.
Kunci dapat diikat dengan 9 (!) Cara. Terima kasih kepada @Drew untuk tautan ini (juga dilengkapi dengan ini ) dengan daftar lengkap. Atas perintah diutamakan, mereka adalah:
overriding-terminal-local-map
,. Ini ditentukan olehset-transient-map
fungsi.overriding-local-map
,. Jika ini disetel, item 3–8 dilewati (mungkin mengapa Anda tidak melihat banyak dari ini).keymap
propety teks (yang bisa pergi pada teks aktual atau overlay).emulation-mode-map-alists
,.minor-mode-overriding-map-alist
,.minor-mode-map-alist
.local-map
properti teks. Jika ini ada, item 8 dilewati.current-local-map
.current-global-map
.Ada juga semi-item 10. Perintah apa pun yang ditemukan melalui prosedur di atas mungkin juga telah dipetakan kembali.
Fungsi berikut menanyakan beberapa kemungkinan ini (yang paling mungkin), dan mengembalikan atau mencetak hasilnya.
Ada fungsi bawaan untuk masing-masing fungsi ini kecuali yang pertama, jadi kita harus membuatnya (juga versi yang ditingkatkan dari kode yang ditautkan di atas).
Karena Anda mengatakan perilaku aktif saat titik ada pada lampiran, ada kemungkinan keybind ini terjadi pada overlay atau properti teks.
Jika itu tidak berhasil , coba perintah berikut juga. Cukup tempatkan kursor pada lampiran, dan lakukan
M-x
keymaps-at-point
.sumber
k runs the command gnus-summary-kill-same-subject-and-select (found in gnus-summary-mode-map), which is (...)
Itu tentang:
Misalnya untuk
(my-lookup-key (kbd "C-c v v"))
saya dapatkan daftar di*Message*
buffer:Pendekatan ini berguna untuk mencari sub-keymap yang termasuk dalam keymap tingkat yang lebih tinggi, misalnya keluaran dari:
adalah
vc-prefix-map
yang termasuk ke dalamglobal-map
:Jika Anda memodifikasi kondisi pemfilteran untuk menyertakan
keymapp
- Anda akan dapat mencari awalan:Jadi
rst-mode-map
akan ditemukan pada keduanya:sumber
Saya menyadari bahwa yang berikut ini tidak menjawab pertanyaan tentang Bagaimana saya bisa mengetahui keymap yang mana , namun ini berkaitan dengan masalah mendasar dalam hal ini tentang bagaimana memastikan bahwa
d
kunci tersebut berperilaku sesuai dengan yang diinginkan pengguna. Jika lebih disukai, saya dapat menghapus jawaban ini dan mengubahnya menjadi pertanyaan + jawaban lain mengenai masalah itu.Sebagai metode untuk mengganti
text-property/overlay
peta, Anda harus dapat menggunakan:Sesuai Mengontrol Peta Aktif ,
overriding-local-map
didahulukan dari setiap peta aktif lainnya selainoverriding-terminal-local-map
.sumber
emacs-buttons menyediakan
buttons-display
, yang dengan argumen awalan menampilkan visualisasi rekursif dari semua binding saat ini.(Penafian: Saya penulis paket)
sumber