Emacs config wip, split to better fit modules.
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
;;; development.el --- Languages, Eglot and code navigation -*- lexical-binding: t; -*-
|
||||
;;; Commentary:
|
||||
;; Loaded from init.el. Requires Evil.
|
||||
;;
|
||||
;; Languages:
|
||||
;; Markdown markdown-mode.
|
||||
;; PHP php-mode, PSR-2 style, 4 spaces.
|
||||
;; Odin odin-mode from git (needs Emacs 30+ for :vc), Eglot + OLS.
|
||||
;; Go go-mode, Eglot + gopls; organize imports and format on save.
|
||||
;;
|
||||
;; Normal/motion state:
|
||||
;; gd definitions gD references K eldoc
|
||||
;; C-t jump back ESC closes any open eldoc window.
|
||||
;;; Code:
|
||||
|
||||
;;;; Markdown
|
||||
(use-package markdown-mode)
|
||||
|
||||
;;;; PHP
|
||||
(use-package php-mode
|
||||
:mode "\\.php\\'"
|
||||
:hook
|
||||
(php-mode . (lambda ()
|
||||
(setq-local indent-tabs-mode nil)
|
||||
(setq-local tab-width 4)
|
||||
(setq-local c-basic-offset 4)))
|
||||
:custom
|
||||
(php-mode-coding-style 'psr2))
|
||||
|
||||
;;;; Odin
|
||||
(use-package odin-mode
|
||||
:vc (:url "https://github.com/mattt-b/odin-mode"
|
||||
:rev :newest)
|
||||
:mode "\\.odin\\'"
|
||||
:hook (odin-mode . eglot-ensure))
|
||||
|
||||
;;;; Go
|
||||
;; Emacs started from the desktop doesn't inherit fish env.
|
||||
(dolist (d '("/usr/local/go/bin" "/home/jason/.go/bin"))
|
||||
(add-to-list 'exec-path d)
|
||||
(setenv "PATH" (concat d ":" (getenv "PATH"))))
|
||||
(setenv "GOPATH" "/home/jason/.go")
|
||||
(setenv "GOCACHE" "/home/jason/.go/cache")
|
||||
|
||||
(defun my/go-before-save ()
|
||||
"Organize imports and format the buffer through Eglot."
|
||||
(when (eglot-managed-p)
|
||||
(eglot-code-actions nil nil "source.organizeImports" t)
|
||||
(eglot-format-buffer)))
|
||||
|
||||
(use-package go-mode
|
||||
:mode "\\.go\\'"
|
||||
:hook ((go-mode . eglot-ensure)
|
||||
(go-mode . (lambda ()
|
||||
(setq-local tab-width 4)
|
||||
(add-hook 'before-save-hook #'my/go-before-save nil t)))))
|
||||
|
||||
;;;; Eglot
|
||||
(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 _)
|
||||
"Quit every window showing an *eldoc* buffer."
|
||||
(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)
|
||||
|
||||
;;; development.el ends here
|
||||
Reference in New Issue
Block a user