> I guess I do have some idea how to do it, but it looks like a lot of > work, since we have to adjust the positions in the rest of > pending-undo-list. Are you saying the buffer positions in the undo data become invalidated? That could indeed be a detail I missed. Let me take a closer look. > Right: the loop that undoes N steps (either in undo-more or in undo > if we change undo to only call undo-more with a 1) needs not only to > use undo-equiv-table at each iteration to skip redo entries, but it > also needs to add an entry in undo-equiv-table at each iteration. And recall that these N are rolled into one redo record. So a redo record needs to reference N records it undid. That means undo-equiv-table's value type has a new format that could conceivably break user code, so let's name it something different: redo-record-table. Now the only difference with redo-record-table as I described it earlier is the off-by-one-change-group difference. Actually, this makes me realize the solution to bug 1 is inadequate. Calling (undo-primitive 1) N times creates N redo records whereas (undo-primitive N) creates one.