Как правильно определить раскладку клавиатуры для второстепенного режима

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

Решение
  1. Просто создайте раскладку клавиатуры, используя make-sparse-keymapи назовите это my-mode-map --- ты готов. Нет необходимости :keymap спорить с define-minor-mode,

  2. Или используйте раскладку, которую вы создаете, используя make-sparse-keymap как значение :keymap, если хочешь. (Но не нужно, так как он назван так, как ожидает второстепенный режим: my-mode-map.)

  3. Но почему бы просто не использовать глобальную привязку через 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-; связывание?

Другие вопросы по тегам