En général, ce n'est pas possible.
La raison en est qu'il peut y avoir plusieurs cartes qui définissent la même liaison, et il n'y a aucun moyen de déterminer automatiquement celle que vous souhaitez. (dans votre exemple, elisp-slime-nav-mode
c'est un mode si mineur). La seule approche vraiment fiable consiste donc à déterminer exactement quelle définition vous souhaitez.
Cela dit ... il y a un piratage possible (n'est-ce pas toujours le cas ...) Une partie de ce qui le rend difficile est que la liaison que vous souhaitez remapper est potentiellement déjà masquée par une mauvaise carte de touches active, donc obtenir la liaison actuelle de M-.
est inutile.
(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-]"))
Normalement, je n'utilise pas du tout le mal, donc il pourrait y avoir des ajustements nécessaires (voir les commentaires intégrés)
En outre, une approche plus propre consisterait à rechercher les liaisons une fois (dans un crochet de mode par exemple), au lieu de rechercher dynamiquement chaque fois que la liaison de touches est enfoncée. Mais je ne sais pas quel mauvais crochet utiliser, donc cela reste un exercice;) (et selon l'ordre que vous utilisez pour vos modes mineurs, ou si vous les basculez dynamiquement, cela pourrait être incorrect)