The History of the "Undo" Function?
TheLocustNMI asks: "So, earlier today as I was typing out some magnum opus of a stored procedure, I highlighted to copy it, and hit SPACE instead of Ctrl-C. Without thinking, I hit Ctrl-Z to 'undo' my folly. Pausing a moment to reflect, I realized that I own countless hours of thanks to whomever came up with the "undo" button. In short -- my question is this -- where did it come from? What are the earliest implementations of the 'undo'? (a quick googling returns this page, a cornucopia of undo and history related treatises)"
The "undo" button before computers was white-out. You could never have enough of that stuff around. Especially if you were from a family like mine with several kids doing term papers.
A better place to ask this question would be alt.folklore.computers on usenet.
Seeing how things have been lately, it's worth finding an answer for this question before someone attempts to patent the idea.
IIRC, there was an example in the Arabian Nights. Of course, this was long before computers but it still worked like magic.
-- MarkusQ
P.S. On a more serious note, I wouldn't be all that shocked to learn that 'undo' wasn't implemented on a computer before the 1970s. My main reason for thinking that is that it is relatively expensive, and really only useful in interactive environments. When you're editing your program by manually shuffling h-cards, there isn't much sense in having "undo".
.. or do you find yourself saying "Control-Z" in your mind whenever you find yourself making mistakes while not sitting in front of a computer..spilling a glass of milk...etc
That's right people ... Apple did it first (at least in a consumer machine).
The original Macintosh had "undo" functionality in its applications, right from the start.
The Apple IIGS also had "undo" functionality.
There may have been one or two individual applications before it (I don't know) but the Mac made "undo" ubiquitous.
Yes, MIT's Lincoln Reckoner had multiple-level undo/redo in 1968. That used a screen editor, so it would be the kind of undo you are talking about, however it was probably inspired by IBM's APL line-based workspace editor.
APL programmers had multiple-level undo/redo on their selectric typewriters around 1965. Each interaction was numbered, and you could select the number of the last interaction you wanted to keep. This would reset the entire workspace so that all variables, your program image, and options would be restored. This worked by saving the workspace each time a command completed, and was also useful for restoring sessions after interrupted connections.
Single-level undo appeared much earlier -- the first IBM teletype line editors in the late 1950s had single-level undo.
... where the Z is located, well, I guess you can figure it out.
This sig under construction. Please check back later.
Wee ... Offtopic +1!
--- Jason Olshefsky
Karma: Poser (mostly affected by adding this line long after everyone else did)
NI added undo to LabVIEW in the 5.0 release (ca. 1997) of the product. It was really funny how the marketing from NI revolved around that feature. "Now with UNDO!" You would think that promoting the introduction of a feature that is so ubiquitous in most other desktop software would be less than effective--that people would groan because they had expected it for so long. However, at one of their trade shows, the presenter mentioned the new UNDO and got a standing ovation.
The Xerox Alto system I first used around 1980 (and it wasn't new that year) had an undo function that worked in every program and could take you all the way back to the beginning of your session. If I remember you could have it work contiuously somehow, and it would undo all your work before your eyes.
BTW, the system was also a WYSIWYG high res windowed display, with three button mouse, laser printer, removable (personal) hard drive, drag and drop file handling, ethernet with an internet (arpanet, actually) connection. The first thing I ever saw on it was someone in Rochester, NY playing a 3-D real-time multiplayer game (mazewars?) with someone in California.
I have never quite recovered from the IBM PC downgrade.
You ever tried to pick up chicks by elaborating on the history of the undo command in a dark bar?
Let me know how it works out.
It's Christmas everyday with BitTorrent.
It's not easy to implement. It's actually a lot of work. Suppose, for example, you're building a 3D animation system and every operation needs to be undoable. Every time you tweak a vertex, or intersect two polyhedra, or retesselate a primitive you need to have a way of undoing it. This isn't just a few lines of code. It means that every time you write some code to do anything you need to write code to undo it. This is a lot of work.
Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
The Interlisp Editor had an "Undo" function in 1975. See the directory listing here.
Here's what one well known Academy Award winning 3D package does. Every command is an object. When you execute a command that object is stored in a 'history'. The command has two methods, a do() method and an undo() method. As long is the object remains alive it can undo or redo the associated operation.
Doesn't it make you feel good to know that our freedoms are protected by politicans, lawyers and journalists.
Interlisp in all its incarnations had a module called DWIM (Do What I Mean) which caught typos and thinkos in your input and offered to correct them for you. It was at its smartest fixing spelling errors and inserting parentheses (it would guess '(foo)' when you typed 9foo0, for example).
DWIM could be turned off, set so it asked you before changing anything, or set to automatically fix your inputs. That last setting would be completely intolerable without UNDO, which Interlisp also had, so even if DWIM guessed wrong, corrected your input to the moral equivalent of 'rm *', and ran it, you could still recover with UNDO and try again.
The oldest Interlisp reference I can find is the 1978 Interlisp reference manual. Lisp was on Altos as early as 1973, hacked up by L. Peter Deutsch. For an academic take on UNDO, see this paper from ACM TOPLAS (courtesy of Citeseer).
To a Lisp hacker, XML is S-expressions in drag.
I remember a rudimentary CAD program for the Apple ][+, circa 1982 or 1983. I wish I could remember the name...
I personally first encountered "Undo" on the Mac in 1984. But this CAD program had a function... they didn't call it "commit." I don't remember the exact language they DID use.
The idea was that you never had to worry about making mistakes, because every action you took was tentative, and would be shown to you as a preview before taking effect.
So you'd give a command to draw a line, you'd see the line onscreen, and you could either accept it (in which case it became part of the drawing) or reject it (in which case it disappeared).
The weird thing about all this is that logically, it is exactly equivalent to an "undo" function.
And the even weirder thing is that while an "undo" function feels empowering and liberating... when the exact same function was presented as "tentative action, preview, accept/reject" it felt clumsy and laborious.
To me, anyway.
"How to Do Nothing," kids activities, back in print!
Well obviously the more complex the work the more complex the undo function. But nobody did 3D animation in the '60s. For simple text editing, it would be easy to implement, provided you had enough RAM to store duplicates of portions of the text.
Repeal the DMCA!
Can't a user configure Microsoft Word to "slow save" a document, deleting all undo-across-save information, whenever closing it? If so, how?
.doc to lose the undo-across-save features, much like you can save pdf files in photoshop as gifs and lose layers and history and such.. undo across save really is a feature and not a bug, but unfortunately, when you are working with text, the end result is the same as the working file unlike photos which are typically saved in a different format from the raw file.
Not sure about that, (I've never really cared) but you can easily do "save as" and pick some format other than