On “Everything In Emacs”

It’s a matter of faith here at Irreal, and in many other places, that any function that can be brought into Emacs should be brought into Emacs. Oddly, to us true believers, there are those who disagree.

One such person is Michał M. Sapka who argues that editors are for editing text not flying spaceships. Sapka is not the usual know-nothing who’s never gotten within six feet of Emacs. He has, in fact, been using Emacs for a number of years. Recently, he’s returned to Vim specifically because he thinks that editors should edit text and not do things like read email or handle version control. He says that if he wants X/—where /X is not an editing function—he’ll use a dedicated X application. He wants small, dedicated, programs that do one thing well. That is, of course, the Unix Philosophy that almost everyone claims allegiance to.

Despite claiming otherwise, it seems to me that Sapka doesn’t really understand Emacs’ point of view. As I’ve said many times, I think that point of view is best expressed as saying that Emacs is today’s version of a Lisp Machine. Viewed that way, Emacs is not an editor. It does have an editor function but as with the original Lisp Machines, that’s just one of many functions. As much as I hate trotting out the tired old meme, Emacs really is more like an operating system that thinks of the underlying operating system as a device driver.

Emacs has modes and packages that act like Sapka’s dedicated apps and as Àlvaro Ramírez has shown you can even glue them together so that the output of one is the input of another. In short, you don’t have to give up the Unix Philosophy to use Emacs. You can have it while at the same time enjoying the many advantages of using Emacs.

Posted in General | Tagged | Leave a comment

Cycling Through Line Wrapping Methods

One of the strengths of Emacs is that for most operations there are options. Line wrapping is a case in point. There are several line wrapping methods and which one you use depends on context.

When coding, you may not want any line wrapping. For text, it’s my experience that wrapping at fill-column is usually a good solution unless you need to export the text. In that case, assuming a fixed line length probably won’t work that well: a good line length on a computer screen is going to be a mess on a cell phone. I’ve long since solved that problem by using visual-line-mode for my exported text. It looks good on my screen as I’m writing it and will automatically adjust to whatever screen that it’s displayed on—at least for the devices that commonly export to. A lot of people use it for all their text modes.

Still, there’s a reason we have all those wrapping methods and depending on what you’re doing, you may want to use one or the other. It would be nice to have a way of cycling through the various methods. Sacha Chua to the rescue. She has a nice bit of code that cycles through

  • Having everything on one line
  • Breaking the line at the fill-column
  • Having at most one sentence per line but respecting fill-column
  • Having one sentence per line irrespective of fill-column.

That makes it easy to pick the option that’s best for any particular situation or even to experiment with the options. All the code is in the post and is easy to follow. If you find yourself needing to switch between various line wrapping methods, take a look at her post for some ideas.

Posted in General | Tagged | Leave a comment

Org Links Everywhere

Sacha Chua has a very nice post on using Org links everywhere. Chua really likes the ability to insert links that Org mode provides and wishes she could use it everywhere. It’s Emacs so of course she can do that.

Her post is a long explanation of how she accomplished that. Being Sacha, she wanted some specific actions depending on the type of link and where it was being inserted. You can read about those rules and the code she uses to accomplish them in her post.

Her exposition is fairly long and detailed so rather than try to summarize it, I urge you to take a look at her post. If you’re interested in the same sort of thing, her code is available in the post itself and from links that she provides.

As Chua says, “Consistent keybindings mean less thinking.” Being able to use Ctrl+c Ctrl+l to insert links anywhere—not just in Org buffers—is a real win, especially if you have some bespoke rules as to what the default link description should be.

Chua’s post is another example of the customizations that allow her to get so much done but, more importantly, how the flexibility of Emacs allows a user to fine tune Emacs to be exactly what’s needed to accomplish the user’s workflow with the least effort.

Posted in General | Tagged , | Leave a comment

Turning Off The Mouse In Emacs

