Я получил отскок от клавиши 'd' gnus-article-mode
, но его старое поведение все еще активно, когда точка находится во вложении. Я вижу, что повторное связывание не вступило в силу C-h k d
, но оно не говорит мне, какая карта ключей действует в данный момент, так что я могу повторно связать ее.
Есть ли способ узнать это?
Вот точный пример: я использую зло, и я хочу, чтобы статьи были в режиме движения. Для моей раскладки клавиатуры я настроил «d» в качестве клавиши для перехода вверх.
(evil-mode 1)
(add-to-list 'evil-motion-state-modes 'gnus-article-mode)
(setq evil-emacs-state-modes (remove 'gnus-article-mode evil-emacs-state-modes))
(define-key evil-motion-state-map "d" 'evil-previous-line)
Чтобы убедиться, что злые ключи приняты во внимание, я снял ключ gnus на локальной карте:
(defun as/alter-article-evil-map ()
(local-unset-key "d"))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
К сожалению, когда точка находится во вложении, клавиша 'd' больше не поднимается, но предлагает мне удалить вложение. Я предполагаю, что в этот момент активна другая привязка, отсюда и вопрос.
Решение Я использовал приведенное keymaps-at-point
ниже, чтобы найти используемую раскладку ключей из свойства text. Затем я посмотрел на код связанной функции, чтобы найти имя карты ключей gnus-mime-button-map
. Следующий код делает то, что я хочу:
(defun as/alter-article-evil-map ()
(define-key gnus-mime-button-map "d" nil))
(add-hook 'gnus-article-mode-hook 'as/alter-article-evil-map)
источник
Searching Keymaps
. Смотрите также узлыFunctions for Key Lookup
иActive Keymaps
.Ответы:
Emacs 25
Как упомянуто @YoungFrog в комментариях, начиная с Emacs 25.1 , старый добрый
C-h k
метод описания привязок клавиш также скажет вам, в какой карте ключей был найден ключ.До Emacs 25
Там какой - код здесь на этом, но это неполное , поскольку он не охватывает все. Ниже улучшенная версия этого.
Ключи можно связать 9 (!) Способами. Спасибо @Drew за эту ссылку (также дополненную этим ) с полным списком. В порядке очередности они являются:
overriding-terminal-local-map
. Это определяетсяset-transient-map
функцией.overriding-local-map
. Если этот параметр установлен, пункты 3–8 пропускаются (вероятно, почему вы не видите многих из них).keymap
текст-свойства (который может идти на фактическом тексте или на оверлеях).emulation-mode-map-alists
.minor-mode-overriding-map-alist
.minor-mode-map-alist
.local-map
свойство text. Если это существует, пункт 8 пропускается.current-local-map
.current-global-map
.Есть также полуэлемент 10. Независимо от того, какая команда была найдена с помощью описанной выше процедуры, она также может быть переназначена.
Следующая функция запрашивает некоторые из этих возможностей (наиболее вероятные) и возвращает или печатает результат.
Для каждой из них есть встроенные функции, кроме первой, поэтому мы должны создать ее (также улучшенную версию кода, указанного выше).
Поскольку вы говорите, что поведение активно, когда точка находится во вложении, есть большая вероятность, что это связывание клавиш происходит с наложением или текстовым свойством.
Если это не сработает , попробуйте следующую команду. Просто поместите курсор на вложение и сделайте
M-x
keymaps-at-point
.источник
k runs the command gnus-summary-kill-same-subject-and-select (found in gnus-summary-mode-map), which is (...)
Что по поводу:
Например, для
(my-lookup-key (kbd "C-c v v"))
получения списка в*Message*
буфере:Этот подход полезен для поиска подкарты клавиш, которая включена в карту ключей более высокого уровня, например, для вывода из:
это
vc-prefix-map
который входит вglobal-map
:Если вы измените условие фильтрации, чтобы включить
keymapp
- вы сможете искать префиксы:Так
rst-mode-map
будет найдено на обоих:источник
Мне известно, что следующее не дает ответа на вопрос « Как узнать, какая карта ключей» , однако в данном случае она касается основной проблемы, заключающейся в том, как обеспечить
d
поведение ключа в соответствии с желаниями пользователя. При желании я могу удалить этот ответ и преобразовать его в другой вопрос + ответ по этой проблеме.В качестве метода переопределения
text-property/overlay
карты вы должны использовать:В соответствии с Controlling Active Maps ,
overriding-local-map
имеет приоритет над любой другой активной картой, кромеoverriding-terminal-local-map
.источник
Обеспечивает emacs-button
buttons-display
, который с префиксным аргументом отображает рекурсивную визуализацию всех текущих привязок.(Отказ от ответственности: я автор пакета)
источник