Dari waktu ke waktu saya mengamati perilaku tak terduga saat mengedit teks. Sumber pertama saya biasanya digunakan C-h k
untuk mencari tahu fungsi apa yang dipanggil oleh urutan kunci yang diberikan. Namun, kadang-kadang dokumentasi bertentangan dengan perilaku yang diamati. Dalam kasus ini, saya biasanya berasumsi bahwa beberapa paket lain telah terhubung ke fungsi atau urutan tombol itu dan memodifikasi perilakunya.
Bagaimana saya bisa mengetahui fungsi mana yang terhubung ke urutan kunci saya?
Salah satu contoh yang saya temui baru-baru ini adalah saya menekan "tombol dan tanda kutip dimasukkan pada awal dan akhir wilayah aktif. Saya memiliki kecurigaan bahwa ini bukan perilaku Emacs default, jadi saya biasanya C-h k "
mencari tahu fungsi apa yang sebenarnya dipanggil.
The describe-key
dokumentasi mengatakan kepada saya bahwa fungsi self-insert-command
itu dipanggil, yang built-in fungsi. Singkatnya, setelah beberapa percobaan dan kesalahan, saya dapat menentukan bahwa perilaku tersebut disebabkan oleh electric-pair-mode
. Di masa depan, apakah ada cara yang lebih cepat untuk sampai pada kesimpulan ini daripada mematikan paket yang dicurigai satu per satu sampai menemukan pelakunya?
electric-pair-mode
diaktifkan hanya dalam beberapa mode utama? Apakah Anda masih melihatself-insert-command
untuk"
ketika Anda melakukanC-h k
sementaraelectric-pair-mode
aktif?electric-pair-mode
berfungsi dengan menghubungkan kepost-self-insert-hook
, dan bukan dengan mengubah keybinding.C-h k
memberi tahu Anda dengan tepat apa yang terjadi pada penekanan tombol. Jika Anda melihat dokumentasi untukself-insert-command
, itu sangat jelas mengatakanpost-self-insert-hook
dijalankan setelah perintah selesai.after-change-functions
seperti Jordon menyebutkan dalam jawabannya? Dokumentasi untuk suatu fungsi mungkin tidak akan secara khusus menyebutkan kaitan itu, bukan?C-h k
+ kait standar == perilaku lengkap (lebih atau kurang). Tentu saja kadang-kadang meninggalkan banyak kemungkinan, tetapi masih jauh lebih transparan daripada sistem perangkat lunak kompleks lainnya yang saya tahu.Jawaban:
Tidak ada cara mudah untuk mengetahui dengan tepat apa yang akan dilakukan dengan menekan satu tombol.
Jika Anda melihat perilaku tambahan selalu periksa kait umum. Lihat daftar di sini: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html
Dalam kebanyakan kasus yang penting adalah:
Anda harus memeriksa kait-kait itu dan melihat ke fungsi-fungsi yang dikandungnya untuk melihat mana yang mengubah perilaku Anda.
Jika fungsi dalam kait ini tidak sepenuhnya menggambarkan perilaku yang diamati, periksa fungsi untuk saran yang akan muncul dalam dokumentasi mereka dari
describe-function
.Sunting: Saya telah menulis beberapa fungsi untuk membantu mendeskripsikan sebuah kait lebih baik daripada melalui fungsi satu per satu: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb Anda dapat menggunakan yang
describe-hook
didefinisikan di sana seperti fungsi uraian lainnya. Ini adalah contoh dari outputnya:Dan ini semua kodenya, kalau-kalau intinya menghilang:
sumber
documentation
diperbarui untuk mencerminkan.Mungkin bukan jawaban lengkap untuk pertanyaan Anda, tetapi paket
helm-descbinds
membantu Anda mencari semua ikatan keyboard yang ditentukan dari representasi ascii dari pintasan. Untuk setiap klik, ini menunjukkan kepada Anda fungsi interaktif yang terkait dengan pintasan keyboard, dan Anda dapat memintahelm-descbinds
untuk menggambarkannya , atau menjalankannya langsung dari hasil pencarian.Berikut ini deskripsi paket dari situs GitHub:
sumber
C-h b
. Satu-satunya harapan saya adalah bahwa saya dapat melompat ke item dalam daftar dengan memasukkan urutan kunci yang sebenarnya daripada mengetikC
-
c
_
C
-
p