Bryce Harrington wrote:
Also, we general talk about the undo transaction log as being linear, however one thing to consider if we are going to allow the user to hop around in history is representing it as a tree instead. The user could hop 42 changes back, then make a sequence of changes, but decide they don't like that and want to go back to where they were originally. Many professional artists I've worked with have operated in a manner that would map like this, and having full access to the breadth as well as depth of their changes would seem like a very useful feature for them.
Nathan mentioned another idea - per-object transaction logs, so that, for instance, the context menu for the object would allow stepping back through its changes. This might get tricky for situations like if the object has been split or joined, etc. and how restoring the changes to an object affects the global undo log, but if that could be resolved it'd be very cool.
I put both these ideas on the wiki at: http://www.inkscape.org/cgi-bin/wiki.pl?BreadthFirstUndo
I don't know if either are a) implementable or b) useful, but they were the first two extensions of undo I could think of.
Revision control is another interesting idea, and I'm not sure that it would be hard to support - and inkscape 'file' could actually be an RCS file of the inkscape file. every edit can be put into RCS in the background. Keeping undo between edits would be cool.
njh