bind-map ist ein Emacs-Paket, das das Makro bind-map
bereitstellt, mit dem eine Keymap für verschiedene „Leader-Keys“ verfügbar gemacht werden kann, einschließlich solcher, die an böse Zustände gebunden sind. Es handelt sich im Wesentlichen um eine Verallgemeinerung der Idee eines Leader-Schlüssels, wie er in vim oder dem Emacs-Evil-leader-Paket verwendet wird, und ermöglicht eine beliebige Anzahl von „Leader-Schlüsseln“. Dies lässt sich wahrscheinlich am besten anhand eines Beispiels erklären.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:evil-keys ( " SPC m " " , " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
Dadurch wird my-base-leader-map
(die Karte wird automatisch erstellt, wenn sie noch nicht definiert ist) unter den Präfixen (oder Anführern) Mm
und SPC
verfügbar gemacht, wobei letzterer nur an die normalen, Bewegungs- oder visuellen Zustände des Bösen gebunden ist. Die zweite Deklaration macht my-elisp-map
unter den angegebenen Schlüsseln verfügbar, wenn einer der angegebenen Hauptmodi aktiv ist. Im zweiten Fall handelt es sich bei den verwendeten bösen Zuständen ebenfalls um normale Bewegung und visuelle Zustände, da dies die Standardeinstellung ist, wie in bind-map-default-evil-states
angegeben. Es ist möglich, die Bindungen davon abhängig zu machen, dass Nebenmodi oder eine Mischung aus Haupt- und Nebenmodi geladen werden. Da die Symbole der Modi verwendet werden, muss vor dieser Deklaration nicht sichergestellt werden, dass eines der Pakete des Modus geladen wird. Weitere Optionen finden Sie im Dokumentstring von bind-map
.
Dieses Paket verwendet evil nur, wenn eines der mit evil verbundenen Schlüsselwörter angegeben wird. Diese Erklärung macht beispielsweise keinen Gebrauch vom bösen Paket.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
Die Idee hinter diesem Paket besteht darin, dass Sie Ihre persönlichen Bindungen in einer Reihe von Tastaturbelegungen organisieren möchten, die von den integrierten Moduskarten getrennt sind. Sie können Schlüssel beispielsweise einfach mit dem integrierten define-key
zu my-elisp-map
hinzufügen, und eine Deklaration wie die obige sorgt dafür, dass diese Bindungen an den richtigen Stellen verfügbar sind.
Sie können den integrierten define-key
verwenden, der wie vorgesehen funktioniert. bind-key
(Teil des use-package) ist eine weitere Option. Für diejenigen, die eine andere Schnittstelle wünschen, können Sie entweder das Schlüsselwort :bindings
im Makro bind-map
oder die beiden bereitgestellten Funktionen bind-map-set-keys
und bind-map-set-key-defaults
verwenden, die beide nur define-key
verwenden define-key
intern, ermöglicht aber mehrere Bindungen ohne viel Syntax.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual)
:bindings ( " c " 'compile
" C " 'check ))
(bind-map-set-keys my-base-leader-map
" c " 'compile
" C " 'check
; ; ...
)
; ; is the same as
; ; (define-key my-base-leader-map (kbd "c") 'compile)
; ; (define-key my-base-leader-map (kbd "C") 'check)
; ; ...
(bind-map-set-key-defaults my-base-leader-map
" c " 'compile
; ; ...
)
; ; is the same as
; ; (unless (lookup-key my-base-leader-map (kbd "c"))
; ; (define-key my-base-leader-map (kbd "c") 'compile))
; ; ...
Die zweite Funktion fügt die Bindungen nur hinzu, wenn für diesen Schlüssel keine Bindung vorhanden ist. Dies ist wahrscheinlich nur für gemeinsam genutzte Konfigurationen nützlich, bei denen Sie eine Standardbindung bereitstellen möchten, aber nicht möchten, dass diese Bindung eine vom Benutzer erstellte Bindung überschreibt. Beachten Sie, dass es sich bei den Schlüsseln in beiden Funktionen um Zeichenfolgen handelt, die vor der Bindung an kbd
übergeben werden.
Wenn Sie mehrere bind-map
Deklarationen verwenden, werden möglicherweise Eigenschaften wie :evil-keys
und :evil-states
wiederholt. Sie können bind-map-for-mode-inherit
verwenden, um diese Eigenschaften automatisch aus einer übergeordneten Karte abzurufen, wie das folgende Beispiel zeigt. Weitere Informationen finden Sie in der Dokumentzeichenfolge.
(bind-map my-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map-for-mode-inherit my-markdown-map my-leader-map
:major-modes ( markdown-mode ))