From 1f7d739193b4e4f30e6ce43636f300417e6e0efb Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 28 Oct 2021 11:04:24 +0100 Subject: [PATCH] feat(navigation/imenu): improve C-t imenu keybinding Use consult-lsp-file-symbols if available and lsp-mode is enabled in current buffer. Otherwise fall back to consult-imenu. Also fall back on consult-lsp-file-symbols if it produces an error, which seems to happen for some language servers right now. --- modules/navigation/siren-consult.el | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/navigation/siren-consult.el b/modules/navigation/siren-consult.el index 46b2f42..fecb3cb 100644 --- a/modules/navigation/siren-consult.el +++ b/modules/navigation/siren-consult.el @@ -9,7 +9,7 @@ (use-package consult :defer t :bind - ("C-t" . consult-imenu) + ("C-t" . siren-consult-imenu) ("C-x b" . consult-buffer) ("M-g M-g" . consult-goto-line) @@ -22,6 +22,19 @@ (consult-project-root-function 'siren-consult-project-root) :init + (defun siren-consult-imenu () + "Intelligently trigger consult-lsp-file-symbols or consult-imenu." + (interactive) + (if (and (fboundp 'consult-lsp-file-symbols) + (boundp 'lsp-mode) + lsp-mode) + ;; consult-lsp-file-symbols errors on some language servers, in such + ;; a case, fall back to consult-imenu. + (condition-case _ + (consult-lsp-file-symbols) + ('error (consult-imenu))) + (consult-imenu))) + (defun siren-consult-project-root (&rest args) "Call projectile-project-root if defined, otherwise return empty string." (if (fboundp 'projectile-project-root)