Devon Strawn
Design + Computers

The 'wrong' tool in the right hands

Consider the PC keyboard.

PC keyboard

Think of all the keys on that keyboard.

You’ve pressed them all at least once. Some you’ve pressed more often than others. Some you press very rarely. Some you actively avoid…

Now pick your most-hated key.

Not just the key you never use, nor even the most useless key - but the key you hate the most.

You probably picked one of ‘caps lock’, ‘scroll lock’, ‘pause/break’, or the ‘insert’ key.

Those are all awful keys, to be sure. But today I’m just gonna talk about the insert key.

The insert key is an annoying button that serves no purpose. We forget it’s even there until we accidentally press it and enable ‘overwrite’ mode.

If missing keys didn’t make our computers look like we fished them out of a dumpster, we’d just pry the ‘insert’ key off our keyboards and never look back, amiright?

removing insert key

The insert key has a bad rap because of overwrite mode. It’s the black sheep of the word processing world.

Microsoft Word even went so far as to disable overwrite mode by default. You can still turn it on, but it’s hidden deep in the guts of the app. It now takes five clicks just to enable overwrite mode.

Word overwrite mode

It says a lot about a feature if Word treats it like a dangerous weapon…

But what may surprise you is that the insert key and overwrite mode are actually useful.

Some of the uses for these unpopular features are surprisingly creative. And those creative applications can teach us something about our relationship to our tools.

Misunderstood

Consider the many uses Notch has found for the ‘insert’ key:

If you’ve ever tried to edit tables in a text editor, you’ve felt this pain:

Imagine working at a full-time data entry job (paralegal, etc.). How many times a day would you do this?

How much worse would your day be without the ‘insert’ key? Spending 8 hours a day using badly-written data-entry software with terrible UX and ergonomics.

All those mis-typed fields needing to be entered over and over… You’d be grateful for anything to reduce errors and repetition. For anything that could humanize your labor just a little bit.

If those uses seem kind of…pointless to you, then consider the development costs to fix them. Individually. In software.

It’s much cheaper for a tool to just support the one-size-fits-all ‘overwrite mode’ than it is to implement all those features as one-offs.

In the right codebase, you could implement ‘overwrite mode’ in just a few lines of code. But implementing an inline ASCII art editor, fixed-length text entry field, and a bitmap editor would not only take considerably more code, it would complicate the codebase for those very low priority features. Heck, just thinking about spec’ing out those features gives me hives.

So. many. hated. features.

I’m building up to an interesting point.

But to get there properly, I need to introduce another feature I love to hate: the block cursor.

block cursor

Personally, I used to find the block cursor beyond useless. It’s a reminder of old text-mode software that used the block cursor to indicate both insert and overwrite modes. Nowadays, most software switches the cursor based on the mode: caret cursor in insert mode, block cursor in overwrite mode.

I still get itchy when I see a block cursor - it’s not a welcome site in my digital world. It’s a sign that something’s gone wrong and I need to fix it quick.

But it turns out the block cursor is really nice for the use cases we covered earlier: it unambiguously shows you exactly which character will be overwritten.

Consider if we type the character ‘x’ with a caret cursor and overwrite mode enabled:

ambiguous caret cursor

From experience we know that ‘nice’ will become ‘nicx’ in overwrite mode.

But visually this is ambiguous. The caret is misleading because it behaves differently the other 99% time that we use our editor. Which throws us off, makes us second-guess what’s going to happen. It feels like it should insert ‘x’ instead of overwriting ‘e’. It’s a subtle but annoying quirk.

Now contrast that with overwrite mode with a block cursor:

unambiguous block cursor

Much better! We can immediately tell that the ‘e’ under the cursor is what will be overwritten when we type. We don’t need to double-check that overwrite mode is enabled.

So the block cursor is actually an essential feature for overwrite mode.

But what is overwrite mode good for?

Rehabilitating my two most hated features

It turns out we can combine the overwrite mode and the block cursor for something useful and fun.

Just by tweaking a few settings in a text editor, you can create a basic game level editor:

text editor as Nethack level editor

Moloch’s Sanctum, the final level of Nethack

You can move the cursor around, select parts of the level, and type to make changes.

