Wandering Thoughts archives


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).

programming/EmacsPackages-2023-11 written at 22:33:24; Add Comment

Page tools: See As Normal.
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.