Загалом, це неможливо.
Причина полягає в тому, що може бути кілька карт, які визначають одне і те ж прив'язування, і немає способу автоматично визначити, яку саме ви хочете. (у вашому прикладі elisp-slime-nav-mode
такий незначний режим). Тож єдиний справді надійний підхід - це ви зрозуміти, яке саме визначення ви хочете.
Однак це означає, що можливий злом (чи не завжди це ...) M-.
марно.
(defun lookup-no-evil (key)
;; excluding evil maps from the lookup. not sure if
;; anything more than evail-normal-state-map is needed
(let* ((evil-maps (list evil-normal-state-map))
(bindings
(remq nil
(mapcar
(lambda (map)
(unless (memq map evil-maps)
(lookup-key map key)))
(current-active-maps)))))
(when bindings
;; let's assume the first one is the right one.
;; Given that minor modes are at the beginning
;; (although this is *not* documented so should not
;; be relied upon), it might be what we would have
;;without evil-mode indeed
(car bindings))))
(defmacro evil-remap (from to)
;; assuming that we want to put it in the normal-state map.
;; not sure about that
`(define-key evil-normal-state-map ,to
(lambda ()
(interactive)
(call-interactively (lookup-no-evil ,from)))))
(evil-remap (kbd "M-.") (kbd "C-]"))
Я зазвичай взагалі не використовую зло, тому можуть бути необхідні корективи (див. Вбудовані коментарі)
Крім того, більш чистим підходом було б пошук прив'язок один раз (наприклад, у гачку режиму), а не динамічно шукати кожен раз, коли натискається клавіша. Але я не впевнений, який злий гачок використовувати, тому це залишається як вправа;) (і залежно від порядку, який ви використовуєте для своїх другорядних режимів, або якщо ви перемикаєте їх динамічно, це може бути неправильно)