The key feature that makes this editor work is our hated overwrite mode, toggled by pressing the insert key. The ‘OVR’ indicator in the status bar shows us that it’s enabled:

overwrite mode

Enabling overwrite mode also makes the text editor display a block cursor instead of the default caret cursor:

nethack-text-editor-as-level-editor-closeup

Those two simple changes transform our text editor from being a truly awful level editor into a pretty decent level editor. One that shaves untold hours off the process of level design, and makes revising designs much more enjoyable.

The beauty of this approach is it works just about everywhere. Nearly every single text editor supports overwrite mode. If you’ve got a text editor, then you can turn it into a semi-decent level editor / ASCII art editor.

You could even embed your ASCII levels in your source code, and seamlessly switch between editing levels and code: 1

text-editor-as-inline-map-editor

It’s not the most full-featured, perfect editor for 2D game levels. But it’s pretty good for something that doesn’t require any additional software 2.

Using a text editor as a level editor has other benefits too: undo & redo, search & replace, block selection, and more. For example, in the screenshot above you’ll notice that I also turned on ‘highlight current line’ and ‘show line numbers’ to give a better sense of the scale of the level.

But notice how all those features are useless for our level editor scenario without overwrite mode. If we use the default ‘insert mode’, then every character we type pushes the following characters to the right. Which makes us do this awkward type-delete-type-delete-… workaround to emulate the effect of overwrite mode.

The block cursor is what makes this hack feel more like a real tool.

And notice how overwrite mode is made better by the block cursor. Using it with the default caret cursor would be confusing, ambiguous, and difficult.

It’s the combo of overwrite mode and block cursor that changes the nature of the tool. It unlocks new capabilities very cheaply. We don’t need a custom tool for this kind of level editing, we can just repurpose a plain old text editor.

This trick also makes it easy to edit ASCII diagrams in source code:

It’s a genuinely surprising result: we’ve found a new way to use a very familiar tool, and rehabilitated our image of two very unpopular features.

Which leads me to a general observation.

Valuable & overlooked

So it turns out I was wrong about the “cursed triad”: insert key, overwrite mode, and block cursors. Even if they aren’t useful day-to-day, they have their uses. They’re cheap- & easy-to-implement features that make text editors more versatile.

What can we learn from this?

For starters, it’s common for people to misunderstand the utility of tools. This should be apparent from our experience. Consider this Twitter poll from earlier:

79% of random Twitter users don't use the insert key

There are several ways to interpret that poll data. The interpretation that I find most fascinating is to infer that the minority knows something the majority does not. And that is a problem for the majority.

It’s a problem when ‘not knowing & not wanting to know’ becomes the default way of looking at tools, at the world. When you can’t look at a tool and see the problems it solves, you develop a sort of ‘utility blindness’.

We are tool-using animals. Our perception of things is largely shaped by their function. Perceived value is proportional to utility. More useful = more valuable.

If you can’t see the utility of things, you can’t see the value they derive from that utility. When this becomes a habit, you go through life missing the value of things. Which means you miss out on possibilities, opportunities.

Blindness to the utility & value of a feature can lead to this:

But in the right hands, the full value of a feature can express itself. Which leads us to unexpected places:

japan-text-art-ascii-art

If something as simple, ubiquitous, and ‘useless’ as the insert key can be misunderstood, then we’re overlooking valuable tools lying under our noses.

Footnotes

(It didn’t fit into the flow of this article, but this is a surprisingly frequently-answered Quora question. Apparently there are a lot of ‘insert key’ fans out there.)


  1. at this point I realized that the more of these lesser-used text editor features we try to combine, the less likely it is that they combine well. For instance, combining overwrite mode and block selection in Sublime Text 3 doesn’t behave the way I thought it would. I think better awareness of the strange things people do with their tools will help this. There’s value in having more advocates for little features, especially the ones that are cheap & easy to implement. 

  2. there’s an economic angle that I didn’t push in this article, but it’s quite important. Imagine how much work it would take to write an editor that edit both game maps and source code. The market for such a product would be so small that it wouldn’t work as a commercial product. And this is just one niche use case. It’s often more practical to repurpose an existing tool that solves 80% of a problem than it is to build a tool that solves 95% of the problem. That extra 15% of solution costs.