macOS Keybindings In Emacs

I periodically publish reminders that

  1. macOS uses some common Emacs editing keystrokes by default, and that
  2. You can do much better by adding other Emacs keystrokes to those that macOS will recognize.

Here’s one such recent reminder. Now Bozhidar Batsov has turned the tables and revealed that Emacs also recognizes many macOS commands1. If you look in ns-win.el you’ll see a rather long list of macOS bindings that Emacs will recognize. You can, for example, save a file with ⌘ Cmd+s or start an incremental search with ⌘ Cmd+f. There’s a surprisingly large number of other such bindings. Take a look at Batsov’s post or ns-win.el for the details.

I didn’t know about any of this except for using ⌘ Cmd+f for isearch. I stumbled on that because I rebound Ctrl+s to swiper-isearch but sometimes wanted to do a regular incremental search. Even then, it didn’t click that Emacs was emulating macOS keybindings.

Other than that—and examples like it that other users may need—I can’t see the point of using those bindings. It seems like just another way of confusing my muscle memory. Of course, as I’ve confessed before, I’m very bad at handling multiple sets of keybindings.

For me, it makes more sense to make Emacs keybinding available to macOS rather than the other way around. Of course, you may disagree and want to standardize on macOS bindings. The great thing is that, as usual, Emacs2 let’s us have it our way.

Footnotes:

1

When it’s running on macOS, of course.

2

Well, in this case, macOS gets some credit for making it easy to use Emacs binding across the OS.

Posted in General | Tagged | Leave a comment

Casual Timezone

Charles Choi has another great addition to his Casual Suite. This time he helps us with the common problem of figuring out what time it is in some other place. As Choi says, the Internet makes it common to communicate regularly with people from all over the world. Even the introverts at Irreal find themselves dealing with this.

Choi says that the most common way of dealing with the problem is with a clock app—which typically show times from all over the world—or just looking it up on the Internet. I do the latter. When I want to communicate with someone in, say, London, I simply search for something along the lines of “what time is it in London?”.

Choi notes that Emacs already has all the machinery to deal with this sort of thing. It just needs to be pulled together into a user accessible package. That’s what Casual Timezone does. It provides a myriad of ways to map the time at one place to the time at another.

At this point, the Casual Suite has so many useful apps that it’s probably best to simply install the whole suite even if there are some that you don’t use. Choi’s use of transient menus makes it easy to use them without having to deal with a bunch of bindings that you seldom use and probably won’t remember. Take a look at his post for an animation of Casual Timezone in action and see it it’s something that might fit your needs.

Posted in General | Tagged | Leave a comment

Improving Keyboard-quit

Bozhidar Batsov is back with a quick tip that many of you will probably find useful. It’s an improvement to keyboard-quit or, as we all know and love it, Ctrl+g.

One of Batsov’s pet peeves is that keyboard-quit doesn’t function as expected when the minibuffer is active. Happily that and a few other infelicities are easily fixed as he shows in his post. The code that Batsov presents in his post is short. It’s more comment than code yet it does fix the problems that were annoying Batsov.

Here, from the code comments, is what his improved code does:

The DWIM behaviour of this command is as follows:

