Как правильно определить раскладку клавиатуры для второстепенного режима
Я хотел бы определить пользовательский режим для улучшений, который подходит для любого программного режима. И мне нужно определить привязки клавиш для всех этих режимов. Я выбираю использовать define-minor-mode
с :keymap
объявлять привязки клавиш с минимальными усилиями.
Я хотел бы связать comment-or-uncomment-region
в "C-;"
Макрос kbd дал мне [67108923]
магическое число для этой последовательности клавиш.
Я написал образец, который не работает
(define-minor-mode
my-mode
nil nil
:keymap '(
( [67108923] . comment-or-uncomment-region )
)
)
Я зарегистрировал режим, включил его, но нажимаю С-;
выдает уведомления о том, что последовательность клавиш не определена
После этого я написал в "чистом буфере" и оценил просто global-set-key
что выполняется ожидаемым образом.
(global-set-key [67108923] 'comment-or-uncomment-region )
Сейчас нажимаю C-;
производит ожидаемый comment-or-oncomment-region
поведение.
Я пытался отладить проблему с поиском информации о функции через C-h f
, Выдает странный вывод, comment-or-oncomment-region
дважды связан с различными последовательностями клавиш:
It is bound to C - ;, C-;
Первый появляется и исчезает с переключением второстепенного режима, другие появляются из global-set-key
призывание.
Как это может быть, если я использовал одно и то же определение ключа для обеих карт? Какие детали я пропустил?
2 ответа
Просто создайте раскладку клавиатуры, используя
make-sparse-keymap
и назовите этоmy-mode-map
--- ты готов. Нет необходимости:keymap
спорить сdefine-minor-mode
,Или используйте раскладку, которую вы создаете, используя
make-sparse-keymap
как значение:keymap
, если хочешь. (Но не нужно, так как он назван так, как ожидает второстепенный режим:my-mode-map
.)Но почему бы просто не использовать глобальную привязку через
global-set-key
? Зачем вам это нужно для привязки к второстепенному режиму?
Не используйте магический номер. IOW использовать [?\C-\;]
так что это могут понять люди. И я согласен с Дрю
(defvar my-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [?\C-\;] 'comment-or-uncomment-region)
map))
(define-minor-mode my-mode
"blabla"
nil nil nil
<add code, if any>)
Да, и еще одна вещь: почему вы предпочитаете C-;
сверх стандарта M-;
связывание?