Em geral, não é possível.
O motivo é que pode haver vários mapas que definem a mesma ligação e não há como descobrir automaticamente qual você deseja. (no seu exemplo, elisp-slime-nav-mode
é um modo tão secundário). Portanto, a única abordagem realmente confiável é você descobrir exatamente qual definição deseja.
Dito isso ... existe um possível hack (nem sempre existe ...) Parte do que torna complicado é que a ligação que você deseja remapear já está potencialmente mascarada por um mapa de teclas ativo mal, obtendo a ligação atual de M-.
é inútil.
(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-]"))
Normalmente eu não uso o mal, então pode haver ajustes necessários (veja os comentários incorporados)
Além disso, uma abordagem mais limpa seria procurar as ligações uma vez (em um gancho de modo, por exemplo), em vez de procurar dinamicamente toda vez que a tecla for pressionada. Mas não tenho certeza de qual gancho usar, então isso é deixado como um exercício;) (e dependendo da ordem que você usa para seus modos menores, ou se você os alternar dinamicamente, pode estar incorreto)