Я бы хотел определить пользовательский режим для улучшений, которые подходят для любого программного режима. И мне нужно определить привязки клавиш для всех этих режимов. Я хочу использовать 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
вызова.
Как это может быть, если я использовал одно и то же определение ключа для обеих карт? Какие подробности я пропустил?
make-sparse-keymap работал отлично, но я до сих пор не понимаю, что не так с оригинальным подходом, основанным на http://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Minor -Modes.html – ayvango
ayvango: ваш код работает в Emacs 24.3. Я подозреваю, что ваша проблема в том, что вы сначала ошибались, после чего была определена «my-mode-map».Любые последующие оценки не могли бы заглушить существующую карту; вам нужно было бы сначала отвязать «my-mode-map». – phils