Então, encontrei a resposta.
Acontece que eu em define-derived-mode
nunca invoquei use-local-map
no meu mapa de chaves personalizado.
uma vez incluído:
(use-local-map report-mode-map)
Tudo funcionou bem.
Então, eu tentei escrever um modo simples simples (modo de relatório) using como um exemplo. Eu pareço ter tudo funcionando, exceto que o mapa de teclado não parece realmente mapear.
Se eu C-h f report-mode
ver corretamente uma lista de mapas de chaves com a adição que fiz, a saber:
ESC n kill-dupe
No entanto, quando vou para USE M-n ou ESC n, nada acontece. Eu posso invocar manualmente a função via M-x kill-dupe
para que não pareça ser o problema.
Infelizmente, como a máquina está em uma rede diferente, não consigo copiar e colar o código elisp real.
Eu posso copiar no exemplo exato que usei (e fazer as subestações):
(defvar report-mode-map
(let ((map (make-sparse-keymap "Report-Mode")))
(define-key map "\M-n" 'kill-dupe)
map)
"Keymap for browsing report mode")
que vem de aqui .
Se eu examinar o relatório-modo-mapa, vejo o que parece mais correto, exceto que ele tem palavras-chave adicionais de keymap
em:
(keymap (27 keymap (110 . kill-dupe)) keymap (....) "Report-Map" (....))
Se eu comparar isso com, digamos, text-mode-map, ele terá a string de definição de mapa de chave esparsa incorporada e strings adicionais de 'keymap'. Se eu eval (keymapp report-mode-map)
obtiver um resultado de true, isso pareceria indicar que o formato diferente não é um problema ...
Por último, tenho certeza que é um problema, porque nenhuma das outras ligações de mapa de teclado funciona.
Qualquer ideia seria ótima. Desculpe novamente por não conseguir passar o código diretamente.
Então, encontrei a resposta.
Acontece que eu em define-derived-mode
nunca invoquei use-local-map
no meu mapa de chaves personalizado.
uma vez incluído:
(use-local-map report-mode-map)
Tudo funcionou bem.