Emacs 25
Như @YoungFrog đã đề cập trong các bình luận, bắt đầu với Emacs 25.1 , C-h k
phương pháp mô tả các liên kết khóa cũ cũng sẽ cho bạn biết sơ đồ phím nào được tìm thấy.
Trước Emacs 25
Có một số mã
ở đây
về điều này, nhưng nó không đầy đủ vì nó không bao gồm mọi thứ. Dưới đây là một phiên bản cải tiến của nó.
Khóa có thể được ràng buộc theo 9 cách (!). Cảm ơn @Drew cho liên kết này (cũng được bổ sung bởi điều này ) với danh sách đầy đủ. Theo thứ tự ưu tiên, chúng là:
- Một bộ khóa dành riêng cho thiết bị đầu cuối ,
overriding-terminal-local-map
. Điều này được xác định bởi set-transient-map
chức năng.
- Một bản đồ ghi đè bộ đệm cục bộ ,
overriding-local-map
. Nếu cái này được đặt, các mục 3 Ném8 sẽ bị bỏ qua (có thể là lý do tại sao bạn không thấy nhiều thứ này).
- Tại điểm thông qua
keymap
văn bản-propety (có thể đi trên văn bản thực tế hoặc trên lớp phủ).
- Một biến về cơ bản mô phỏng các bộ chế độ nhỏ được kích hoạt khác nhau có thể ,
emulation-mode-map-alists
.
- Một biến trong đó các chế độ chính có thể ghi đè các tổ hợp phím của chế độ phụ ,
minor-mode-overriding-map-alist
.
- Các chế độ nhỏ thực tế , có bàn phím được lưu trữ trong
minor-mode-map-alist
.
- Tại điểm (một lần nữa), thông qua các thuộc tính
local-map
văn bản. Nếu điều này tồn tại, mục 8 được bỏ qua.
- Sơ đồ bàn phím đệm cục bộ tiêu chuẩn (trong đó các phím bàn phím chế độ chính hoặc đệm cục bộ đi), được trả về bởi hàm
current-local-map
.
- Các sơ đồ toàn cầu , được trả lại bởi
current-global-map
.
Ngoài ra còn có một mục bán 10. Bất kỳ lệnh nào được tìm thấy thông qua quy trình trên cũng có thể đã được khắc phục.
Hàm sau truy vấn một số khả năng này (khả năng cao nhất) và trả về hoặc in kết quả.
(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))
Có các hàm dựng sẵn cho mỗi hàm này ngoại trừ hàm đầu tiên, vì vậy chúng ta phải tạo một hàm (cũng là phiên bản cải tiến của mã được liên kết ở trên).
(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))))))
Vì bạn đang nói rằng hành vi được kích hoạt khi điểm nằm trên tệp đính kèm, rất có thể khóa phím này diễn ra trên lớp phủ hoặc thuộc tính văn bản.
Nếu điều đó không làm việc , hãy thử lệnh sau đây. Chỉ cần đặt con trỏ trên tệp đính kèm và làm 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
. Xem thêm các nútFunctions for Key Lookup
vàActive Keymaps
.