GNU bug report logs -
#16411
undo-only bugs
Previous Next
Full log
Message #14 received at 16411 <at> debbugs.gnu.org (full text, mbox):
>> undo-in-region does not implement undo-only, indeed. I think the way
>> to implement undo-only is to change undo-make-selective-list so it
>> also skips redo entries (depending on undo-no-redo, obviously) using
>> the above while loop.
> I don't see how that's a correct solution in the face of arbitrary
> regional undos and prefix args. Would you have the redo records
> resulting from regional undos still map to t in the undo-equiv-table?
I was talking about simply making undo-in-region
properly skip the previous undos (presuming they don't themselves come
from an undo-in-region).
IIUC, you're talking of skipping (e.g. in a non-region undo) the undos
that took place during undo-in-region, right? If so, I don't have an
answer for how we could do that, in general.
In your pseudo-code:
While pending-undo-list non nil:
Pop undo-i from pending-undo-list:
If undo-i is a redo record (exists in the table):
Remove undo-i's undone records from pending-undo-list (or
otherwise arrange to skip it)
Else:
Undo undo-i
If "undo undo-i" was done prefix-arg times:
Break (finished)
Reached end of undo history
I have no idea how to implement the part:
Remove undo-i's undone records from pending-undo-list (or
otherwise arrange to skip it)
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.
Other than that I don't understand what your redo-record-table does.
AFAICT the test "undo-i is a redo record" can be performed with
undo-equiv-table.
> How does your solution account for redo records that undid several
> because of prefix-arg?
As you have discovered the current code does not even try to account for
prefix args.
> undo-equiv-table only maps to the change group
> after the last undone record without information about the (1-
> prefix-arg) others.
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.
Stefan
This bug report was last modified 10 years and 361 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.