Как удалить ключ из мажорантной клавиатуры в Emacs?
Я глобально назначил C-c/
для режима ace-jump-mode, но reftex-mode (второстепенный режим для цитат, используемых с AucTeX) переопределяет этот ключ с помощью некоторой функции, которую я никогда не использую.
Я попробовал local-unset-key
, но он отбрасывает только ключи из текущей карты основного режима.
Как удалить C-c/
из reftex-mode-map
без внесения изменений в reftex.el?
Ответы
Ответ 1
Вы можете изменить существующую карту ключей, используя define-key
. Передавая nil
в качестве функции вызова, ключ становится несвязанным. Я предполагаю, что вы должны сделать что-то вроде:
(define-key reftex-mode-map "\C-c/" nil)
Конечно, вы должны сделать это в каком-то крюке, например:
(defun my-reftex-hook ()
(define-key reftex-mode-map "\C-c/" nil))
(add-hook 'reftex-mode-hook 'my-reftex-hook)
Ответ 2
Вы можете использовать следующую команду:
(define-key reftex-mode-map "\C-c/" nil)
чтобы отменить эту функцию из C-c /
... Но reftex-mode
должен быть загружен, поэтому reftex-mode-map
будет доступен для модификации
Ответ 3
Вот как я это делаю. Однако это может быть улучшено.
(defun get-key-combo (key)
"Just return the key combo entered by the user"
(interactive "kKey combo: ")
key)
(defun keymap-unset-key (key keymap)
"Remove binding of KEY in a keymap
KEY is a string or vector representing a sequence of keystrokes."
(interactive
(list (call-interactively #'get-key-combo)
(completing-read "Which map: " minor-mode-map-alist nil t)))
(let ((map (rest (assoc (intern keymap) minor-mode-map-alist))))
(when map
(define-key map key nil)
(message "%s unbound for %s" key keymap))))
;;
;; Then use it interativly
;; Or like this:
(keymap-unset-key '[C-M-left] "paredit-mode")
..
..