Undo is a command in many computer programs. It erases the last change done to the document reverting it to an older state. In some more advanced programs such as graphic processing, undo will negate the last command done to the file being edited.
The opposite of undo is redo. The redo command reverses the undo or advances the buffer to a more current state.
In most Windows applications, the Undo command is activated by pressing Ctrl+Z or Alt+Backspace. In virtually all Macintosh applications, the Undo command is activated by pressing Command-Z. The common command for Redo on Microsoft Windows systems is Ctrl+Y or Ctrl+Shift+Z. The common command for Redo on Apple Macintosh systems is Command-Shift-Z.
Command or Control Z is one of the original "sacred" keybindings defined in the first GUI to be widely used, that of the original Macintosh.
Contents |
Behavioral Issues in the Use of Interactive Systems, a 1976 research report by Lance A. Miller and John C. Thomas of IBM, noted that "It would be quite useful to permit users to 'take back' at least the immediately preceding command (by issuing some special 'undo' command)."[1] The programmers at the Xerox PARC research center assigned the keyboard shortcut Ctrl-Z to the undo command, which became a crucial feature of text editors and word processors in the personal computer era.[2]
Multi-level undo commands were introduced in the 1980s, allowing the users to take back a series of actions, not just the most recent one.[2] AtariWriter, a word-processing application introduced in 1982, featured undo. NewWord, another word-processing program released by NewStar in 1984, had an unerase command.[2] IBM's VisiWord also had an undelete command.
Undo models can be categorized according to two criteria: linear vs non-linear, and single-user vs multi-user. Linear undo requires the user to revert the latest action before undoing earlier ones. With non-linear undo, the action to be reverted can be freely picked from the action history list.
Non-linear undo can be further subcategorized into direct selective undo, script interpretation undo, and cascading undo.
When multiple users can edit the same document simultaneously, a multi-user undo is needed. Global multi-user undo reverts the latest action made to the document, regardless of who performed the edit. Local multi-user undo only reverts actions done by the local user. Local multi-user undo usually requires a non-linear undo implementation.
The number of previous actions that can be undone varies by program. For example, the stack size ranges from twenty in Photoshop to three edits in MS Paint. Simplistic, single-edit undo features sometimes do away with "redo" by treating the undo command itself as an action that can be undone. This is known as the flip undo model, because the user can flip between two program states using the undo command.
Redo reverts the effects of the undo action. The simplest form of redo is flip-undo, in which using undo after undoing redoes the undone action. In this case, the program flips back and forth between two states when the undo button is pressed [3].
In a more typical redo model, there are separate undo and redo buttons. The redo can be used for each undo action performed. Making a new edit usually clears the redo list. If a branching redo model is used, the new edit branches the action history.
The Command pattern is a software design pattern which can be used to implement Multi-level Undo. The Memento pattern is useful for capturing the state of the program before user actions. This can be used for state reversal needed in some undo implementations.