If you’ve been around Irreal for even a little while, you know I hate using the mouse. I don’t like to use it anywhere but I particularly hate using it in Emacs. So I don’t—mostly. I use WebKit to display my HTML emails and it’s convenient to use the track pad (or the arrow keys) to scroll the email but mostly I never use the mouse while I’m in Emacs. Unfortunately, it’s really east to get inadvertent mouse actions with a track pad because your hands naturally lie on it when you’re typing.

If you, too, hate having to deal with the mouse, James Cherti—whom I’ve written about before [1, 2, 3]—has a solution. His inhibit-mouse package effectively turns off the mouse when you’re in Emacs and the mode is enabled. It seems like a nice package and may be just what you need.

As much as I hate the mouse—including the inadvertent clicks that take me to a different window in the middle of my work—I’m not sure I’d want to turn it off. The times when I do want to use it, it’s is to save work and having to stop and re-enable the mouse largely negates that.

Still, you may differ and, if so, this package could be just what you need to bring your runaway mouse under control. Cherti has a good write up about it in his README at the above link so take a look if you think you might be interested.

Posted in General | Tagged | Leave a comment

Saving And Restoring Tab-sets

As I’ve said before, I’m not a fan of the Emacs Tab bar. Plenty of serious people disagree so it boils down to a matter of taste rather than virtue. Grant Rosson is a case in point.

Rosson is a Philosophy professor and a serious Emacs user—and so one more data point in the argument that Emacs is not just for technical users—who likes to organize his lecture notes as a bespoke set of tabs for each lecture.

The problem is that there’s no way of saving that tab bar configuration. Since he sometimes gives the same lecture more than once a week, he needed a way of saving and restoring his configurations. But, of course, this is Emacs so if you need some functionality, you can almost always add it. Note, again, that Rosson is a Philosophy professor not a developer but like many Emacs users he has nevertheless learned enough Elisp to customize Emacs to his liking.

The result was tab-sets.el, a utility that saves and restores tab sets. It was just what he needed. When he had to give a lecture again, he simply restored the tab set and had all the necessary files right there at his disposal. If you like tab bars and sometimes want to recreate them, take a look at Rosson’s post and code.

I love this type of story. Someone far removed from the engineering milieu is not only a dedicated Emacs user but has mastered it enough to make his own non-trivial customizations. The down side is that it makes me even less tolerant of people who are in engineering and whine that Emacs is too hard and that they don’t have time to learn it. Rosson stands as a damning repudiation of that.

Posted in General | Tagged | Leave a comment

🥩 Red Meat Friday: Live Wallpapers

As most of you know, I’m—if not exactly a mac-head—an Apple user for most of my computing needs. I like the way the way all my devices interoperate and can share data, and, of course, I like—require—that it provides me with a Unix environment. I even, sort of, like the way Apple animates certain aspects of its UI.

What to make of this then? On the one hand, it looks pretty cool but I’m not sure I’d like to have all that superfluous motion in my day-to-day work environment. It seems to me that it would be distracting.

Apple does something like this on the Tahoe lockscreen, which is fine and not distracting but when I’m actually coding or writing, I’m pretty sure I could do without the distraction.

Of course, I’m old and crotchety so maybe you feel differently. What do you Irreal readers think? Is this something you’d want on your system or do you agree with me that it’s more likely to be annoying noise?

Posted in General | Tagged | Leave a comment

Reading Papers And Taking Notes With Org Roam

Kiran Gopinathan has a very interesting video on how she uses Emacs, Org-Roam, and Zotero to do her literature reviews. If you aren’t familiar with the concept, Literature Reviews are the process of reading papers related to your current research topic. Typically there are a lot of papers and you have to take notes as you go along so that you can draw it all together for your own research and papers.

Her video serves as a real life example of a Zettelkasten in action. A she reads a paper, she takes notes and, critically, links them to the other papers she’s read on the current topic. Her workflow involves storing the papers in Zotero and automatically updating her BibTeX file as new papers are introduced.

You can see Gopinathan’s method in action in her video. Things move along fairly rapidly and can difficult to follow so you have to beardown when watching it but it’s worth the effort. Even if you’re not an academic, it’s easy to see how the process could be useful for organizing your own data.

