
Итак, я попытался написать простой основной режим (режим отчета)с использованиемкак пример. У меня вроде бы все работает, за исключением того, что раскладка клавиатуры на самом деле не отображается.
Если я 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)
Все работало отлично.