跳至主要内容

Eglot and before/after-save-hook and use-package

In Emacs, when you try to automate some actions during every save
action, you will surely get to the before-save-hook and the
after-save-hook. Simply adding something like gofmt-before-save to
before-save-hook will save you tons of time to do the go-fmt.

And then, I meet eglot, and gopls will also save me tons of time doing
googling and api documentation navigation.

But eglot-ensure is not very friendly to the good old ways of how
after-save-hooks were designed to work. It makes the
before/after-save-hook a buffer local variable and it does not inherit
the variable's global value.

So, to make before/after-save-hook work again, experts start to adding
hooks to major mode specific hooks like this: emacs.md - Go
(opensource.google)

"""
;; Optional: install eglot-format-buffer as a save hook.
;; The depth of -10 places this before eglot's willSave notification,
;; so that that notification reports the actual contents that will be saved.
(defun eglot-format-buffer-on-save ()
(add-hook 'before-save-hook #'eglot-format-buffer -10 t))
(add-hook 'go-mode-hook #'eglot-format-buffer-on-save)
"""

Then, how to integrate the thing with existing use-package managed
eglot configuration? I, use the lambda function:

"""
(use-package eglot
:ensure t
:hook (((go-mode go-ts-mode) .
(lambda ()
(add-hook 'before-save-hook #'eglot-format-buffer -10 t)))
((yaml-mode yaml-ts-mode go-ts-mode go-mode) . eglot-ensure))
:config
(add-to-list 'eglot-stay-out-of #'company)

(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
`((yaml-mode yaml-ts-mode) . ("yaml-language-server" "--stdio"
:initializationOptions
(:http.proxy "http://my.proxy.com:8080"))))))

"""

评论

此博客中的热门博文

XEmacs 21.5 beta 35 "kohlrabi" has been released.

If you are an old XEmacs user, you may feel happy to see this from https://www.xemacs.org/.    After ten years, XEmacs released a new version 21.5. So there's still many people cares about XEmacs. The XEmacs' source repo have been moved from altassian Bitbucket to https://heptapod.net/. As Bitbucket have been dropped Mercurial support many years ago.

Fido-mode

Today, I've just discovered the Fido mode, a modified `icomplete` minor mode. `icomplete` used to be one of my favorite mode days back to my XEmacs days. Pros: It is way fast. It is much more smart in terms of find the complete candidate that you want mostly.  Cons: It does not integrate well enough with tramp yet.    `fido-mode` is a core package of Emacs 27+, and there's a vertical version available after Emacs 28+ named `fido-vertical-mode`. UPDATE: I am back with ido now