Although she doesn’t mention it in the video, her Org-Roam configuration is available online in this Gist. Take a look at it if you’re interested in her method. The video is 16 minutes, 6 seconds long so it should be fairly easy to fit into your day. On the other hand, you may want to watch it more than once to wring out all the information it contains.

Posted in General | Tagged | Leave a comment

A Priestly View Of Emacs

Priests and other religious leaders of various persuasions have been known to use Emacs. It’s not common, of course, but Irreal has mentioned a couple of them—most recently Randy Ridenour—but in almost 16 years, I can’t remember more than two.

Until now. MykhailoKazarian is a priest in the Orthodox Church of Ukraine and is far from a casual Emacs users. Rather than using Emacs to write his sermons, papers, and keep church records, Father Mykhailo is an actual coder who’s worked with Pascal, Python, and Java.

Due to the current difficulties in the Ukraine, Father Mykhailo has had to work with less than ideal conditions, including poor Internet connections and—what some would call—under powered hardware. Through it all he’s been an Emacs user. He says he’s still an Emacs user in 2025 and has a long post on why.

One of the things you often hear about Emacs is that it’s bloated, needs a lot of memory, and won’t run reasonably on anything but the most powerful hardware. Put aside, for the moment, the history of Emacs that puts the lie to that claim, Father Mykhailo is running Emacs on a Raspberry Pi—sometimes, when conditions warrant, powered by an automobile battery—and still manages to enjoy the many benefit that Emacs offers.

Father Mykhailo’s post goes into a lot of detail on why he’s still using Emacs after 20 years and plans to keep on using it. Take a look at his post for a deeper dive.

Posted in General | Tagged | Leave a comment

Entering Dates In Calc With Org

Marcin Borkowski (mbork) has an interesting post on entering dates in Calc mode. The short version is that he often enters dates in Calc but it’s a painful exercise. He’d much rather enter them the same way you do in Org mode, which is intuitive and flexible. That flexibility comes at the cost of being complicated but that’s mostly because there are so many easy ways to specify a date.

Naturally, mbork wanted to be able to enter Calc dates in the user friendly Org mode way. That turns out to be surprisingly easy. After the boilerplate it’s just a couple of lines of code plus another line to bind a key sequence to the function in the Calc key map. Read mbork’s post to see what I mean about easy.

What struck me most about the post was his mention of org-read-date, which Org uses to read dates. It’s incredibly flexible and, as mbork shows, usable in non-Org contexts. Take a look at the doc string for org-read-date to see what I mean. Even though I spend a huge amount of time in Org mode and enter a lot of date/time stamps and even though I’ve read the documentation on entering dates in Org, I didn’t remember how powerful the function is. Take a look at the doc string to see all the ways you can specify dates.

This is just another example of Emacs’ extensibility. Mbork had a problem and was able to solve it by gluing together a couple of existing Emacs functions that nominally had nothing to do with each other.

Posted in General | Tagged , | Leave a comment

Extensibility In Lisp And Emacs

Joe Marshall has a nice post on Why Lisp Still Matters. He observes that Lisp tends to attract the very best programmers but the reason for that and the reason for Lisp’s enduring success is its extensibility. As Marshall says, the thing about Lisp is that it’s based on the Lambda calculus, which means, among other things, that the language can be extended in terms of itself. In practical terms, that means that you can use macros to define new syntax and provide the semantics of that new syntax with some functions.

All of this is fairly well known and Marshall has a good exposition of the argument in his post. As I was reading it, it popped into my mind that it’s the same with Emacs. It’s not—just—a matter of Emacs being written in Lisp. The similarity is based on their extensibility. Like Lisp, if you need some new Emacs functionality it’s easy to build it yourself using the language the Emacs itself is written in. As with any Lisp, you can even extend Emacs’ Lisp language if you need to.

A lot of Emacs’ extensibility is, of course, enabled by it’s being written in Elisp. That fact should give pause to all those who are always agitating for Emacs to be rewritten in Java, Javascript, Python, Ruby, or whatever. I doubt every much that we’d have the same level of extensibility if that were to happen.

Posted in General | Tagged , | Leave a comment