Подтвердить что ты не робот

Как удалить ключ из мажорантной клавиатуры в Emacs?

Я глобально назначил C-c/ для режима ace-jump-mode, но reftex-mode (второстепенный режим для цитат, используемых с AucTeX) переопределяет этот ключ с помощью некоторой функции, которую я никогда не использую.

Я попробовал local-unset-key, но он отбрасывает только ключи из текущей карты основного режима.

Как удалить C-c/ из reftex-mode-map без внесения изменений в reftex.el?

4b9b3361

Ответ 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")
..
..