因此,我尝试编写一个简单的主要模式(报告模式)使用作为示例。似乎一切都正常,只是键盘映射似乎没有真正映射。
如果我这样做了,C-h f report-mode
我就会正确地看到我所添加的关键地图列表,即:
ESC n kill-dupe
但是,当我使用 USE Mn 或 ESC n 时,什么都没有发生。我可以通过手动调用该函数,M-x kill-dupe
所以这似乎不是问题。
遗憾的是,由于机器位于不同的网络上,我无法复制粘贴实际的 elisp 代码。
我可以复制我使用的确切示例(并进行替换):
(defvar report-mode-map
(let ((map (make-sparse-keymap "Report-Mode")))
(define-key map "\M-n" 'kill-dupe)
map)
"Keymap for browsing report mode")
来自于这里。
如果我检查 report-mode-map,我会看到大部分看起来都是正确的,除了它有keymap
以下额外的关键字:
(keymap (27 keymap (110 . kill-dupe)) keymap (....) "Report-Map" (....))
如果我将其与 text-mode-map 进行比较,它会嵌入 sparse-key-map 定义字符串,以及附加的“keymap”字符串。如果我执行 eval 操作,则会(keymapp report-mode-map)
得到 true 的结果,因此这似乎表明不同的格式不是问题...
最后,我很确定这是一个问题,因为其他键盘映射绑定都不起作用。
任何想法都很好。再次抱歉无法直接传递代码。
答案1
所以,我找到了答案。
事实证明我从来define-derived-mode
没有调用过use-local-map
我的自定义键映射。
一旦我包括:
(use-local-map report-mode-map)
一切正常。