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.

Posted in General | Tagged | Leave a comment

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 | Leave a comment

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.

Posted in General | Tagged | Leave a comment

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.

Posted in General | Tagged , | Leave a comment

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.

Posted in General | Tagged , | Leave a comment

🥩 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.

Posted in General | Tagged | Leave a comment

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.

Posted in General | Tagged | Leave a comment

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.

Posted in General | Tagged | Leave a comment

Emacs 31.1 RC1

Great news! Sean Whitton writes to announce the release of Emacs 31.1 RC1. This is the final step before the formal release of the Emacs 31 series. Whitton remarks that the developers are hoping that RC1 will be the only release candidate. I take that as a measure of their confidence in this trial release. Unless any breaking problems pop up, we can expect the official release of 31.1 imminently.

As always, we should offer up a word of thanks for the hard work of the maintainers and all the developers who have toiled so hard to bring us this latest release. If we find ourselves in the same bar as one of them, the drinks are on us.

Posted in General | Tagged | Leave a comment

Going Dark For Real This Time

Most Irreal readers interested in security and privacy are familiar with Matthew Green, a cryptographer at Johns Hopkins University. He’s got a new post up that is terrifying to those of us who want to keep our private things private.

The TL;DR is that recent gains in the AI mediated search for exploits is going to have terrible consequences. The problem is not that criminals will be able to romp through our systems; the defenders are also using those AIs to locate and patch vulnerabilities in their software. Soon, Green says, there will be virtually no usable remote exploits left. That sounds good, so what’s the problem?

The problem according to Green is that law enforcement, which this time is facing a real going dark danger, will renew their demands for a backdoor into all encrypted communications. They’ve tried that before, of course, but there was always some surveillance company that had a handy exploit that allowed them to get their information without a backdoor. That demoted their desire for a backdoor to a “nice to have” instead of a critical necessity.

Nobody reading this needs an explanation for why a backdoor is a terrible idea that will make us less safe while hardly giving the bad guys pause. A nice, less technical, example is if the police demanded that they be given a master key that would open any of our doors so that they could come in at will and look around for evidence of wrongdoing. Sure, it would make crime fighting easier in some cases but who would agree to that? No one is who.

Nonetheless, we can be certain that law enforcement will renew their demands with lots of talk about children, drugs, and terrorism as usual. We’ve heard it all before. The only difference is that this time the FBI won’t be lying about going dark.

Be sure to take a look at Green’s post for more details from an expert who studies these issues for a living.

Posted in General | Tagged , | Leave a comment