바인딩 맵(bind-map)은 사악한 상태에 연결된 키를 포함하여 다양한 "리더 키"에서 키맵을 사용할 수 있도록 하는 데 사용할 수 있는 매크로 bind-map
제공하는 Emacs 패키지입니다. 이는 본질적으로 vim 또는 Emacs evil-leader 패키지에 사용되는 리더 키 개념을 일반화한 것이며 임의의 수의 "리더 키"를 허용합니다. 이것은 아마도 예를 들어 설명하는 것이 가장 좋을 것입니다.
(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))
이렇게 하면 접두사(또는 리더) Mm
및 SPC
아래에서 my-base-leader-map
(아직 정의되지 않은 경우 자동으로 맵 생성)을 사용할 수 있게 됩니다. 여기서 후자는 악의 정상, 모션 또는 시각적 상태에만 바인딩됩니다. 두 번째 선언은 지정된 주요 모드 중 하나가 활성화될 때 지정된 키에서 my-elisp-map
사용할 수 있도록 합니다. 두 번째 경우에는 사용된 사악한 상태도 일반 동작 및 시각적 상태입니다. 왜냐하면 이것이 bind-map-default-evil-states
에 지정된 기본값이기 때문입니다. 로드되는 마이너 모드 또는 메이저 모드와 마이너 모드의 혼합에 따라 바인딩을 조건부로 만들 수 있습니다. 모드의 기호가 사용되므로 이 선언 전에 모드의 패키지가 로드되었는지 확인할 필요가 없습니다. 더 많은 옵션을 보려면 bind-map
의 독스트링을 참조하세요.
이 패키지는 evil 관련 키워드 중 하나가 지정된 경우에만 evil을 사용합니다. 예를 들어, 이 선언은 사악한 패키지를 사용하지 않습니다.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
이 패키지의 기본 아이디어는 내장 모드 맵과 별도로 일련의 키맵으로 개인 바인딩을 구성하려는 것입니다. 예를 들어 내장된 define-key
사용하여 my-elisp-map
에 간단히 키를 추가할 수 있으며, 위와 같은 선언은 이러한 바인딩이 올바른 위치에서 사용 가능하도록 보장합니다.
의도한 대로 작동하는 내장 define-key
사용할 수 있습니다. bind-key
(use-package의 일부)는 또 다른 옵션입니다. 다른 인터페이스를 원하는 경우에는 bind-map
매크로에서 :bindings
키워드를 사용하거나 두 가지 제공된 함수인 bind-map-set-keys
및 bind-map-set-key-defaults
사용할 수 있습니다. 둘 다 define-key
를 사용합니다. define-key
내부적으로 사용되지만 많은 구문 없이 여러 바인딩을 허용합니다.
(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))
; ; ...
두 번째 함수는 해당 키에 대한 기존 바인딩이 없는 경우에만 바인딩을 추가합니다. 이는 기본 바인딩을 제공하고 싶지만 해당 바인딩이 사용자가 만든 바인딩을 덮어쓰는 것을 원하지 않는 공유 구성에만 유용할 것입니다. 두 함수의 키는 바인딩하기 전에 kbd
에 전달되는 문자열입니다.
여러 개의 bind-map
선언을 사용하는 경우 :evil-keys
및 :evil-states
와 같은 속성이 반복되는 것을 발견할 수 있습니다. 다음 예제에서 설명한 것처럼 bind-map-for-mode-inherit
사용하여 상위 맵에서 이러한 속성을 자동으로 가져올 수 있습니다. 자세한 내용은 독스트링을 참조하세요.
(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 ))