2023-11-19
Third party Emacs packages that I use (as of November 2023)
My current Emacs configuration seems to have more or less settled down, so much like I do with Firefox, I want to write down my current third party packages and what I feel about them, so that I can come back to it later and see how things have changed over time. This is in no particular order except perhaps partly historical.
Currently I'm using Emacs 29.1 everywhere, which means I have some things built in (although I'm not using Emacs 29.1's tree-sitter stuff). I'm also not listing third party dependencies of these packages that I don't use directly (these are generally installed automatically through Emacs's package system).
My current third party packages are:
- Magit for creating basically all of my Git commits. I mostly don't use Magit for other Git operations, but I consider it essential for easy and flexible Git commits (for example, selective commits). I'll sometimes start Emacs purely to make Git commits with Magit.
- git-timemachine to let me
step through historical versions of Git-controlled files in Emacs.
- For Go programming I have go-mode, supplemented with
golint and govet. Now that I look at the
current state of those two latter packages, probably I should
remove them and replace them with something else.
(I'm out of date on the state of Go linters in general.)
- lsp-mode and lsp-ui for programming language
intelligence. My lsp-mode setup uses flycheck for checking instead of flymake, and
company for 'as you type'
autocompletion. I've done relatively extensive tuning of company's
keybindings to make them less obnoxious to me. I've toyed enough
with Eglot to be convinced that I don't want to switch to it.
(Although I could use company outside of lsp-mode, I don't currently do so. I have an old entry on some of my company autocomplete customizations.)
- flycheck-golangci-lint
to integrate the thorough golangci-lint Go linter with flycheck
(and thus through to my Go editing). This is an additional flycheck
backend that I have to switch to if I want to use it; it's not
automatically used by gopls and my lsp-mode
environment.
- diminish to turn down the
noise level of Emacs' modeline. I configure and use it through
use-package so I usually don't think about it.
- backward-forward
for easy, web-browser like jumping backward to where I was when I follow
a reference to something in lsp-mode. I wrote an entry about jumping
backward and forward.
- which-key, which gives
me a prompt of what my next options are in multi-key sequences; I find
this very useful for things I don't use regularly enough to have
memorized or wired into my fingers already.
- vundo to give me an easy way to
navigate backward through Emacs' sometimes unpredictable undo stack. I know that there
are more elaborate packages, like undo-tree, but vundo is quite simple
and meets my desires.
- smartparens to make it less
error prone to write and edit Lisp, and some other things (I have it
turned on in Python mode as an experiment). Smartparens isn't perfect
for Lisp (or Python), but it's broadly better than trying to do it by
hand. I don't use any key bindings for it or any of its smart commands
(or its strict mode), I just let it automatically insert closing things
for me. Some of its rearrangement commands might make my life easier,
but life is full of Emacs things to learn.
(One area of Lisp where smartparens falls down is single quotes, which in my Lisp are most often not paired but instead used to quote symbols. So every time I write "'thing" in Emacs Lisp I have to remove the trailing quote afterward. I'll live with it, though.)
- expand-region is a
little package to expand the Emacs region out to cover increasingly
big things. I use it partly for exactly that, but also partly as a
way of seeing where, for example, Emacs considers the current Lisp
s-expression or defun to end; if I expand the region to the entire
s-expression, I can just look.
- orderless, vertico, and marginalia to improve my minibuffer
completion. I've tuned all of these significantly so that they
work the way I like. See also understanding orderless, and also forcing minibuffer
completion categories, which
is important to me for the best use of vertico.
- corfu to improve the completion
at point experience into something more like what vertico does for
minibuffer completion. I only use it on graphical displays (ie, in X).
In general for completion, see my understanding of completion, which covers both minibuffer completion and completion at point.
- consult to show previews of
various sorts of minibuffer completions, along with additional
supporting packages consult-lsp,
consult-flycheck, and consult-flyspell.
- embark, which is in theory a
great way to do all sorts of things with a few keystrokes and in practice
I mostly use as a handy way to do 'reflow this region' when writing email.
I have embark-consult installed as well.
- try, a handy way to try out an Emacs package without going through the effort to add it and then remove it again.
Things I'm not really using:
- I have evil installed but I'm not
using it so far, apart from occasional experimentation; it turns out
to clash with my Emacs reflexes.
Keeping it around doesn't hurt and maybe someday I'll want it for
something.
- fold-this seemed potentially
useful and I put together some bindings for it, but in practice I don't
seem to touch it. I was planning to use it in conjunction with
expand-region (as a quick way of selecting a region to fold).
Folding feels like something that might be useful for navigating files or seeing an overview of their structure if I can figure out how to use it. But I'm not currently convinced it's the best option for this for me, instead of things like consult-imenu.
I have yaml-mode and rustic installed, although I almost never edit YAML in Emacs and don't work on Rust at all. Now that I look at the state of things, possibly I should be using plain rust-mode instead of rustic (which I have installed as a dependency of rustic).
Some of these packages are probably out of date or not ideal, since I set a number of them up some time ago.
(Most of these packages are installed from MELPA, which means I'm generally getting frequent updates on the ones under active development and more or less the latest development version. So far this hasn't been a problem.)
Sidebar: Things I tried and stepped back from
At one point I tried out origami (along with lsp-origami) enough to put together keybindings for it in my .emacs, but then I decided I didn't like it enough and commented the entire block out.
I experimented briefly with whole-line-or-region before discovering that it clashed with my Emacs reflexes (which expect traditional Emacs region behavior for C-w).