Comecei a codificar um modo secundário para fornecer algumas combinações de teclas. Minha tentativa inicial teve um erro de digitação:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(([b] . 'previous-line)))
Eu pretendia usar a b
chave e percebi imediatamente que deveria ter usado em "b"
vez de [b]
. Então, redefini o modo secundário:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(("b" . 'previous-line)))
No entanto, isso não funcionou. Isso me desencadeou em todas as formas de vincular chaves (ou seja, (kbd ...), [...] etc.). Finalmente, percebi que simplesmente reavaliar o (define-minor-mode ...)
formulário não estava mudando nada, fiquei preso ao mapa de chaves original e quebrado. Tentei alterar o mapa de teclas diretamente via (define-key borked-mode-map ...)
e ainda não consegui carregar o mapa de teclas corrigido. Finalmente, reiniciei o Emacs e meu modo secundário foi carregado corretamente.
Minha pergunta é: como você atualiza uma definição de modo secundário à medida que a desenvolve? Existe alguma maneira de liberar uma definição quebrada ou você precisa reiniciar o emacs para limpar os bits quebrados?
fonte
defvar
não avaliará seu valor novamente depoisC-M-x
:) Você precisariadefparameter
ou um separadosetf
.define-minor-mode
macro: chamandodefvar
para definir o mapa. Avaliar que defvar uma segunda vez não tem efeito.C-M-x
(eval-defun
) para reavaliardefvar
, a variável será atualizada. Este é um caso especial emeval-defun
; se você ligareval-buffer
oueval-region
o valor existente não for alterado.C-M-x
nodefvar
formulário, apenas atualiza a própria variável mode-map. Você também precisa preencherC-M-x
odefine-minor-mode
formulário para obter o mapa alterado 'instalado' no modo secundário. Tentei descobrir o motivo expandindo as macros, mas está além de mim.