[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New undo element (fun . args)
From: |
Kim F. Storm |
Subject: |
Re: New undo element (fun . args) |
Date: |
Wed, 02 Feb 2005 16:41:05 +0100 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (gnu/linux) |
Stefan Monnier <address@hidden> writes:
>> One of the undoable operations in SES is setting a variable.
>> This doesn't relate directly to buffer text, but it might
>> be associated with some region somehow. I don't know
>> how this is used, and I think it is important to check.
>
> Most of the vars that are thus set/unset are vars of the form "B6" or "C20",
> i.e. vars that hold the content of a cell. So they do have some relation
> with one specific region of the buffer: the corresponding cell. So we could
> just replace (apply ses-set-with-undo ,sym ,(symbol-value sym)) with (apply
> START END 0 ses-set-with-undo ,sym ,(symbol-value sym)) where START and END
Should be 0 START END.
> are the boundaries of the cell. But since the same code is used for other
> vars as well, such as vars that relate to a particular column of
> the spreadsheet, it'll take a bit more effort.
I've tried to make cua use the new undo machinery, but it is more
complicated than I had imagined.
One obstacle is this piece of code in primitive-undo (undo.c):
It is slightly modified to add (apply cdr . nil) rather than (cdr .
nil) to the undo list in this case:
/* Make sure this produces at least one undo entry,
so the test in `undo' for continuing an undo series
will work right. */
if (EQ (oldlist, current_buffer->undo_list))
current_buffer->undo_list
= Fcons (list3 (Qapply, Qcdr, nil), current_buffer->undo_list);
I don't understand why this is necessary. The primitive-undo
continues to the next undo boundary, so why is it important what is
recorded "between undo boundaries" ?
The problem I have with cua is that I don't record buffer changes as
such, but rather a change in where the active rectangle is. It works
to some extent, but as soon as undo hits one of the entries I added to
the undo list, it gets stuck -- and the pending undo list seems to
be stuck at that specific (apply cdr ...) entry.
So somehow what I do breaks the test mentioned above. But what
exactly is that test trying to differentiate. I've looked at the
code in simple.el, and I simply don't get it.
Any ideas...?
- Re: New undo element (fun . args), Richard Stallman, 2005/02/02
- Re: New undo element (fun . args), Richard Stallman, 2005/02/02
- Re: New undo element (fun . args), Stefan Monnier, 2005/02/02
- Re: New undo element (fun . args),
Kim F. Storm <=
- Re: New undo element (fun . args), Richard Stallman, 2005/02/03
- Re: New undo element (fun . args), Kim F. Storm, 2005/02/04
- Re: New undo element (fun . args), Richard Stallman, 2005/02/05
- Re: New undo element (fun . args), Kim F. Storm, 2005/02/07
- Re: New undo element (fun . args), Richard Stallman, 2005/02/07
- Re: New undo element (fun . args), Kim F. Storm, 2005/02/09
- Re: New undo element (fun . args), Kim F. Storm, 2005/02/07
- Re: New undo element (fun . args), David Kastrup, 2005/02/07
- Re: New undo element (fun . args), Stefan Monnier, 2005/02/07
- Re: New undo element (fun . args), Richard Stallman, 2005/02/08