Связанные с режимом привязки клавиш - PullRequest
1 голос
/ 18 апреля 2010

У меня есть второстепенный режим, который также поставляется с глобальным режимом. В этом режиме есть некоторые привязки клавиш, и я хочу, чтобы у пользователя была возможность указать, какие привязки должны работать для каждого режима.

(my-minor-mode-bindings-for-mode 'some-mode '(key1 key2 ...))
(my-minor-mode-bindings-for-mode 'some-other-mode '(key3 key4 ...))

Так что мне нужна какая-то карта режима / буфера локального ключа. Буфер локальный немного проблематично, так как пользователь может изменить основной режим.

Я пробовал некоторые решения, ни один из которых не работает.

  1. Всегда связывайте все возможные ключи, и когда пользователь вводит ключ, проверьте, должен ли ключ быть активным в этом режиме. Выполните действие, если оно истинно, иначе отступите.
  2. Как и в предыдущем случае, только то, что ключи не связаны. Вместо этого я использую предварительную команду hook и проверяю, должна ли нажатая клавиша что-то делать.
  3. Для каждого обновления буфера (что бы это ни значило), запустите функцию, которая сначала очищает карту ключей, а затем обновляет ее привязками для этого конкретного режима.

Я попробовал эти подходы и обнаружил проблемы со всеми из них. Знаете ли вы какой-нибудь хороший способ решить эту проблему?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 апреля 2010

Сделать буфер переменной some-mode-map локальным, и когда some-mode включен, он проверит, какие из наборов привязок клавиш установить. Поскольку some-mode-map является локальным буфером, привязки клавиш должны быть локальными для этого буфера (и не затрагивать другие буферы).

0 голосов
/ 18 апреля 2010

Вы можете добавить привязки клавиш, это крюк, я думаю:

(add-hook 'some-mode-hook
 (lambda ()
 (define-key some-mode-map (kbd "C-c w") 'something)
 ...
 )
)

Конечно, анонимная функция может быть более сложной, и вы можете делать любые проверки, какие захотите. Конечно, если вам нужно изменить привязки в интерактивном режиме, вы можете просто использовать некоторую интерактивную функцию ...

...