IDE Nostalgia: Programming NLS in 1972: Keyset, Mouse, and Viewspecs

dmaynard1 pts0 comments

IDE Nostalgia | David Maynard<br>The 150 year old device that made a 50 year old Integrated Development Environment (IDE) rock

Engelbart keyset: One handed chorded keyboard

Photograph © Mark Richards courtesy of Computer History Museum

I have been coding for more than 50 years. I am retired now, but still enjoy coding and learning. I have programmed for mainframes, 8-bit CPUs, home computers, servers, mobile devices, and modern development laptops. I have used more than 30 different programming languages professionally. Fifty years ago I was using one of the best, most fluid code editors I have ever used. This was the NLS (oNline System) in Doug Engelbart's Augmentation Research Center at Stanford Research Institute in Menlo Park, California in 1972. NLS was running on a 1 MHz PDP-10 with 1 MB of memory (real + virtual combined). How is it possible that a fifty year old software system was, in many ways, a faster, more efficient code editor than what I can find today? It was made possible by the visionary genius of Doug Engelbart and the high-performance user interface that he and his team built.

One of the key innovations that enabled this performance was the use of a mouse and keyset together to control the user interface. Doug and William K. English invented the mouse and re-invented the keyset. SRI applied for patents on both the mouse and the keyset. They received a patent on the mouse and found out that the keyset was patented in the 1860s as a telegraph input device. The keyset is a five-key keyboard on which the user plays keys and/or chords to type commands to the modal user interface: "c" for copy, "d" for delete, "i" for insert, etc.

The keyset was not intended to replace the keyboard, since it is much faster to type continuous prose with both hands on a keyboard. Touch typists utilize muscle memory to minimize the mental focus needed for text entry. Touch typing on the keyset (chording) while mousing enabled that same kind of muscle memory for simple edits, short command entries, and exploring a hyper-linked information space. You never had to take your eyes off the dynamic view of the information space. NLS was used to edit its own hyper-linked source code—inventing software bootstrapping in the 1960s. NLS demonstrated that text editing is remarkably efficient with one hand on a keyset and the other on a mouse.

The major attributes of NLS that contributed to its efficiency as a code editor were:

Consistent Verb > Noun command structure:

Verbs: copy, insert, delete, jump, transpose, etc.

Nouns: word, statement, branch, link, group, etc.

Keyset: enter command verbs (chord 'c' for Copy, then 's' for Statement, or 'j' for Jump, 'l' for Link)

Mouse: point at nouns and target locations

Number of selections determined by command type:

Copy takes two selections (source and destination)

Delete and Jump take one click

Selection is optimized for the noun type:

Branch and Link take one click

Text and Group take two clicks

Strictly hierarchical file system

Viewspecs: keyset commands to fold, filter, and expand hierarchical views of files on the fly.

As a system programmer on the NLS system, I used NLS to explore and edit the NLS source files. Doug was a big believer in bootstrapping, so from the beginning, the first "knowledge workers" to be augmented by NLS were the programmers creating NLS.

Keyset Keyboard and mouse for NLS in 1968

Image courtesy of SRI International © SRI International

Using this setup, I explored all of the NLS source code and how it was interconnected without ever touching the typewriter keyboard. If conditions were right—namely late at night when the load average on the PDP-10 was under 2—flying through the information space of the NLS system was almost magical. It was as if the coefficient of sliding friction between the text and the display was zero.

If, for example, I wanted to add a new command to the system, I would start by finding the source for an existing command that was most similar to the proposed command. I could filter my view of this file using viewspecs. This was done by holding down a mouse button and typing a viewspec chord on the keyset. Viewspec 'x' gave you only the top level of the hierarchy and only one line of text for each statement, so I would immediately see an outline list of all procedures in the file. I would find the procedure I wanted and chord cb on the keyset ("Copy Branch"). The command feedback prompted "Copy Branch from:"—I selected the procedure, the prompt changed to "To:", and I clicked the target location. The prompt showed "OK?", and a single mouse click completed the copy.

Next, I chorded rw on the keyset ("Replace Word"), clicked the procedure name in the newly copied branch, and typed the new command name. This entire sequence took less than two seconds, and I never had to take my visual focus off the source code. I never had to move the mouse to a menu bar or context menu. Keeping focus on the code allowed engineers...

keyset mouse command code system copy

Related Articles