Sunday, January 31, 2010

Brainstorm New Ideas: Contextual Undo

Last year I started a small series of brainstorming ideas for improving So maybe you remember the idea Document Check which was targeted to make finalizing documents more easy. Now let's continue with...

Contextual Undo

Idea Summary

The central idea of "Contextual Undo" is to let the user revert changes in a certain part of the document only. Thus, it overcomes the basic limitation of the conventional undo functionality which basicly is a linear list for "editing steps" for the whole document.


Productivity software like provides different functionality to revert changes in a document. A very common one is "undo" which enables the user to revert changes of the current document editing session step-by-step. When looking on the following - rather simple - document workflow, then we'll now focus on the step "Modify".

Let's first have a look how the today's "undo" functionality is presented to the user. The following screenshot, which shows the expanded "undo" drop-down in the standard toolbar, will be used to explain the behavior.

 The current "undo" functionality ...
  • ... provides a list of editing actions in reversed order (e.g. "Insert graphics" was the last one)
  • ... is rather independent of the kind of actions (e.g. typing, inserting, deleting)
  • ... already merges 'atomic' steps into more logical larger ones (e.g. typed words instead of single letters)
  • ... helps the user by showing the number of actions to be undone (e.g. "Actions to undo: 5")
  • ... has only a limited number of actions to be undoable (see Tools -- Options -- -- Memory -- Undo)
  • ... is a document-centric functionality and therefore e.g. available in the standard toolbar
There are many little things to be improved with regard to the "undo" functionality, but at the moment the very last last statement - being document-centric - is the one to be adressed. Thus, you may have noticed that the user (you?!) can only undo his actions step-by-step. Even if the user choses to go back five steps, then executes "undo" five times one after another. It is impossible to only revert one step (or a series of actions) which has been applied in the past.

Goal: The user is able to simply revert changes to a certain element in the document without affecting the other changes made during the document editing session.

Use Cases

Use Case 1: Reverting Unwanted Changes in a Calc Sheet

Sara uses an Calc spreadsheet document to do her private accounting. The information is spread among different sheets, so she works on some parts of the document. Unfortunately, she made some little mistake in the one sheet she worked on several minutes ago. Since she doesn't want to loose all her work, so she decides to use the "contextual undo" functionality which makes it really easy to revert the changes in the selected sheet. She can continue to work on seamlessly and focus on the topic.

Use Case 2: Reverting Changes of Pasted Content

John works in a large company. His boss requests to create a new presentation which presents the project he currently works on. He collects the related documents - texts, diagrams and graphics - and starts to compose the presentation. To keep the presentation document in a reasonable state, he first adapts the information and formatting in the source documents before pasting the content in the Impress document. For example, he adds some text which better explains the information in the given context and adds it to slide 3. Later he notices that some of the information is somehow doubled on slide 12 - it seems that the current source document already contained it. Thus, he wants to revert the changes on slide 3 with "contextual undo". Luckily, keeps the full editing history of the text which has been pasted and so he simply reverts some of the text changes without affecting the rest of the document. He is happy that this saved some time, since his boss needs the presentation in less than one hour.

Use Case 3: Working on the Bachelor Thesis

Michael works on his bacholor thesis in Writer. Since he lacks a bit concentration today, he jumps back and forth in the document and works on different sections. After a break, he briefly scans the changes made to the document and wants to revert some text he worked on some hours ago. He selects the modified paragraphs and executes the "contextual undo" - he browses the history of the changes and reverts all the unwanted changes with one click.

Detailed Description

Read on in UX Idea Contextual Undo (Wiki) ... here is a first "sneak preview".

Closing Words

My girlfriend loves fortune cookies on the New Year's Day and so I picked one, too. The message was: "Your head is full of new ideas. Apply them!" Okay, I do. But you, please don't forget to rate them ... or even better ... add your own!

If you are interested in more ideas, then please check out the Wiki category UX Idea.



disciple said...

A great idea, especially if implemented well. One of the ways in which OOo already stands out from the competition is by having a separate undo history for each document, but in particular being able to undo changes on a single worksheet would be another great improvement.

Perhaps it would also be possible to put a checkbox next to all the changes in the list, so the user can select which changes to undo that way.

> The functionality is somehow related to the "Change Tracking" feature which records changes which can be reversed (considers only "one" change for a given baseline).

Yes. Perhaps like reviewing changes it would benefit from the ability to visually identify the changes on the document, and be able to right-click on an individual change to undo it... although I guess because the undo actions can be a lot smaller than the changes, you'd want to be able to select several at once to undo.

Metal Mick said...

I mentioned something similar to this on the UX discussion list, with primarily Writer and Draw in mind, but of course, there is benefit throughout OOo.

My idea was that there be some form of slider or means of easily moving back and forth along the undo/redo lists, and with a live preview. Giving thought to the sketchy concept that I had, I can see difficulties and feel that Christoph's idea has had more thought than my few words.

One area where there is scope for difficulty is in revisions/changes marking in Writer: if a document is being edited, where do these edits get stored currently with Undo/Redo? And if there are several undos selected from a list, where do they appear in the Redo list, if at all?

Memory tells me that a web editor (perhaps HoTMetaL Pro, in my dim, dark past?) had this initially, and it proved a real boon.

Lotus WordPro has or had "versioning" where a document, if heavily edited or altered in some way could be saved under the same file name as a different version, so it was possible to backtrack successfully with minimal or no loss of content; I believe Adobe's Photoshop allows for alteration of a bitmap that remains fully editable even after saving, closing, then reopening the file.

Should we be looking into something similar for OOo?

niklas.nebel said...

"Undo" for a single change from the middle of the list would in fact require an implementation similar to Change Tracking, and run into similar limitations. In Calc, anything that moves cells (inserting or deleting rows, for example) affects following actions.

ThomasS said...

Kadir Topal had some ideas for a better undo/redo functionality in 2007 at (text is in German) e.g. a undo-sidebar and real-time undo/redo of changes. Maybe you can find some useful enhancements for your idea.

Christoph Noack said...

@ThomasS: Thank you for the comment and for the link :-) Indeed, things like that are in question by interaction designers since years ... e.g. saving a document is one of the most non-natural things to do :-)


PS: By the way, there is a small discussion on our mailing list ux-discuss. If anybody wants to join, please do!

ThomasS said...

Another interesting blog post: