
所以,我嘗試寫一個簡單的主要模式(報告模式)使用舉個例子。我似乎一切正常,除了鍵盤映射實際上似乎沒有映射。
如果我這樣做,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" (....))
如果我將其與文字模式映射進行比較,它會嵌入稀疏鍵映射定義字串和附加的“鍵映射”字串。如果我評估(keymapp report-mode-map)
我得到的結果是 true,那麼這似乎表明不同的格式不是問題...
最後,我很確定這是一個問題,因為其他鍵盤映射綁定都不起作用。
任何想法都會很棒。再次抱歉無法直接貼上程式碼。
答案1
所以,我找到了答案。
事實證明我define-derived-mode
從未在use-local-map
我的自訂鍵映射上調用過。
一旦我包括:
(use-local-map report-mode-map)
一切都很好。