aoeui and asdfg

Navigation

Recent site activity

Home‎ > ‎

manifesto

My most important tool is my text editor.  I spend more time interacting with this program than with any other.  It should be an utterly transparent program that never distracts or delays my work.

Omit needless commands.  Interact seamlessly with the rich set of text processing commands available in the Unix environment.  Do as few things as possible, and do them extremely well.  A few clear ideas and the means to combine them can be easily memorized and will be at my fingertips when I need then.  A command that I can't instantly remember might as well not exist.

I use my text editor with a keyboard and a terminal emulator.  The design of the editor should acknowledge the arrangement of the keyboard, especially when the keyboard has a sensible layout.  I should not have to use a pointing device.  Basic status information should appear in the title bar of the terminal emulator.  Color cues convey clues well.

Normal and search modes are correct, not "command" and "insert" modes.  (Emacs got this one right.)  Apart from an incremental search mode, the editor should treat non-command characters as input to be inserted.

Control is how command keys are distinguished from regular input.  Alt, Meta, and Escape mean the same as Control.  The Space bar, with Control (^Space), can select a variant command.  If the editor has so many commands that more modifiers are needed in order to name them, it's too complicated.

Context matters.  A command's behavior can vary depending on whether there's a selection, or whether the cursor is at the selection's beginning or end.

Separate the orthogonal concepts.  Selecting a region and then deleting it are two distinct actions.  Emacs makes this most natural approach more awkward than its host of specialized "kill" commands.  Vi is better (e.g., "dw"), but requires one to transpose the action and the selection commands.  The basic editing actions are navigation, selection, and modification -- so make these distinct and optimal.

Generalize everything.  Instead of cut/copy/paste, use cut/copy/exchange.  It's more powerful, and avoids the need for specialized "transposition" commands.

Customization means keyboard macros and function keys, programmable Unix tools, and direct hacking of the source.  Supplying a programming environment or scripting language within the editor is madness.