;;;; Markdown (use-package markdown-mode) ;;;; Odin (use-package odin-mode :vc (:url "https://github.com/mattt-b/odin-mode" :rev :newest) :mode "\\.odin\\'" :hook (odin-mode . eglot-ensure)) (use-package eglot :ensure nil :config (setq eglot-autoshutdown t) (add-to-list 'eglot-ignored-server-capabilities :signatureHelpProvider) ;; Explicit OLS configuration. (add-to-list 'eglot-server-programs '(odin-mode . ("/home/jason/.local/bin/ols" :initializationOptions (:odin_command "/home/jason/.odin/odin" :enable_document_symbols t :enable_format t :collections [(:name "core" :path "/home/jason/.odin/core") (:name "vendor" :path "/home/jason/.odin/vendor")]))))) ;; OLS built-in definitions. (setenv "OLS_BUILTIN_FOLDER" "/home/jason/ThirdParty/ols/builtin") ;;;; Code navigation ;; Vim-style code navigation. (evil-define-key '(normal motion) 'global "gd" #'xref-find-definitions "gD" #'xref-find-references "K" #'eldoc (kbd "C-t") #'xref-go-back) ;; ESC closes any open eldoc window. (defun my/eldoc-close (&rest _) (dolist (w (window-list)) (when (string-prefix-p "*eldoc" (buffer-name (window-buffer w))) (quit-window nil w)))) (advice-add 'evil-force-normal-state :after #'my/eldoc-close)