Slime (and elisp-slime-nav) uses M-.
to navigate to the symbol at point, and M-,
to pop back to previous marks. I like this.
Evil uses .
to repeat the previous editing command, C-.
to replace a just repeated command with a previously executed command, and M-.
to do the same in the reverse direction (useful if you overshoot with C-.
). I like this as well.
I'd like to use M-.
for slime-style navigation except when the previous command was C-.
(evil-repeat-pop
), in which case I'd like M-.
to run evil-repeat-pop-next
. I'm not sure how to go about implementing this.
I'm considering removing the evil M-.
binding and defining a hydra that's entered upon running evil-repeat-pop
(C-.
) and which binds M-.
to evil-repeat-pop-next
in a transient keymap.
I also considered binding M-.
to a wrapper function like,
(if (eql last-command 'evil-repeat-pop)
(evil-repeat-pop-next)
(elisp-slime-nav-find-elisp-thing-at-point))
but I want the "else" clause to do whatever M-.
would have done if evil wasn't enabled. This might be elisp-slime-nav-find-elisp-thing-at-point
, xref-find-definitions
, ggtags-find-tag-dwim
, etc. depending on what modes and code-tagging approaches I'm using.