Sacha on Emacs Micro-Habits

Sacha Chua, as everyone here knows, is relentless about improving her work flow and procedures. Happily for us, she’s also diligent about sharing the results of her efforts with the rest of us. Her recent outstanding post on cultivating Emacs micro-habits is an excellent example of this.

She’s thought more deeply than most of us about which habits make sense and are worth the effort to burn into our muscle memory. The post represents some of her conclusions so far. Even if you’re an experienced Emacs user, you are likely to find something useful in the post that you didn’t know.

For example, she has a nice idiom for dealing with the problem of writing commands that work on the entire buffer unless a region is defined. I’ve long used a macro for that but Chua has another way. Suppose we want to extract the contents of a buffer into a string unless a region is defined, in which case we want the contents of just the region. Chua uses conditon-case like this:

(setq contents (condition-case nil (buffer-substring beg end) (mark-inactive (buffer-string))))

That’s not a micro-optimization in itself but is part of a function that copies code into a blog post, posts it as a Gist, and adds a link to the Gist in the blog post. That’s something useful too if you post code as a Gist.

Another nice trick I learned is how to programmatically retrieve properties from an Org mode buffer. That’s also very useful if you want to write code to automatically process an Org buffer.

The whole post is full of goodness and you really should give it a read. If you’re interested in improving your work flow, you’ll probably find something useful.

Posted in General | Tagged , | 5 Comments

Identifying Muslim Taxi Drivers

Remember that NYC Taxi Commission data set that was used to identify strip club patrons and the comings and going of celebrities? Another data analyst has shown how it can be used to identify Muslim cab drivers. There’s nothing wrong with being Muslim and driving a taxi, of course, but it does seem like a privacy issue. A person’s religion and ethnicity is a private matter that only the individual should be able to reveal.

This shows, once again, the dangers of collecting and storing seemingly innocuous data. If you don’t care about strip club patrons, how about religious freedom? And what was the rationale for collecting this taxi data again?

Posted in General | Tagged | Leave a comment

The Emacs Operating System

Well, Emacs can’t really be an operating system because it doesn’t implement things like file systems, device drivers, and a TCP/IP stack. When we joke that Emacs is an OS, what we really mean is that it can replace many or most of the user-mode system utilities.

Remember that experiment that ran Emacs alone on a Linux kernel? That’s pretty close to Emacs as an OS but, really, who would want to work in such an environment? It was an interesting and revealing experiment but not really practical.

Now, Howard Abrams has come close to a practical Emacs OS. He configured Emacs to act as a window manager. Almost all of the action takes place in Emacs including shells and, through eww, most browser activity. For the occasional Web page that requires JavaScript or otherwise doesn’t render well in eww, Abrams arranged to pop up a Chrome page. Take a look at Abrams’ post for the details.

Although the system is clearly usable and useful, it’s not one that I’d want to live in. To be fair, it’s not one that Abrams lives in either. It’s the setup he uses for a virtual machine running on his work laptop that he uses for personal work. That way, he keeps work and personal computing strictly segregated. It’s a nice solution for that situation and one that you might want to explore if you have a similar problem.

I’m really comfortable in my highly customized laptop environment and so in a similar situation I’d shove my laptop into my backpack and take it with me. I will say, though, that as I move more and more of my work into Emacs, a setup like Abrams’ might be good enough for occasional work like personnel computing at work.

Posted in General | Tagged | Leave a comment

Sacha Chats with Steve Purcell

Sacha Chua has held another excellent Emacs chat. This time, it’s with Steve Purcell. I’ve written about Purcell a few times and I’ve certainly stolen a ton of Emacs code from him. He’s got his fingers in an incredible number of Emacs projects and helps run the MELPA repository.

Like many of us, Purcell came to Emacs from VIM. He was attracted to its extensibility and has been busy extending it ever since. He’s an interesting guy and his chat with Chua was very entertaining. As usual, Chua and Purcell explore his Emacs configuration and some of his work flows.

I’ve already installed two of the packages they discussed. The first is whole-line-or-region, a package that arranges for some of the commands that work on regions to work on the current line if no region is defined. It’s more useful than you might think as his demonstration of it in the video shows.

The other package is ibuffer-vc that allows you to group the entries in an ibuffer listing by the repository they inhabit. Then you can act on them as a group. For example, if you are working on several files in a repository, you can delete their buffers all at once when you’re done. It’s very handy.

As many of you know, I have several pieces of Elisp that run certain applications, such as Eshell, in full screen and then restores the window configuration when I’m done. Purcell has a package that generalizes this capability to make it easy to run any Emacs application in full screen. I didn’t install it because I’ve already solved the problem for the cases I care about but if you think you might like to run some apps in full screen, you should check out the fullframe package in MELPA.

UPDATE: fullscreenfullframe

Posted in General | Tagged | Leave a comment

Another Convert

Picking them off one by one…

Posted in General | Tagged , | Leave a comment

Refactoring CamelCase

If, like me, you consider CamelCase symbol names to be the mark of the beast, Arne Babenhauserheide has you covered. He recently found himself having to convert names like CamelCase to camel_case. He found some code on the Emacs Wiki, added some glue to make it interactive, and used a keyboard macro to convert everything.

If you follow the link to the Wiki page, you’ll discover that there’s also code to convert to

  • CamelCaseSymbols
  • underscored_symbols
  • dashed-symbols
  • colonized::symbols

The code is simple enough that you can easily add some other special format that you might need.

Again, Emacs letting you have it your way.

Posted in General | Tagged | 3 Comments

Listing File Sizes in dired

Like many Emacs users, I do almost all my file manipulation (rm, mv, cp, etc.) in dired. It’s just a lot easier to have a listing of the directory in front of you and mark the files you want to act on. That’s not even mentioning writable dired, a thing of beauty in itself.

Over at (or emacs, abo abo gives us a bit of Elisp that let’s us mark some files and run the Unix du on them. He maps his function to z in the dired-mode-map so all we need to do is mark the files and type 【z】 to get the sizes. It’s an easy enhancement but it gives us one less reason to leave Emacs (or even invoke a shell) to get information about our files. Very nice.

Posted in General | Tagged | Leave a comment

A Cross Reference for the Figures in CLHS

Jean-Philippe Paradis has added a cross reference to the figures in the Common Lisp HyperSpec to his Common Lisp Notes & Tips.

Posted in Programming | Tagged , | Leave a comment

Empty Your Cup

Some sage advice from Sacha:

Posted in General | Tagged | Leave a comment

Sleepwalking into Tyranny

Nic Ferrier has a few words of his own on government snooping. This time from a British point of view.

Posted in General | Tagged | Leave a comment