Skip to content
The Law Of Least Surprise Lattice For Emacs.
Emacs Lisp
Branch: master
Clone or download
Latest commit 665bae5 Nov 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Put image sources in their own directory Nov 16, 2019
LICENSE Initial commit Nov 4, 2019 Rebuilds TOC Nov 17, 2019
logo.png Shrink the surprisingly large logo Nov 16, 2019
lolsmacs.el savons Nov 9, 2019




The Law Of Least Surprise Lattice For Emacs:

Found to to reduce utterances of “What the heck?!” or the less stressful “Really? Really?!” by 16-39 percent of the Emacs user population in a double-blind study of 1742 users funded by Cyberdyne Systems, ENCOM, LexCorp, Protovision, Setec Astronomy, Tyrell Corporation, Wayne Enterprises, and Yoyodyne Propulsion Systems.


There are countless custom Emacs distributions (including but not limited to spacemacs, Prelude, Doom, scimax) and “better” default style configurations (Better Defaults, and every init file ever) out there and for good reason they all “scratch an itch”. Some of us switch to those distributions and most of copy from them (if you don’t you should) or both. The options and information can be overwhelming you ask yourself “Where do I even start here? What is really important and essential?” and the most important question “What are the differences between objectively good features that we can all agree on and features that are almost totally personal preference?” The truth is that we can’t but we do have a very good way to move forward anyway.

A UNIX guru once said that “There are no bad Emacs configurations, only poor applications of them.” and I buy that. Magicians hide the menu bar. Neophytes show line numbers. Speed demons use completion skeletons and ido. Terminal junkies only use Control and Meta. GUI people use word wrap. You get the picture. So it is hard to make a generalized application everyone is different but they all share one thing no matter the application: they’ve all suffered some serious pain using text editors.

Pain is the best motivator for change in life. Shock horror sadness and dismay follow a number of events using text editors. Emacs included. Other times pain comes in a more diluted form of disappointment. We’ve all exclaimed “What the heck?!” or the less stressful “Really? Really?!” Common among all of them is their origin the violation of the Law Of Least Surprise (LOLS).

The purpose of this lattice LOLSMacs tries to configure Emacs never to break the LOLS.

P.S. it is a lattice not a configuration distribution or initialization because all it does is establish some objective boundaries for operation that let you stay happy and focus on more important things.


First time Emacs users you are the audience. You should load this then never look at it and never think about it again. You’ve got no reason to do so just don’t. It was written carefully and thoughtfully just for you please know that.

Long time Emacs users you are the audience. You should load this then never look at it and never think about it again. You’ve got no reason to do so just don’t. It was written carefully and thoughtfully just for you please know that. But if you must look here are some of the things you might care about that you will be happy to no longer have to care about:

  • Nearly every operational interface setting is persisted (cursor minibuffer, desktop, kill-ring)
  • Files are how you expect them on-disk (auto save to a file not a backup, auto save on frame loss, window navigation, and user generated kill events, auto-revert)
  • User interface (windows and buffers) ready for programmers of any level
  • Extremely boring yet critical details are safely accounted for (comint, delete-selection, register display)
  • Uses 100% built in Emacs features and libraries no external dependencies
  • Great care taken to avoid subjective preferences (accepting that which surely has failed)

Table of Contents

Requirements And Compatibility

Emacs 26.


Download lolsmacs.el to your computer.

If you’re going to load it without using the package manager then you ought to place it in your preferred source directory for example ~/src.

git clone


If you want to load the package without using the package manager then add this to your init file

(and (load-file "~/src/lolsmacs/lolsmacs.el")

Otherwise you can install it using the package manager by calling package-install-file and when you’re asked “Package file name:” choose lolsmacs.el then add this to your init file

(require 'lolsmacs)

If you want to try out the features on their own before loading them start Emacs like this

emacs --no-init-file --load ~/src/lolsmacs/lolsmacs.el --eval "(lolsmacs-init)" &

Subjectivity Fails

They say that when you believe in something you should write it down. So I did here in this package. There is no better way then writing something down to reveal what you really think and it’s real level of truthiness lol.

  • 80 Column Character Width
    • Although it is pretty common it isn’t a fair assumption
  • Primarily File Based Development
    • There are systems whose development cycle isn’t strictly based around a file. For example tex-mode let’s you try things out with making file changes (behind the scenes it uses temp files). APL is an environment where you load up an image (XML or binary) containing your definitions and then persist them at the end. Not sure how GNU APL handles it but you probably don’t want to be saving that big blob all the time.


Thanks to the GNU Emacs Manuals Online and countless code snippets from other Emacs users.

Thanks to pixabay (sic) for the stock art.


You can’t perform that action at this time.