# Undo

Undo (englisch für „Rückgängig machen, Zurücknehmen“) ist eine essentielle Interaktionstechnik in modernen Benutzeroberflächen und bezeichnet die Funktion von Anwendungsprogrammen, mit der eine oder mehrere Aktionen zurückgenommen werden können. Je nach Umfang der Anwendung kann die Undo-Möglichkeit von der Rücknahme der letzten Aktion bis zur Rücknahme sämtlicher Arbeitsschritte reichen. Die Undo-Funktion ist oft mit einer Redo-Funktion („Wiederherstellen“) kombiniert, die ein vorangehendes Undo aufhebt.
Am PC wird das Undo meist durch Drücken der Tastenkombination Strg+Z (unter Microsoft Windows) oder Command+Z (Apple Macintosh) ausgelöst. Dass diese Tastenkombination als Shortcut dient, hat den Ursprung in der Lage der Tasten: Das Z liegt auf der englischen Tastatur neben den Tasten der Kombinationen für „Ausschneiden“ (Strg+X), „Kopieren“ (Strg+C) und „Einfügen“ (Strg+V), in unmittelbarer Nähe der Strg-Taste, und ist daher gut zu erreichen. Auf deutschen Tastaturen ist die Taste Z jedoch maximal weit von den Strg-Tasten entfernt.
Die gängigen Tastenkombinationen für Redo sind Strg+Y oder Strg+Umschalt+Z (beziehungsweise Command+Shift+Z in Macintosh-Programmen).

## Geschichte

Das Rückgängig-Machen von Operationen am Computer stellt eine wichtige Interaktionsform in verschiedenen Arbeitsabläufen dar. Darauf aufbauend, wie und wofür Computer benutzt wurden, gab es mehrere Ansätze, eine solche Funktion einzuführen. Das File Retrieval and Editing System, das ab 1968 an der Brown University entwickelt wurde, gilt als das erste System, das über eine Undo-Funktion verfügte. Auch der 1971 von Warren Teitelman als Teil von BBN-LISP entwickelte Programmer’s Assistant war in der Lage, Aktionen rückgängig zu machen. Die IBM-Mitarbeiter Lance A. Miller und John C. Thomas bemerkten zur Undo-Operation in ihrem 1976 veröffentlichten Aufsatz Behavioral Issues in the Use of Interactive Systems („Verhaltensfragen bei der Nutzung interaktiver Systeme“), dass es ziemlich nützlich wäre, wenn Nutzer zumindest den letzten Befehl „zurücknehmen“ könnten (indem sie einen speziellen „Undo“-Befehl ausführen). Programmierer des Forschungszentrums Xerox PARC belegten die Tastenkombination Control + Z mit einem Undo-Befehl. In dieser Form wurde der Befehl schnell ein unverzichtbarer Bestandteil von Editoren und Textverarbeitungsprogrammen auf Personalcomputern. Als Larry Tesler von Xerox PARC 1980 begann, bei Apple Computer zu arbeiten, setzte er sich gemeinsam mit Bill Atkinson für die Einführung einer Undo-Funktion auf der Apple Lisa ein.
Während sich die Undo-Funktion anfangs nur auf die letzte Aktion bezog, wurden in den 1980er-Jahren die ersten Programme entwickelt, die mehrere Aktionen (den Undo-stack) rückgängig machen konnten. Erste Applikationen, die eine Undo-Funktion implementierten, waren AtariWriter (1982), das Textverarbeitungsprogramm NewWord (1984) mit seiner unerase-Funktion, und IBM’s VisiWord (1983, undelete).

## Modelle

Undo-Modelle können als linear oder nichtlinear kategorisiert werden:
* Bei einem linearen Modell sind alle Aktionen in einem Undo-Stack gespeichert. Um eine frühere Aktion rückgängig zu machen, müssen auch alle Aktionen rückgängig gemacht werden, die danach passiert sind.
* Bei einem nicht linearen Modell können beliebige Aktionen aus einer Liste gewählt und rückgängig gemacht werden.
Wenn mehrere Nutzer gleichzeitig an einem Dokument arbeiten können, muss dies auch bei der Undo-Funktion berücksichtigt werden. Bei einer globalen Änderung von mehreren Benutzern an einem Dokument („global multi-user-Undo“) wird die letzte Aktion rückgängig gemacht, die an einem Dokument vorgenommen wurde – unabhängig davon, von welchem Nutzer die Aktion ausging. Bei einem lokalen rückgängig Machen in einem von mehreren Personen genutztem Dokument („local multi-user-Undo“) jedoch, kann jeder Nutzer nur seine eigenen Änderungen rückgängig machen. Dies setzt eine nichtlineare Implementierung der Undo-Funktion voraus.
Die Anzahl der Aktionen, die sich auf der Aktionsliste befinden und somit rückgängig gemacht werden können, hängt vom jeweiligen Programm sowie der verwendeten Hardware ab. Beispielsweise fasst diese in Adobe Photoshop standardmäßig 20 Aktionen, kann jedoch vom Nutzer angepasst werden. In Microsoft Paint können seit Microsoft Windows 7 50 Aktionen rückgängig gemacht werden.

## Implementierung

Die Bereitstellung einer Undo-Funktion setzt das Vorhandensein einer zumindest rudimentären Form der Versionsverwaltung voraus.
Die Undo-Funktionalität kann entweder implementiert werden, indem der Systemzustand nach jeder Aktion des Nutzers gespeichert wird (vgl. Memento (Entwurfsmuster)), sodass jeder alte Zustand des Systems wiederhergestellt werden kann; oder es werden die Aktionen selbst in einer Liste festgehalten (Command Pattern). Der zweite Ansatz ist allerdings nur dann möglich, wenn alle Aktionen des Programms reversibel sind.