Emacs 25
Yorumlarda @YoungFrog tarafından belirtildiği gibi, Emacs 25.1 ile başlayarak , anahtar bağları C-h k
tanımlamanın eski usulü size anahtarın hangi anahtar eşlemede bulunduğunu da söyleyecektir.
Emacs öncesi 25
Bununla ilgili bazı kodlar
var
, ancak her şeyi kapsamadığı için eksik. Aşağıda bunun geliştirilmiş bir versiyonu var.
Anahtarlar 9 (!) Şekilde bağlanabilir. Teşekkür için @Drew için bu linke (ayrıca tarafından desteklenen bu tam listesi ile birlikte). Öncelik sırasına göre, bunlar:
- Bir terminale özgü tuş takımı
overriding-terminal-local-map
,. Bu set-transient-map
işlev tarafından tanımlanır .
- Tampon-yerel geçersiz kılma haritası
overriding-local-map
. Eğer bu ayarlanmışsa, 3-8 arasındaki öğeler atlanır (muhtemelen neden çoğunu görmüyorsunuz).
- Noktada aracılığıyla
keymap
metin Mülkiyet (gerçek metin üzerinde ya da bindirmeleri gidebiliriz olan).
- Esasen etkin minör-modları farklı olası setleri taklit Bir değişken,
emulation-mode-map-alists
.
- Büyük modların küçük modların ana bağlarını geçersiz kılabileceği bir değişken
minor-mode-overriding-map-alist
,.
- Tuşları saklanan gerçek küçük modlar
minor-mode-map-alist
.
- Noktada (tekrar),
local-map
text özelliği ile. Bu varsa, madde 8 atlanır.
- İşlev tarafından döndürülen standart arabellek yerel anahtar haritası (ana mod veya arabellek yerel tuşlarının gittiği yer)
current-local-map
.
- Küresel tuş eşleşmesi , döndürdüğü
current-global-map
.
Ayrıca yarı öğe 10 da var. Yukarıdaki prosedürde bulunan her ne olursa olsun, yine de yeniden gönderilmiş olabilir.
Aşağıdaki işlev , bu olasılıkların bazılarını (en muhtemel olanları) sorgular ve sonucu döndürür veya yazdırır.
(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))
Bunların her biri için ilki hariç yerleşik işlevler vardır, o yüzden bir tane oluşturmalıyız (ayrıca yukarıda bağlanan kodun geliştirilmiş bir versiyonunu da).
(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))))))
Nokta bir ek üzerindeyken davranışın etkin olduğunu söylediğiniz için, bu tuş bağlantısının bir bindirme veya metin özelliği üzerinde gerçekleşmesi iyi bir ihtimaldir.
Bu işe yaramazsa , aşağıdaki komutu da deneyin. Sadece imleci ekin üzerine getirin ve yapın 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
. Ayrıca düğümlerin BkzFunctions for Key Lookup
veActive Keymaps
.