How To Reveal You’re An Emacs User Without Saying So

Here’s a bit of humor that I’ve had sitting in one of my browser tabs for some time. Over on the Emacs subreddit, Hlorri asks you to Tell me you use emacs (without telling me you use emacs). Although meant to be humorous—and many of the answers are humorous—a lot of them reveal important things about Emacs.

The most common humorous answer involves the strength of the user’s pinky. A typical example is, “I thumb wrestle with my pinky.” Another, that I really liked and could relate to was, “My editor’s config file is older than some of my co-workers.” Several offerings involved the wearing away of the text on the CTRL key.

Among the answers that weren’t so much funny as telling were:

  • I expect to get things done in a single app.
  • I cannot use essentially any other piece of software without accidentally opening 10 print dialogs or new blank documents/tabs at some point. (and several variations on this theme)
  • There’s a mixture of awe, confusion, and mystery when I pair program with co-workers.
  • Whenever someone wants to give me any “advice” I frown.
  • I interactively do right what other people write programs to do wrong.
  • I use the same program for e-mails, coding, calendar and keeping notes (and probably much more).
  • I write utilities in elisp instead of bash.
  • You mean your code editor doesn’t have a media player, or a planner, or its own window manager?

And a bunch more. Take a look at Hlorri’s post to see them all.

Posted in General | Tagged | Leave a comment

The Brilliance of UTF-8

Vishnu Haridas has a nice post on UTF-8 and how it works. He’s impressed with the brilliance of its design. And why not? It provides code points for virtually every written language in the world while maintaining compatibility with ASCII. Among other things, “compatibility” means that any ASCII character is represented the same way in UTF-8 and that every file containing only ASCII characters is a valid UTF-8 file and that every UTF-8 file containing only ASCII characters is a valid ASCII file.

It almost seems like magic and Haridas is right to be impressed. He doesn’t mention the back story and if he’s unfamiliar with it, he’d be even more impressed. As I’ve written before, UTF-8 was designed over dinner on a paper placemat by the legendary Ken Thompson and Rob Pike. But wait. There’s more. After dinner Pike and Thompson returned to Bell Labs and while Thompson implemented the packing and unpacking code, Pike dug into the Plan 9 graphics library and began changing it to use UTF-8. By the end of the night they were done and by the end of the next day, Plan 9 was running UTF-8 and only UTF-8.

These days it seems we can’t even get a vacation request accomplished that quickly but Thompson and Pike designed, implemented, and ported into Plan 9 a world changing character encoding that revolutionized digital typography in the space of a couple of days.

Another part of the back story is that Pike and Thompson didn’t just decide to invent UTF-8 on a whim. They were motivated by what they considered the inadequate, committee designed proposals floating around and, in particular, one from IBM that they were asked to review. You can read the whole story as told by Rob Pike if you want to know all the details and get a peek at Thompson’s original code.

Posted in General | Tagged | Leave a comment

Bell Labs

Editorial Note

I’ve had this post in my queue for over a month because just as I was about to publish it, the link to Tasbolatov’s post stopped working. It’s just now come back on line so I’m happy to be able to finally publish it.

I’ve been a long time admirer of Bell Labs and the culture that they engendered. It was a marvelous thing and for a while I dreamed about being part of it. We nerds tend to identify Bell Labs with the CSRC and Unix but it was so much more. They did, after all, invent the transistor, the laser, and surprisingly the “modern” vacuum tube, as well as many other things that we now take for granted.

If you’re interested the history of Bell Labs and their many accomplishments, this post by Sabyrzhan Tasbolatov is a nice, short summary that explores the major Bell Labs achievements and the people behind them. It’s an impressive list.

Even more interesting to me is the article by Areoform that considers Why Bell Labs Worked. If you’ve been around Irreal for a while you know that I have little patience with (non-engineering) management meddling in Engineering activities. It’s easy to think that I’m being naive and that of course management needs to keep a tight reign on the engineers to make sure there’s no slacking off and that company goals are being actively pursued.

I maintain, as I always have, that this is special pleading from the control freaks and is actually counterproductive. The Labs stand as a blazing refutation of the nonsense from the special pleaders. They accomplished achievement after wonderful achievement without micromanaging or meddling from the suits.

Marvin Kelly, the man who built Bell Labs, felt that

[I]t wasn’t Kelly’s job to micromanage people. Yes, they worked for him, but in his model, he wasn’t their employer — he was their patron.

That attitude made all the difference but, of course, according to the control freaks it couldn’t possibly work.

A case could be made, I suppose, that AT&T enjoyed a privileged position due to their status as a legal monopoly and I suppose it did help prevent the suits from constantly asking, “What have you done for me lately?” but at the end of the day, the Bell Labs approach produced far more than the “realistic” approach favored by current day management.

