Hacker News new | comments | show | ask | jobs | submit login

Hi Nelson! The # and DEL conventions came from Multics.

Note that from the ASCII perspective, DEL does not mean "delete the previous character." It is meant to be overpunched over a character, effectively deleting the character under the cursor, not before it.

In spite of this, the first DEC machines to use ASCII immediately seized DEL for command-line editing, because it and ESC were the only non-printing characters to have their own keys.

Meanwhile CTSS had begun operating on a variety of terminals and had to use whatever varying features they had available. It adopted " for character erase, ?, :, ~, or _ for line erase, and BREAK, #, or DEL for interrupt, depending on what was available. The second edition of CTSS standardized on ", ?, and BREAK as terminals became more standardized.

In 1966 Multics had begun to be prototyped on CTSS. The TYPSET editor in particular adopted # for character erase and @ for line erase. (There is no reference to a change in triggering interrupts at this time.) I am guessing this is because " and ? were more useful than # and @ in general text, but there is no documentation for the reason.

Multics adopted the neo-CTSS # and @ conventions, and added an elaborate input canonicalization layer that worked on a stream of characters. I think the canonicalization buffering was what led to treating interrupt in the kernel as a character rather than as an out-of-band signal. Notably canonicalization handled the backspace character, but used it for underlining and overstriking rather than for corrections, contrary to our expectations now.

Anyway, Unix adopted the Multics input conventions, with a much simpler canonicalization layer, and kept them until BSD brought Unix to people who were used to DEC operating systems. They retrofitted the DEC conventions of DEL, ^U, and ^C into Unix, where they stuck into the present.

Our expectations now, unfortunately, still should be that backspace is for underlining and overstriking. The man system still uses the TTY-37 conventions, for starters. Indeed, groff, which when it was created was made capable of using ECMA-48 control sequences, was in the late 1990s and early 21st century forcibly dumbed back down to TTY-37. FreeBSD recently switched its manual processor from groff to one that has no ECMA-48 capability.

* http://jdebp.eu./Softwares/nosh/italics-in-manuals.html

* http://jdebp.eu./Proposals/ul-manual-page.html

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact