New keyboard

I switched from a Kinesis Freestyle2 to a Matias Ergo Pro, and I'm pretty happy with it! It feels much more solid. The springs feel a lot like the old Kinesis Evolution (which is to say, "like springs, not bubble wrap"), and it's a lot quieter.

I ordered it almost a year ago, and it only just arrived.

There aren't a lot of options for two piece, separated keyboards.

Things I like about the Matias:

  • The connecting cable is removable. The Kinesis was hardwired, and wasn't as long as I liked. The cable that comes with the Matias is also kind of short, but it's just a standard 3.5mm 4-conductor cable, so that's a cheap fix.
  • The bottom row is much taller, and Ctrl is wider.
  • Esc is tall and awesome and in the right place, so I don't keep hitting `~ by mistake.
  • The Delete Forward key is banished off to the Fn row, which is great because now I can stop hitting it by accident all the time.
  • Right-Shift doesn't have to the right of it begging to be hit by mistake.
  • The bank of function keys on the left is smaller, which is nice because I never used those anyway.
  • Fn is a chord instead of FnLock, so you have to hold it down to switch between function keys and media keys. I'm on the fence about this but I think I like it.

Do Not Want:

  • Separated keyboards are supposed to have 6^ on both sides! The Matias has it only on the right. This is horrible. It is literally ruining my life.
  • Opt is only on the left side, instead of on both sides. Cmd is on both, but really I want all three on both sides.
  • There's a NumLock key to the left on the N that turns the right side into a numeric keypad. I hit it by mistake all the time and then v50 c6. 64 352 5 6 53. 5' 250 6 .050.
  • Guess what keycode the Paste key sends? If you guessed Paste you'd be wrong. It sends Cmd-V and Emacs sheds a single tear.
  • For some reason USB Overdrive doesn't recognize it as a keyboard at all, so I can't remap any of its keys.

Still, it's an improvement overall.

Tags: computers, emacs, firstperson, reviews, toys

So this happened.

What is meant by "Now you have two problems"?

There is a popular quote by Jamie Zawinski:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

HOW IS BABBY FORMED?

I mention this only because it gives me a chance to tell you about one of the saddest features of my Twitter feed, which is that every couple of weeks, someone out there in the dunderweb @-mentions me with this super clever new variant they've just now thought up all by themselves on either "now you have two problems" or the Law of Software Envelopment (the latter usually sounds something like "Hurf durf cloud durf Facebook hurf durf expands hurf durf git".)

Stop.

Stop. Please stop.

Staaaaahhhhhhhhhppp.

You are making a "GOT MILK"* joke here, people. It's the Twenty First God Damned Century. It is no longer the Nineteen Hundred and Nineties. It's time for some new jokes!

(Though I did get a kick out of this one for a minute.)

Previously, previously, previously.

Tags: computers, doomed, emacs, fanboys, firstperson, retrocomputing
Current Music: EMA -- Marked ♬

;;; -*- lexical-binding: t -*-

Apparently I did not get the memo that hell had actually frozen over:

To use lexical binding, an Emacs-lisp source file must set a file-variable `lexical-binding' to t in the file header, e.g., by using a first line like:

;;; -*- lexical-binding: t -*-

Even in a source file that uses lexical binding, global variables declared with `defvar' are always dynamically bound.

Previously, previously.

Tags: emacs, lisp, religion, retrocomputing

"Sensible", he says.

Gazelle

Gazelle is a rewrite of an aborted project, jsel, which aims to be a sensible Lisp for Javascript. By "sensible" I mean it adheres to the following ideas: [...]

Unsensibly, Gazelle is written in Emacs Lisp. I'll port it to Common Lisp eventually.

Previously, previously, previously.

Tags: computers, emacs, mad science, religion, retrocomputing

Apple recently broke Ctrl-Y

Ever since MacOS 10.0 was released, text fields have supported Emacs bindings for the single-character Control commands, showing that there were people inside Apple (and, presumably, NeXT) who were right-thinking and sensible.

But some time late in the 10.6 release cycle, and continuing into 10.7.1, the binding for Ctrl-K ("kill to end of line") became broken.

I care deeply about this, because these commands have been burned into my hands' muscle memory since dinosaurs walked the earth, and every time it screws up, my brain basically falls over.

Proper behavior for "Kill" is this:

  1. If the last command was not "kill", truncate the kill buffer;
  2. Append the deleted text to the kill buffer.

Specifically, cursor motion, self-inserting characters, and basically everything else takes it out of kill-appends mode. The only time kills should append is if you type ^K twice in a row with no other intervening typing or motion.

This is how it used to work in 10.5.8 (I just tried it) and, I think, at least part of the way through the 10.6.x series. But it changed for some reason!

From my experiments, it seems that what Apple currently does is this:

Kill:

  1. If "no more kills" flag is set, truncate the kill buffer.
  2. Append the deleted text to the kill buffer.

Yank:

  1. Set "no more kills" flag.
  2. Insert contents of kill buffer.

That's wrong. Proper behavior is that if you kill text, move, kill more text, and yank, you get only the second text inserted. Current Mac behavior is that you get both pieces of text inserted -- in fact, all text that was killed since the last yank!

To demonstrate, type this into any text area (e.g., a Safari page with a form):

    one ^A ^K ^Y RET
    two RET
    three RET
    four RET
    five RET

Then position the cursor at the beginning of the "two" line, and type this:

    ^K ^K ^N ^K ^K ^N ^Y

You should now be looking at:

    one
    three
    five
    four

But instead you have:

    one
    three
    five
    two
    four

Is there any way for me to fix this myself? It appears that the key bindings are defined in /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict (a normal plist file) and available commands are listed in /System/Library/Frameworks/AppKit.framework/Versions/C/Headers/NSResponder.h, but I'm guessing there's no easy way to replace the definition of the deleteToEndOfParagraph: action with something else...


Update: For what it's worth (and for those who can read it) Apple Bug 10532310.


Update: Holy shit! I am told that this bug was fixed FIVE HOURS after I posted this -- Webkit bug 73888 and the patch. Thanks, Alexey!

This right here, people, is a grand triumph of open source.

Maybe the bug would have gotten the same kind of swift attention inside Apple (Alexey does work for Apple, after all) but none of us would have known that it had even been acknowledged until it showed up in a release, due to Apple's unconditional secrecy on all things. But because they do Webkit development out in the open, we all get to follow along! Which is awesome.

Of course I still have to wait who-knows-how-long until this fix is rolled into a build of Safari that I'm able to run, instead of being able to just spin my own or download a nightly like for normal software, so that's not ideal, but... baby steps.


Update 3, Aug 2012: The fix is in the Safari 6 release. So the answer is, "eight months".

Tags: computers, emacs, firstperson, lazyweb, mac

RMS's epic 22 page tour rider

No mention of brown M&Ms, or of spider-plants.

I think this must be a quite helpful document, because anyone who reads even the first quarter of it will know exactly what they're in for.

Don't stop reading before you've gotten to the part about codecs! And parrots. And crossing the street.

And, this already exists: The Stallman Dialogs. Oh, Internet. Is there nothing you cannot provide?

Friendly conference organizer: Mr. Stallman, I'm so sorry, we're running about 15 minutes behind schedule.
Stallman: When you need to tell me about a problem in a plan, please do not start with a long apology.
Friendly conference organizer: Oh. Well, it's just that, I know your time is very important and I...Sorry.
Stallman: That is unbearably boring, and unnecessary -- conveying useful information is helpful and good, and why apologize for that?
Friendly conference organizer: ...
Stallman: If it is night, and the stars are beautiful, I hesitate to say so, lest my hosts feel obligated to try to get one for me.

Previously, previously, previously, previously, previously, previously, previously.

Tags: copyright, doomed, emacs, firstperson, lisp, mutants

jmc rip

You may have heard that John McCarthy died yesterday at 84. As the inventor of Lisp, the world's second-oldest programming language, and coiner of the phrase "artificial intelligence", it's fair to say that (aside from Turing) there's nobody whose contributions to computer science have had a bigger impact on my life.

Today would be a good day for you to read his 1960 paper, Recursive Functions of Symbolic Expressions and Their Computation by Machine.

I met him once. It was 1992, shortly after the first public release of Lucid Emacs, and rpg came into my office and said, "McCarthy's trying to use lemacs, and his dot-emacs file isn't working. You need to go over to Stanford and fix it for him."

Needless to say, I got a move on.

So I sat at his desk in his completely normal university office, debugged some emacs-lisp code for him, and tried not to think about how weird that was.

He was a nice guy.

Tags: computers, emacs, firstperson, lisp, retrocomputing

Herbert West, Data Entry Specialist

Tags: computers, emacs, retrocomputing

Kids today.

One of my Lucid Emacs co-authors has been banned from reporting any more bugs against Mozilla -- for being too darned grumpy.

It's like they just don't speak the language of my people any more.

Tags: computers, doomed, emacs, firstperson, nscp

Emacs in Tron!

These images are amazing, but most importantly:

In Tron, the hacker was not supposed to be snooping around on a network; he was supposed to kill a process. So we went with posix kill and also had him pipe ps into grep. I also ended up using emacs eshell to make the terminal more l33t. The team was delighted to see my emacs performance -- splitting the editor into nested panes and running different modes. I was tickled that I got emacs into a block buster movie. I actually do use emacs irl, and although I do not subscribe to alt.religion.emacs, I think that's all incredibly relevant to the world of Tron.
Tags: emacs, movies, tron