Posted in General | Tagged | Leave a comment

Semantic Line Breaks

Over at sembr.org, Mattt has an interesting post on what he calls semantic line breaks. The idea, as he expresses it, is

Semantic Line Breaks describe a set of conventions for using insensitive vertical whitespace to structure prose along semantic boundaries.

That sounds a little abstract but in practice it means adding a line break after each sentence and after logical breaks in the text. Here’s a more accessible description:

When writing text with a compatible markup language, add a line break after each substantial unit of thought.

There’s a specification at the link that specifies where the line breaks could/should occur.

The point of all this is that it makes it easier for the author or editors to read the input text while at the same time not affecting the way the text is rendered at output time. That works because of the way many markup languages—including, of course, Org mode—work. Take a look at the sembr.org site for the details and the precise specifications.

This seems like something that might be useful for many writers but, personally, I find that using visual-line-mode is enough for me. It shows all the text on screen by default and although it doesn’t break lines at semantically significant places, the semantic structure of the text comes through clearly for me.

But you may be different. If you find that adding an occasional line break helps make the meaning of your text clearer than by all means add them. It won’t affect the formatting of the output and it may help you and any editors you have in the process to parse the input.

Posted in General | Tagged , , | Leave a comment

Numeri

Roman Numerals. On the one hand, it’s hard to understand why anyone cares anymore. Some, like the late Rich Stevens considered them an anachronistic barbarism and labeled his books “Volume 1, 2, …” rather than the more conventional “Volume I, II, …”. Others continue to label volumes with the conventional Roman numerals and, of course, there’s all those buildings with their erection date labeled, of course, with Roman numerals on their facade.

It used to be that everyone learned how to read and write Roman numerals in School but, according to a teenager of my acquaintance, that’s no longer the case. Were it not for their ubiquitousness on the front of buildings and multivolume books, I’d be happy so see them disappear from our milieu but for the time being, it seems useful to be able to at least read them.

Really, it’s not much of an effort. There are only 7 symbols and they are combined in a regular way to form all the numbers that we’re apt to see today. It’s true that there’s more than one way to form some numbers but all of them are easy to decipher. It’s hard to see how anyone with more than a couple of brain cells to rub together would take more than 15 minutes to completely master the system.

Still, Common Lisp is famous for having functions to convert between Arabic and Roman numerals. That’s less true for Emacs Lisp but there are, apparently, some functions spread across a couple of packages to do the job. Charles Choi doesn’t like that so he wrote a package to provide the capability in a single package.

I suppose, if you squint hard enough, you can imagine cases where you might want to do this sort of thing programmatically but, really, it’s mostly too easy to do manually to need a function. Still, if you do have a need to do this programmatically, Choi has got you covered.

Posted in General | Tagged | Leave a comment

Obscure Emacs Packages

It’s September so there’s a new Emacs Carnival. This month the topic is Obscure Emacs Packages. I have to admit that when I first saw the topic I wasn’t too hopeful that it would be interesting but, of course, I felt the same about the “Elevator Pitch” topic and we all know how obsessed I ended up being with that.

Now that I’ve read my first post for the new topic, tusharhero’s Obscure Emacs Packages, I guessing that I’m going to end up loving this topic too. Tusharhero’s post actually lists 4 obscure packages—none of which I was familiar with—that many Irreal readers might find useful.

By all means, take a look at his post for all the details but I want to mention two of them that I think could be particularly useful. The first is Tinee that is an implementation of Emacs Everywhere specifically for Wayland, which isn’t supported by Emacs Everywhere. The package was written by Tusharhero himself who says it’s not as full featured as Emacs Everywhere but if you’re an Emacs user on a Wayland system, it seems definitely worth taking a look at.

The other package is Emacs Reader by Divya Ranjan. It aims to be a complete replacement for PDF-tools and DocView. It’s still in the early stages but Tusharhero says it has “RIDICULOUSLY better performance and smoothness and responsiveness in comparison to both PDF tools and DocView.” It’s still early days for this package but if it lives up to its promise, it will be a package that almost everyone will want.

Take a look at Tusharhero’s post and see if there’s anything there for you.

Posted in General | Tagged | Leave a comment

Emacs Bankruptcy

In the developer world, we often talk about two types of bankruptcy:

Email Bankruptcy
This is when we have so many unread emails that we simply give up, delete them all, and start over.
Emacs Bankruptcy
This is when our Emacs configuration becomes so big and complicated that we no longer understand it and start over by deleting our configuration and beginning again with a blank slate.

My Anglo-Saxon upbringing pretty much guaranteed that I’d be resistant to either of these. I’m far too anal to leave any email unread or at least scanned. It’s not really much of an issue today since, unlike the old days, I can access and read my email from wherever I am. That and my zero inbox policy ensure that I never get behind with Email.

