bind-map é um pacote Emacs que fornece a macro bind-map
que pode ser usada para disponibilizar um mapa de teclado em diferentes “chaves líderes”, incluindo aquelas vinculadas a estados malignos. É essencialmente uma generalização da ideia de uma chave líder usada no vim ou no pacote evil-leader do Emacs, e permite um número arbitrário de “chaves líderes”. Provavelmente isso é melhor explicado com um exemplo.
(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))
Isso tornará my-base-leader-map
(criando automaticamente o mapa se ainda não estiver definido) disponível sob os prefixos (ou líderes) Mm
e SPC
, onde o último está vinculado apenas aos estados normais, de movimento ou visuais do mal. A segunda declaração disponibiliza my-elisp-map
nas chaves especificadas quando um dos modos principais especificados está ativo. No segundo caso, os estados malignos usados também são de movimento normal e visuais porque este é o padrão especificado em bind-map-default-evil-states
. É possível condicionar as ligações ao carregamento de modos secundários ou a uma mistura de modos principais e secundários. Como os símbolos dos modos são usados, não é necessário garantir que algum dos pacotes do modo seja carregado antes desta declaração. Veja a documentação do bind-map
para mais opções.
Este pacote só fará uso do mal se uma das palavras-chave relacionadas ao mal for especificada. Esta declaração, por exemplo, não faz uso do pacote evil.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
A ideia por trás deste pacote é que você deseja organizar suas ligações pessoais em uma série de mapas de teclado separados dos mapas de modo integrados. Você pode simplesmente adicionar chaves usando o define-key
integrado ao my-elisp-map
, por exemplo, e uma declaração como a acima garantirá que essas ligações estejam disponíveis nos locais corretos.
Você pode usar a define-key
integrada que funcionará conforme planejado. bind-key
(parte do use-package) é outra opção. Para aqueles que desejam uma interface diferente, você pode usar a palavra-chave :bindings
na macro bind-map
ou as duas funções fornecidas bind-map-set-keys
e bind-map-set-key-defaults
, que usam apenas define-key
internamente, mas permite múltiplas ligações sem muita sintaxe.
(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))
; ; ...
A segunda função apenas adiciona as ligações se não houver nenhuma ligação existente para essa chave. Provavelmente só é útil para configurações compartilhadas, onde você deseja fornecer uma ligação padrão, mas não deseja que essa ligação substitua aquela feita pelo usuário. Observe que as chaves em ambas as funções são strings passadas para kbd
antes de vinculá-las.
Se você usar várias declarações bind-map
poderá repetir propriedades como :evil-keys
e :evil-states
. Você pode usar bind-map-for-mode-inherit
para extrair automaticamente essas propriedades de um mapa pai, como ilustra o exemplo a seguir. Consulte a documentação para obter mais informações.
(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 ))