🥩 Red Meat Friday: Acronym Of The Day
Rick Manelius has proposed a new acronym: AI;DR. It stands for “AI; Didn’t Read”. He says that it actually originated with @seclilc here. Manelius isn’t an AI hater and, if fact, uses it himself. It’s just that he objects to asking someone a question and getting back an unedited—and probably unread—answer from a chat bot in reply. His new policy, he says, is that if you can’t be bothered to read and edit it, then he’s not going to bother reading it.
Really, responding to someone’s question with a buffer full of AI slop is profoundly disrespectful and will cause you to forfeit the goodwill and respect of your victim. If you want a less touchy-feely explanation, Manelius has an update pointing to dontpastetheai, which expresses the same sentiment in less circumspect language.
I’m sympathetic to all of this. If I ask someone a question, it’s because I want the benefit of their wisdom not some distilled twaddle that may not even be correct. If they don’t know or don’t have time at the moment to provide a detailed answer, I’m fine with their saying so. Just don’t send me some slop that even they can’t be bothered reading.
Tweaking Emacs Scrolling Behavior
For me, one of the most difficult Emacs behaviors—or at least “normal” Emacs behaviors—to understand is scrolling. The default behavior is so unintuitive and jarring that it kept me from embracing Emacs for a long time. It was only after I took the plunge that I discovered that that behavior, like everything else in Emacs, is configurable.
That was almost 20 years ago when I was just starting and knew next to nothing about Emacs configuration but I was able find the solution on the Internet. Here’s what I’ve had in my init.el almost from the beginning:
(setq ;set reasonable scrolling
scroll-margin 0
scroll-conservatively 100000
scroll-preserve-screen-position 1)
Back then, I had no idea what any of it meant, only that it made Emacs scrolling rational by my standards. It’s been sitting there undisturbed ever since.
Now James Cherti has a really excellent post that expains all the fine points of configuring scrolling. He explains the above lines, which most people probably have in their configuration. If you want Emacs scrolling to behave as it does in every other application, you can leave them as is but you can tweak the behavior a bit if you like. Cherti has all the details.
But wait. There’s more. There are similar settings for horizontal scrolling that you might like. I’ve never had any problem with horizontal scrolling—probably because I’ve always wrapped lines in one way or another—but they’re there if you need them.
There are some other tweaks that you can apply to delay fontification during scrolling to speed things up a bit. Again, this is not something that I use but if you deal with large files, you may find it useful.
In Emacs 29 and later you can set pixel-precise scrolling to make scrolling over images more pleasant. There are a few other tweaks in Cherti’s post so you should definitely take a look at it. There’s a lot of good content and even if you use only a bit of it, you will find his post worthwhile.
Fixing Define-word
My go to Emacs in-line dictionary is abo-abo’s define-word. It pops up a definition of the word at point in the minibuffer. I use it several times a day. Lately, though, it has been returning “zero definitions found” on every invocation. This problem predated my update to Emacs 31.1 so it’s not related to the version of Emacs.
Today (Tuesday) I finally got fed up and decided to track down the problem. It wasn’t too hard. It turns out that the problem is that define-word calls the on-line dictionaries with HTTP rather than HTTPS and the sites are rejecting the connections. There’s already a pull request (2026-08-22) for the fix but as of today (2026-08-25) it hasn’t been merged or uploaded to MELPA.
I messed around for a while but couldn’t get any of the obvious solutions to work so I gave up and added
:init
;; Until define-word is updated in MELPA
(defcustom define-word-services
'((wordnik "https://wordnik.com/words/%s" define-word--parse-wordnik)
(openthesaurus "https://www.openthesaurus.de/synonyme/%s" define-word--parse-openthesaurus)
(webster "https://webstersdictionary1828.com/Dictionary/%s" define-word--parse-webster)
(offline-wikitionary define-word--get-offline-wikitionary nil))
"Services for define-word, A list of lists of the
format (symbol url function-for-parsing).
Instead of an url string, url can be a custom function for retrieving results."
:type '(alist
:key-type (symbol :tag "Name of service")
:value-type (group
(string :tag "Url (%s denotes search word)")
(function :tag "Parsing function"))))
to the use-package for define-word. That’s just a copy of the definition of define-word-services from the define-word source. Note that it’s important that it goes in the :init section so that the definition gets established before define-word is loaded.
It’s a messy solution but it will do until the fix is merged and percolates up to MELPA.
Walmart Accepts The Inevitable
Those of you longtime Irreal readers who have been following my quest for living a digital life know that I long ago gave up shopping at Walmart. One reason for that is that Covid 19 taught us that Amazon would deliver the same products to our door for pretty much the same price. The other reason, though, is that Walmart stubbornly refused to accept Apple Pay.
Walmart told all sorts of stories—none of them true—for why that was. They continued, for example, to blame contractual obligations to CurrentC long after that benighted organization met its well deserved demise. There were other stories but the truth was always the same: Walmart wanted to harvest customer data, which they couldn’t do with Apple Pay, so they insisted that customers wanting contactless checkout scan a QR code to pay. We here at the Irreal Bunker are famously old and grumpy but the QR code thing didn’t go over well with anyone.
Now, finally, Walmart has capitulated and agreed to accept Apple Pay. Read their announcement. All the reasons they give for accepting tap-to-pay applied 12 years ago just as well as today but Walmart still had hopes of getting their hands on that sweet, sweet data and refused to accept the inevitable.
Walmart will be rolling out the change gradually. If you’ve been waiting for Walmart to accept Apple Pay and are wondering when it will be available in your state, here’s the schedule.
I remember sort of enjoying browsing around Walmart before I gave it up for Amazon but at this point—even with Apple Pay—I’m not sure I’ll go back. Walmart, of course, won’t notice, but losing customers one at a time is the price you pay for ignoring customer preferences for years.
Thanks to John Gruber at Daring Fireball for the pointer.
Posted in General | Tagged Digital-life |
Emacs 31.1
Happy news this morning. Sean Whitton has announced the release of Emacs 31.1. As usual, it’s available at the mirror nearest you. Note, however, that the URLs in Whitton’s announcement have a typo. See this message from Eli for the correct URLs.
I’m writing this with the just built new Emacs and everything seems fine. I had a bit of trouble downloading the source because, apparently, some of the mirrors haven’t updated yet. If that happens to you, just repeat the request a time or two and you should get everything. After that, enjoy your new Emacs and all the goodies it brings. As always, Mickey has his usual exegesis of the changes.
As I invariably say at times like this, Eli and the rest of the development team deserve our huge thanks for their selfless efforts on our behalf.
Setq And The Others
James Cherti has an interesting and useful post about the relative efficiency of setq, setq-default, setopt, and customize-set-variable. Cherti justifies this concern on their effect on Emacs startup time but according to well established Irreal dicta this doesn’t matter because we seldom restart Emacs so a few seconds more or less simply don’t matter.
Oddly, there are some people who pay no attention to Irreal dicta and who obsess about every millisecond—Cherti’s term—of Emacs startup time. For those people and those who worry about execution times in general, Cherti’s post is very useful and explains why some of those commands are faster than others.
The crux of the matter is that defcustom can include a setter method that can be arbitrarily complex. Cherti has a nice example of this that will help you understand what’s going on. Cherti says that very often there’s no reason to invoke that setter method during startup and that setq or setq-default is faster and just as useful. Commands like setopt and customize-set-variable always call the setter method so they may be slower. Cherti’s examples show how to avoid unnecessary bottlenecks.
Cherti also shows how even the :custom keyword in use-package can trigger the setter methods of those variables and gives some workarounds. The main problem is that it’s hard to know when you can avoid the setter method and when you can’t. Sometimes, you just have to read the source code to figure it out.
Obsessing about startup times aside, it’s nice to have an explanation of what these commands do and how their use might affect run time. Cherti’s post is relatively short and well worth a minute or two to read.
HTML Preview For Org Mode
Randy Ridenour has an interesting post about previewing an Org file in your browser. If you’re like me your first thought is probably, “That’s easy. Just export the Org file to HTML and display it right from the Org export dispatcher.” I do exactly that to preview my blog posts. I simply type Ctrl+c Ctrl+e h o and my post appears in my browser. Of course, it doesn’t look exactly like the final product because it uses the default Org CSS instead of the WordPress theme that you see on the Irreal site.
And that’s exactly the point. Ridenour has his own opinion on how his markup should be formatted. Five years ago, I wrote about how to to add your own CSS formatting to an Org file when you export it to HTML but those methods all required adding some text to the Org file. Ridenour’s method does all that in a function that he can call to export his Org file to the browser. The process is pretty much the same as using the export dispatcher except that he gets to have his preferred CSS applied to the output.
The other advantage of his method is the he arranges for the automatic removal of the generated HTML file. The export dispatcher method requires that you delete the files manually. I do that periodically using Embark, which makes it easy but I still have to remember to do it. If you’re looking for a fast and easy way to preview an Org file in your browser, take a look at Ridenour’s post.
🥩 Red Meat Friday: What’s Wrong With This Picture?
If you’ve been around Irreal at all, you know that I have little tolerance for stupidity on the part of the “suits”. My go to example is Boeing where an essentially ignorant group of finance based suits turned the world’s premier aircraft manufacturer into such a bad joke that knowledgeable people refuse to fly on their planes [1, 2, 3, 4, 5, 6, 7, 8].
There are those that believe that at least government is immune to this sort of craziness. It isn’t. The latest example is ICE deploying body cameras on its agents. That sounds like a good idea. After all, ICE agents have been accused of misconduct in the recent past and this is a good way of resolving the issue and exonerating responsible agents while identifying rouge agents. Most importantly it would serve to assure citizens that their government was behaving responsibly.
Time for the suits to weigh in. According the the AP, “ICE will release body camera video only when seen in the agency’s ‘best interests,’ policy says”. You don’t have to be a public policy expert to see the problem. Anyone with a modicum of intelligence will (correctly) conclude that any event where the video is withheld is one where there was misconduct. The result is that the suits have devised a way of automatically reporting when their agents misbehave; a useful mechanism to be sure but certainly not what they intended.
It’s not that this policy is at all unusual. Many, if not most, officials have a similar policy. The difference is that they have enough sense not the say the quiet part out loud. It makes you wonder how these people, who have so little management ability, get to be in charge. I’d tell you but Irreal doesn’t do politics.
Setup For The Casual Suite
Charles Choi has announced the release of Casual 3.0. There are now 26 modules in the Casual suite but this release is about providing an easier setup for the suite. Prior to this release, each module had to be set up separately. As Choi says, that made sense when there were just a few modules but it has become increasingly burdensome as the number of modules grew.
The new procedure is simply to call casual-init and all the module’s you want to use are initialized. The modules you’re using is determined by a set of hook functions that can configured with the Emacs Customize utility. You simple check off which modules you want to use and call casual-init. That’s all there is to it. You can learn more about this in the Casual User Manual.
If you’ve been following along on Choi’s blog—or to a lessor extent on Irreal—you know that there are a lot of different types of modules, not all of which you might want installed. The Customize interface is an easy way to specify which ones you want.
The latest version is available on MELPA and NonGNU ELPA. The nice thing about the modules is that they are all invoked with the same key sequence, Ctrl+o by default, so you don’t have to remember a bunch of different bindings. Once you invoke it, Casual brings up a Transient menu appropriate for the current major mode
Casual is a nice suite that make it easier to navigate Emacs applications that you don’t use often and for which you haven’t internalized all the bindings. Take a look at the user manual if you want to know more.
Switching To A Window In Another Frame
Álvaro Ramírez, author of Journelly and many other useful applications—a lot of them Emacs based—has a new post about a basic Emacs operation: changing focus to another window. Ramírez and I basically agree about things like this although he stubbornly refuses to admit the superiority of my method of indicating the window that has focus.
Now he has a slightly different problem. For technical reasons that you can read about in his post, he wants to be able to switch to a window in another frame. The other-window command, bound to Ctrl+x o by default, doesn’t consider windows in other frames but, of course, there’s a command for that: next-window-any-frame. That turned out to be exactly what Ramírez needed and he simply bound it to Meta+o, which is where he had other-window bound.
Like Ramírez, I seldom use more than one frame so I didn’t know about this command. If you often have more than one frame going, you may find it useful if you’re not already using it. If you’re an ace-window user, it will consider all frames by default but you can adjust this with aw-scope.