Emacs 25
ดังที่ @YoungFrog กล่าวไว้ในความคิดเห็นซึ่งเริ่มต้นด้วย Emacs 25.1C-h k
วิธีการอธิบายการโยงคีย์แบบเก่าจะบอกคุณว่ามีการค้นพบคีย์แมปใด
ก่อน Emacs 25
มีรหัสบางส่วน
ที่นี่
แต่ไม่สมบูรณ์เนื่องจากไม่ครอบคลุมทุกอย่าง ด้านล่างนี้เป็นรุ่นที่ปรับปรุงแล้ว
คีย์สามารถถูกผูกไว้ได้ 9 วิธี! ขอขอบคุณ @Drew สำหรับลิงค์นี้ (เพิ่มเติมโดยสิ่งนี้ ) ด้วยรายการทั้งหมด ตามลำดับความสำคัญพวกเขาคือ:
overriding-terminal-local-map
ชุดขั้วที่เฉพาะเจาะจงของกุญแจ สิ่งนี้ถูกกำหนดโดยset-transient-map
ฟังก์ชั่น
overriding-local-map
บัฟเฟอร์ท้องถิ่นแผนที่แทนที่ หากตั้งค่ารายการนี้รายการที่ 3–8 จะถูกข้ามไป (อาจเป็นเพราะคุณไม่เห็นหลายรายการ)
- ที่จุดผ่าน
keymap
ข้อความ - propety (ซึ่งสามารถไปกับข้อความจริงหรือบนภาพซ้อนทับ)
- ตัวแปรที่จำลองชุดย่อยที่เป็นไปได้ของโหมดย่อยที่เปิดใช้งาน,
emulation-mode-map-alists
.
- ตัวแปรที่โหมดที่สำคัญสามารถแทนที่ keybinds ของเล็ก ๆ น้อย ๆ
minor-mode-overriding-map-alist
โหมดที่
- ที่เกิดขึ้นจริงเล็กน้อยโหมดซึ่ง keybinds
minor-mode-map-alist
ถูกเก็บไว้ใน
- ที่จุด (อีกครั้ง) ผ่าน
local-map
คุณสมบัติข้อความ หากมีอยู่รายการ 8 จะถูกข้ามไป
- มาตรฐานkeymap บัฟเฟอร์ท้องถิ่น (ที่สำคัญโหมดหรือบัฟเฟอร์ท้องถิ่น keybinds ไป)
current-local-map
ส่งกลับโดยฟังก์ชั่น
- keymap ทั่วโลก
current-global-map
กลับมาโดย
นอกจากนี้ยังมีกึ่งรายการ 10 สิ่งที่พบคำสั่งผ่านขั้นตอนข้างต้นอาจได้รับการ remaped
ฟังก์ชั่นต่อไปนี้จะสอบถามความเป็นไปได้บางอย่าง (โอกาสที่เป็นไปได้มากที่สุด) และส่งคืนหรือพิมพ์ผลลัพธ์
(defun locate-key-binding (key)
"Determine in which keymap KEY is defined."
(interactive "kPress key: ")
(let ((ret
(list
(key-binding-at-point key)
(minor-mode-key-binding key)
(local-key-binding key)
(global-key-binding key))))
(when (called-interactively-p 'any)
(message "At Point: %s\nMinor-mode: %s\nLocal: %s\nGlobal: %s"
(or (nth 0 ret) "")
(or (mapconcat (lambda (x) (format "%s: %s" (car x) (cdr x)))
(nth 1 ret) "\n ")
"")
(or (nth 2 ret) "")
(or (nth 3 ret) "")))
ret))
มีฟังก์ชั่นในตัวสำหรับแต่ละฟังก์ชั่นเหล่านี้ยกเว้นฟังก์ชั่นแรกดังนั้นเราต้องสร้างหนึ่งฟังก์ชั่น
(defun key-binding-at-point (key)
(mapcar (lambda (keymap) (when (keymapp keymap)
(lookup-key keymap key)))
(list
;; More likely
(get-text-property (point) 'keymap)
(mapcar (lambda (overlay)
(overlay-get overlay 'keymap))
(overlays-at (point)))
;; Less likely
(get-text-property (point) 'local-map)
(mapcar (lambda (overlay)
(overlay-get overlay 'local-map))
(overlays-at (point))))))
เนื่องจากคุณกำลังบอกว่าพฤติกรรมนั้นทำงานอยู่เมื่อจุดอยู่ในสิ่งที่แนบมาจึงมีโอกาสที่ดีที่ปุ่มลัดนี้จะวางบนซ้อนทับหรือข้อความคุณสมบัติ
หากวิธีนี้ใช้ไม่ได้ผลให้ลองใช้คำสั่งต่อไปนี้เช่นกัน M-x
keymaps-at-point
เพียงแค่วางเคอร์เซอร์บนสิ่งที่แนบมาและทำ
(defun keymaps-at-point ()
"List entire keymaps present at point."
(interactive)
(let ((map-list
(list
(mapcar (lambda (overlay)
(overlay-get overlay 'keymap))
(overlays-at (point)))
(mapcar (lambda (overlay)
(overlay-get overlay 'local-map))
(overlays-at (point)))
(get-text-property (point) 'keymap)
(get-text-property (point) 'local-map))))
(apply #'message
(concat
"Overlay keymap: %s\n"
"Overlay local-map: %s\n"
"Text-property keymap: %s\n"
"Text-property local-map: %s")
map-list)))
Searching Keymaps
โหนด ดูเพิ่มเติมโหนดและFunctions for Key Lookup
Active Keymaps