
Então, tentei escrever um modo principal simples (modo de relatório)usandocomo um exemplo. Parece que tenho tudo funcionando, exceto que o mapa de teclado não parece mapear.
Se o fizer, C-h f report-mode
vejo corretamente uma lista dos principais mapas com a adição que fiz, a saber:
ESC n kill-dupe
Porém, quando vou para USE Mn ou ESC n, nada acontece. Posso invocar manualmente a função via M-x kill-dupe
para que esse 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.
Posso copiar exatamente o exemplo que usei (e fazer as substituiçõ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 deaqui.
Se eu examinar o mapa do modo de relatório, vejo o que parece mais correto, exceto que contém palavras-chave adicionais keymap
:
(keymap (27 keymap (110 . kill-dupe)) keymap (....) "Report-Map" (....))
Se eu comparar isso com, digamos, mapa de modo de texto, ele terá a string de definição de mapa de chave esparsa incorporada e strings adicionais de 'mapa de teclado'. Se eu avaliar, (keymapp report-mode-map)
obtenho um resultado verdadeiro, o que parece indicar que o formato diferente não é um problema ...
Por último, tenho certeza de que é um problema, porque nenhuma das outras ligações do mapa de teclado também funciona.
Qualquer ideia seria ótima. Desculpe novamente por não conseguir colar o código diretamente.
Responder1
Então, encontrei a resposta.
Acontece que define-derived-mode
nunca invoquei use-local-map
meu mapa de teclas personalizado.
uma vez que incluí:
(use-local-map report-mode-map)
Tudo funcionou bem.