As for my Emacs configuration, it’s almost 20 years old and while it has grown and had some minor changes, I’ve never felt the need—or even the urge—to quit and start over. It is, in short, an organic entity that grows and changes in step with my needs. Why would I want to abandon it and start over?

All this discussion is in reaction to a video by TrepidTurtle on the Emacs subreddit about Emacs bankruptcy. TrepidTurtle views Emacs bankruptcy as a natural and common process in our Emacs life. He says, for example, that he was aghast to discover that his Emacs configuration was over 2000 lines long and remedied that by deleting his entire Emacs environment—packages and all—and starting over from scratch. Implicit in his argument is the belief that a minimalist configuration is better.

I don’t understand that. My configuration is 2055 lines and while there may be some cruft most of it is carefully curated packages, settings, and bespoke functions that I’ve developed over my Emacs career. Why would I want to delete all that work?

As for having a minimalist configuration, I add things as I need them or think they will enhance my workflow. I see nothing ipso facto virtuous about having a minimal configuration.

Still, people’s opinions differ and you may be sympathetic to the idea of starting over. If so, take a look at TrepidTurtle’s video for some ideas as to how to do that.

Posted in General | Tagged | Leave a comment

Must Have Emacs Packages In 2025

A few years ago, starting in 2016, I wrote a series of articles (1, 2, 3) about my favorite Emacs packages and tips. Reading them now, almost ten years later, I find they’ve aged well. I still use everything on the list and my “can’t live without” packages are pretty much the same. I didn’t include Org mode or Magit because, even then, they were given must haves.

I was reminded of all this when I saw a post on the Emacs subreddit from macro_. The post asked what are the must have Emacs packages in August 2025? Once you get past the usual ankle biting, the answers are revealing. Although consult and Ivy were mentioned frequently there seemed to me be less emphasis on actual editing and more on things like LLM and LSP. For example, no one mentioned Steve Purcell’s indispensable whole-line-or-region. I use it many, many times everyday—probably more than any other package.

Still there are plenty of good suggestions in the comments and they are well worth taking a look at. Everybody’s opinion will differ, of course, but I find it really useful to see what others think and why they think it. Sometimes they even convince me to try out one of their favorites. Take a look at the comments and see if there’s anything there that might improve your workflow.

Posted in General | Tagged | Leave a comment

Hacking Emacs File Completion

James Dyer has another in his series of posts describing the sanding down of his workflow. This time he troubleshoots and resolves a problem with minibuffer file completion. His specific problem was that he didn’t like the way fuzzy file completion was working.

The default behavior was to have whatever he entered match any file name that had the same letters in the same order even if they weren’t consecutive. What he wanted was to match any files whose name had a substring that matched his input.

As usual, Emacs has you covered. There’s a completion-styles parameter that you can set to get the exact behavior he wanted. Except it didn’t work. It turned out that another function in the call path was resetting completion-styles to the behavior he was trying to avoid.

It wasn’t too hard to fix this and you see how he did it in his post. There was another small issue that he also fixed. Again, see Dyer’s post.

The meat of his post for me was his three conclusions at the end:

  1. The source code is always easily available and you can solve most problems by looking to see what is actually happening.
  2. Be wary of local versus global settings.
  3. With Emacs, there’s always another way. If you don’t like the way something works, Emacs probably provides another way of achieving the same end.

Most people probably aren’t going to care about the issue Dyer was fixing—at least I don’t care about it—but the point is that whatever Emacs is doing that’s not quite right for you, it’s almost always pretty easy to fix it.

Posted in General | Tagged | Leave a comment

🥩 Red Meat Friday: Can We Stop Acting Like 5 Year Olds

I recently saw this Tweet by John Carmack about developing new operating systems. Carmack is of the opinion that it’s rarely justifiable and when it is, “[Y]ou practically need an isolated monastic order of computer engineers.”

I don’t have an opinion on the matter and I’m willing to concede that either side of the argument may be right so this post isn’t about that. Rather, what caught my attention was this remark by Carmack about his strenuous objections to a plan by Meta to build XROS, a new operating system:

They also got me reported to HR by the manager of the XROS effort for supposedly making his team members feel bad…

Did you get that? Some reputedly grown up engineering manager went crying to Mom because someone was saying mean things that made him and his team feel bad. If you’re a parent, you’ll be familiar with this behavior from your five year olds but you’re probably expecting better from your colleagues.

Sadly, this behavior is wider spread than you’d expect. I remember a friend of mine getting reported to HR because his keyboard was too loud. The complainers didn’t talk to him and try to resolve things. They just went running to Mom.

I don’t know about you but I find this sort of behavior revolting. Grow up for goodness sake. It’s been a long time since you were five.

Posted in General | Tagged , | Leave a comment