emacs-lsp / lsp-ui

UI integrations for lsp-mode
https://emacs-lsp.github.io/lsp-ui
GNU General Public License v3.0
1.04k stars 140 forks source link

lsp-ui-peek-find-[definitions|references] keybindings get overridden by lsp-mode #702

Open aconchillo opened 2 years ago

aconchillo commented 2 years ago

Hi! I'm trying to keep lsp-ui-peek-find-definitions and lsp-ui-peek-find-references to the original bindings M-. and M-?.

I have the following code:

(use-package lsp-ui
  :ensure t
  :bind (([remap xref-find-definitions] . lsp-ui-peek-find-definitions)
         ([remap xref-find-references] . lsp-ui-peek-find-references))
  :config
  ;; Don't show sidelines
  (setq lsp-ui-sideline-enable nil))

And I have also tried the lsp-ui setup from here https://github.com/CSRaghunandan/.emacs.d/blob/master/setup-files/setup-lsp.el which uses

  (define-key lsp-ui-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
  (define-key lsp-ui-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references)

This seem to work outside of an LSP buffer (I can see those two functions have the right key binding). However, when I open the first LSP buffer (a JS one) the key bindings get changed to LSP default ones (s-l g g and s-l g r).

Is there a way keep the original key bindings?

krfantasy commented 1 year ago

I have the same issue with Emacs 28.2 and lsp-ui-20230116.2024 from MELPA.

My configuration:

(use-package lsp-ui
  :ensure t
  :config
  (setq lsp-ui-sideline-enable t
    lsp-ui-peek-enable t
    lsp-ui-doc-enable t
        lsp-ui-imenu-auto-refresh t)
  (define-key lsp-ui-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
  (define-key lsp-ui-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references))
s4swani commented 1 year ago

I faced the same issue with Emacs 28.2 on Macos 12.6.8. Instead of lsp-ui-mode-map, I used the variable lsp-mode-map and the xref keybindings worked for me.

So this is what those configuration lines look like:

;; remap xref-find-definitions(M-.) and xref-find-references(M-?) to lsp-ui-peek
(define-key lsp-mode-map [remap xref-find-definitions] #'lsp-ui-peek-find-definitions)
(define-key lsp-mode-map [remap xref-find-references] #'lsp-ui-peek-find-references)

I’m not sure if this is helpful as I'm still an Elisp noob, but it’s worth a shot.