- When the region is active, disable it.
- When a minibuffer is open, but not focused, close the minibuffer.
- When the Completions buffer is selected, close it.
- In every other case use the regular `keyboard-quit'."

You don’t have to edit Emacs source code. You simply include his function in your init.el and remap Ctrl+g to it. It’s easy to try out his code and if you don’t like it, simply drop back to the default behavior by undoing the key sequence remapping.

Posted in General | Tagged | Leave a comment

Why Does Emacs Take So Long To Load

Over at the Emacs subreddit, EachDaySameAsLast asks the perennial question: why does Emacs take so long to load. Actually, his question is, “Why do people say Emacs takes so long to load?” He has, he says, been using Emacs since its TECO days and has never, even in the old days, experienced overly long load times. To be sure, his configuration file is relatively short—about 100 lines—but Emacs loads for him in under 2 seconds.

Of course, as many of us have been saying and saying, none of that matters. For almost every user, Emacs shouldn’t be started very often: once a day at most, once every week or month typically.

As usual, the interesting part of the post is the comments. Almost everyone agrees: the load times don’t matter but if you use use-package and the defer option judiciously, your load time can be small too.

I’m beginning to feel as if I’m codependent with those people claiming that Emacs takes too long to load. I should probably just stop writing about it. Of course, it won’t matter. People—many of whom don’t even use Emacs—will keep repeating it.

But let me just repeat, with Batsov, that Emacs load time doesn’t matter. It really doesn’t.

Posted in General | Tagged | Leave a comment

Web Browsing In Emacs

Joar Von Arndt has an interesting post on a subject that many Emacs users obsess about: how to bring Web browser functionality into Emacs. As, I’ve said many times, virtually all my tube time is either in Emacs or Safari. I would, of course, like to get that down to just Emacs. To be sure, I do use some other apps but my time with them is basically in the noise. Almost everything I do on the computer involves Emacs or the browser.

Von Arndt looks at eww, w3m, Xwidgets, and EAF. He discusses the pros and cons of each. He appears to think that eww—with some customization—is the best solution.

My solution is to use Xwidgets for rendering Email posts that need it and for my RSS feed via Elfeed. My email client, mu4e, makes it easy to switch between text and HTML rendered displays. It is, in a way, the best of both worlds. I can read most of my emails in plain text, as the elders decreed, but can switch to an HTML rendered display when I need to.

I use elfeed-webkit to display my RSS feed with Elfeed. It brings up each entry in a browser like display and, of course, can be easily be toggled on and off. It’s a bit fragile, as Von Arndt says, but it easier than invoking the brower for each entry.

The sad news is that there still isn’t a good solution but what solutions there are are getting better. Perhaps we will soon have a way of bringing the final major holdout into the Emacs fold.

Posted in General | Tagged | Leave a comment

Adding Timestamped Notes To The LOGBOOK Drawer

Jeff Bradberry has an excellent post on adding timestamped notes to the LOGBOOK drawer in Org files. Most of us are used to using this drawer to record state changes in TODO notes. You can arrange to have the times of the state changes added to the LOGBOOK. You can also arrange to pop up a buffer so that you can add a note to the entry. I do this when the state changes to CANCELLED or WAITING. Sometimes you may want to add a note to a state change that doesn’t normally have one.

That turns out to be easy. You simple add the universal argument to the state change call. If you use the normal Ctrl+c Ctrl+t binding, you would simply use Ctrl+u Ctrl+c Ctrl+t instead when you want to add a note.

Many of you probably already know all this but Bradberry thought it would nice to add arbitrary notes to the drawer as well. That turns out to be easy too. As usual, Emacs has us covered. You simply call org-add-note bound to Ctrl+c Ctrl+z by default.

This post is the seventh in a series on building an Org-mode Workflow. The whole series is worthwhile and you should definitely take a look if you’re an Org user. There are links to the entire series in Bradberry’s post.

Posted in General | Tagged , | Leave a comment

🥩 Red Meat Friday: Load Times Matter?

It seems as if everybody having even a passing acquaintance with Emacs is opining about Emacs load times. That includes Irreal, of course. Most of us take the position that it doesn’t really matter how long it takes Emacs to start because it’s something that happens only rarely.

Every serious person acknowledges that there are exceptions. A (very) few people have to restart Emacs often for various reasons but for the most part the majority of us have no reason to care. Of course, that doesn’t stop some people from caring. And caring a lot.

Over at the Programming subreddit, dormunis1 is proudly announcing that he’s gotten his Zsh load time to under 70 ms. This is down from the apparently normal load time of 0.45 seconds. If you don’t see the problem with this, you should seek help. These times are all below human reaction times so reducing them, while an interesting intellectual challenge, serves no real purpose.

As usual, a lot of the meat is in the comments. Most of the commenters aren’t sympathetic and agree that it’s an optimization without a point. To be sure, learning to do this sort of thing is useful for cases where it does matter. My objection—and that of the other commenters, apparently—is that reducing the load time of Zsh, Emacs, or any other user facing app, by a few milliseconds simply doesn’t matter.

Posted in General | Tagged , | Leave a comment

macOS Emacs Tricks

I’ve been writing a lot lately about Álvaro Ramírez’s Journelly, an iOS app that I use constantly everyday. It’s a great app that I recommend for everyone. But Ramírez has been writing apps for Emacs and iOS for a long time. A previous iOS app of his that I used and liked—before Journelly largely replaced it—is scr that sort of implements an Emacs ∗scratch∗ buffer on your iPhone or iPad. I’ve also written extensively about his dwim-shell-command package that provides all sorts of command line shortcuts from within Emacs.

All of this is by way of an introduction to Ramírez’s recent post on tricks for using Emacs on macOS. It’s a long post with a plethora of strategies for using Emacs on Macs. He starts off by mentioning that he uses Emacs Plus—available from Homebrew—rather than compiling it from source, as he used to do. I still compile from source but on my next machine I may take the easy route and use Emacs Plus too.

Another thing he mentions is a point I often make: Although he was a GNU/Linux user for many years, he now works primary on macOS but this doesn’t matter because he does almost everything in Emacs or his browser so the he can get away with being pretty much OS agnostic. The true believers will gasp in horror but it’s a truth that many of us have discovered.

As for the tips, they are too numerous to list here. Most people probably won’t like all of them but I’d be surprised if anyone couldn’t find something useful in the post. For my part, I really liked his configuration for long press for accents and Plain Org for iOS. I expect to implement both of these in the near future.

If you use Emacs on macOS you should definitely take a look at Ramírez’s post. You’re sure to find something useful.

Posted in General | Tagged | Leave a comment

GitHub As A Notebook

I like GitHub well enough; I link to it often and even have an account but I would never consider using it for anything but public files that I had replicated on my own machine. I’ve been over the reasons for that many times. The most important reason is that you should never commit your only copy of any data you care about to a third party computer. Once you do, a clock starts ticking down to the time that you will lose your data. You never know how much time is left on the clock but you can be sure that it will eventually reach 0.
The second reason is that any site that hosts a lot of data is an attractive target for criminals and your data could be compromised. Here’s the latest GitHub exploit. That’s why I say I would only use GitHub for public data.

All of this is by way of introduction to this post from Simon Willison. In it Willison posits that GitHub is (almost) the perfect notebook. What follows is a list of features that could easily be a description of Org mode. Read it and see if you don’t agree.

The only reason for Willison’s “almost” is the lack of synchronized offline support. I submit that Journelly goes a long ways towards meeting that concern for Org mode. I’ve previously described it as a front end for Org and although it doesn’t expose all your Org files to your remote device it gets you a long way.

Given all that, it’s clear to me that Emacs and Org mode is a much better notebook than GitHub could hope to be. Your data is safer both from criminals and from being disappeared for some reason by a third party provider. My only question is why do I have to keep repeating this.

Posted in General | Tagged , | Leave a comment

A Mansion That Changes Itself To Suit You

iLemming has an interesting post on Hacker News about why younger engineers don’t use Emacs and why they should. You may find the post a bit overwritten but I especially like the ending:

The specialized app user lives in rented apartments; the Emacs devotee walks through an ever-expanding mansion whose rooms rearrange themselves to their thoughts.

That’s a nice metaphor for the Emacs experience. Whatever you need it to be, Emacs will change itself to accommodate you. We usually talk about Emacs as being a clay that we can mold into whatever shape we desire but I like this description better.

Not everybody agrees. Over at the Emacs subreddit there’s a bit of pushback. That’s fine but some responses, like this one, just seem uninformed. You can tell that the commenter doesn’t really know what they’re talking about because they refer to Emacs as “eMacs”. It’s not a big thing but it’s a sure sign that the commenter isn’t really familiar with the subject matter.

All that aside, I really like the metaphor of Emacs being a mansion whose rooms rearrange themselves to suite your needs.

Posted in General | Tagged | Leave a comment