When I press
gd to go to the definition of a class in C++, Emacs splits the screen and shows me two definition options that I need to click on with one of them. I'm used to
coc.nvim where I would just go for the first option at once. How do I do this in Emacs?
You may want to use package ivy-xref or helm-xref to replace the "window-ish" selector with popular completion framework like ivy or helm (so it feels better when picking a definition). Sure you also need ivy/helm themselves. It's easy if you already use one of them, otherwise have a try.
If you insist... Digging down into
xref-find-definitions, it's this function who does the most work:
(defun xref--show-xrefs (xrefs display-action &optional always-show-list) (cond ((and (not (cdr xrefs)) (not always-show-list)) (xref-push-marker-stack) (xref--pop-to-location (car xrefs) display-action)) (t (xref-push-marker-stack) (funcall xref-show-xrefs-function xrefs `((window . ,(selected-window)) (display-action . ,display-action))))))
We can see the first branch of
cond is when there's only one candidate, just jump to it. The second branch (the
t part) is that when there are more than 1, we show them with the value of the variable
xref-show-xrefs-function. So you need to customize the value of
xref-show-xrefs-function to make the function do the same as the first branch of the above
cond. Something like this (not tested):
(setq xref-show-xrefs-function 'my/xref-just-jump-to-first) (defun my/xref-just-jump-to-first (xrefs alist) "However many candidates, just jump to the first." (xref-push-marker-stack) (xref--pop-to-location (car xrefs) nil))