A couple years ago, John Wiegley and Sacha Chua made a video about Wiegley’s use-package package. I’ve mentioned it a couple of times in passing but never written about it. Recently, I stumbled across it again and rewatched it.
There’s a lot of interesting material in the video and I decided that even though it’s old it was worth writing about. If you aren’t already using
use-package, you should definitely take a look. The package really does make your configuration simpler and more logical. It can even be used to speed up Emacs’ start time: Wiegley reports that he has over 200 package and his Emacs starts in about a third of a second.
Even if, like me, you’re already using
use-package, there’s still a good reason to spend a half hour watching the video. Wiegley discusses some things I didn’t know about. First is the
macrostep package. If you only use it to see exactly what
use-package is doing, it’s worth installing. The
use-package macro confuses many people. If you watch the video and then expand an invocation of the macro in your configuration, you’ll easily understand what’s going on. It’s really easy to use and if you bind a key sequence to invoke it1, it won’t be loaded until you need it.
Another thing I learned is that you can fold the text in a buffer so that any text that starts more than columns from the left margin isn’t shown. Oddly, this is a built in functionality (bound to Ctrl+x $) so you don’t need to get anything to use it.
Once you start using
use-package, you’ll automatically pull in
bind-key so you’ll have
describe-personal-keybindings available. When you invoke it, you’ll get a nice list of all the keybindings you’ve defined along with what, if anything, they replaced. That can be really handy for organizing your configuration.
Finally, one of the nice things about
use-package is that you can configure it to record how long it takes to load and configure the packages it loads. That can really be handy for tracking down the hot spots in your configuration load time. It all goes into the
*Message* buffer so you can ignore it except when you need it.
I really like
use-package and have converted my entire
init.el to use it. If you aren’t already using it, you should start and the video will go a long way towards convincing you of that.
UPDATE: Added link to video.
Or you can ask
use-package to delay loading it explicitly.