* Changing of line format and undo
@ 2006-06-20 22:15 Lennart Borgman
2006-06-21 3:23 ` Eli Zaretskii
0 siblings, 1 reply; 24+ messages in thread
From: Lennart Borgman @ 2006-06-20 22:15 UTC (permalink / raw)
If you change line endings this change is not saved to undo. Is this the
expected behaviour?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-20 22:15 Changing of line format and undo Lennart Borgman
@ 2006-06-21 3:23 ` Eli Zaretskii
2006-06-21 15:12 ` Lennart Borgman
0 siblings, 1 reply; 24+ messages in thread
From: Eli Zaretskii @ 2006-06-21 3:23 UTC (permalink / raw)
Cc: emacs-devel
> Date: Wed, 21 Jun 2006 00:15:17 +0200
> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>
> If you change line endings this change is not saved to undo. Is this the
> expected behaviour?
If you mean "C-x RET f", then it doesn't really change anything. It
just sets a buffer-local variable to some value. So there's nothing
to undo.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 3:23 ` Eli Zaretskii
@ 2006-06-21 15:12 ` Lennart Borgman
2006-06-21 15:14 ` David Kastrup
2006-06-21 21:54 ` Stuart D. Herring
0 siblings, 2 replies; 24+ messages in thread
From: Lennart Borgman @ 2006-06-21 15:12 UTC (permalink / raw)
Cc: emacs-devel
Eli Zaretskii wrote:
>> Date: Wed, 21 Jun 2006 00:15:17 +0200
>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>
>> If you change line endings this change is not saved to undo. Is this the
>> expected behaviour?
>>
>
> If you mean "C-x RET f", then it doesn't really change anything. It
> just sets a buffer-local variable to some value. So there's nothing
> to undo.
>
That is an internal Emacs perpective. From a users point of view there
is truly a change. If you for example change the line endings the file
will be saved with this new line endings.
BTW should not changes of this kind also set the buffer to modified?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 15:12 ` Lennart Borgman
@ 2006-06-21 15:14 ` David Kastrup
2006-06-21 15:50 ` Lennart Borgman
2006-06-21 21:54 ` Stuart D. Herring
1 sibling, 1 reply; 24+ messages in thread
From: David Kastrup @ 2006-06-21 15:14 UTC (permalink / raw)
Cc: Eli Zaretskii, emacs-devel
Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
> Eli Zaretskii wrote:
>>> Date: Wed, 21 Jun 2006 00:15:17 +0200
>>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>>
>>> If you change line endings this change is not saved to undo. Is
>>> this the expected behaviour?
>>>
>>
>> If you mean "C-x RET f", then it doesn't really change anything. It
>> just sets a buffer-local variable to some value. So there's nothing
>> to undo.
>>
> That is an internal Emacs perpective. From a users point of view there
> is truly a change. If you for example change the line endings the file
> will be saved with this new line endings.
>
> BTW should not changes of this kind also set the buffer to modified?
What makes you think they don't?
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 15:14 ` David Kastrup
@ 2006-06-21 15:50 ` Lennart Borgman
2006-06-21 16:31 ` David Kastrup
0 siblings, 1 reply; 24+ messages in thread
From: Lennart Borgman @ 2006-06-21 15:50 UTC (permalink / raw)
Cc: Eli Zaretskii, emacs-devel
David Kastrup wrote:
> Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
>
>
>> Eli Zaretskii wrote:
>>
>>>> Date: Wed, 21 Jun 2006 00:15:17 +0200
>>>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>>>
>>>> If you change line endings this change is not saved to undo. Is
>>>> this the expected behaviour?
>>>>
>>>>
>>> If you mean "C-x RET f", then it doesn't really change anything. It
>>> just sets a buffer-local variable to some value. So there's nothing
>>> to undo.
>>>
>>>
>> That is an internal Emacs perpective. From a users point of view there
>> is truly a change. If you for example change the line endings the file
>> will be saved with this new line endings.
>>
>> BTW should not changes of this kind also set the buffer to modified?
>>
>
> What makes you think they don't?
>
>
Test this for example:
(defun test-set-eol()
(interactive)
(let* ((coding buffer-file-coding-system)
(new-coding (coding-system-change-eol-conversion coding 2)))
(setq buffer-file-coding-system new-coding)))
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 15:50 ` Lennart Borgman
@ 2006-06-21 16:31 ` David Kastrup
2006-06-21 16:47 ` Lennart Borgman
0 siblings, 1 reply; 24+ messages in thread
From: David Kastrup @ 2006-06-21 16:31 UTC (permalink / raw)
Cc: Eli Zaretskii, emacs-devel
Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
> David Kastrup wrote:
>> Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
>>
>>
>>> Eli Zaretskii wrote:
>>>
>>>>> Date: Wed, 21 Jun 2006 00:15:17 +0200
>>>>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>>>>
>>>>> If you change line endings this change is not saved to undo. Is
>>>>> this the expected behaviour?
>>>>>
>>>> If you mean "C-x RET f", then it doesn't really change anything. It
>>>> just sets a buffer-local variable to some value. So there's nothing
>>>> to undo.
>>>>
>>> That is an internal Emacs perpective. From a users point of view there
>>> is truly a change. If you for example change the line endings the file
>>> will be saved with this new line endings.
>>>
>>> BTW should not changes of this kind also set the buffer to modified?
>>>
>>
>> What makes you think they don't?
>>
>>
> Test this for example:
>
> (defun test-set-eol()
> (interactive)
> (let* ((coding buffer-file-coding-system)
> (new-coding (coding-system-change-eol-conversion coding 2)))
> (setq buffer-file-coding-system new-coding)))
Very funny. setq most certainly does not trigger effects like a
changed buffer modification flag. But setq is not a user-level
command. Here is one that is:
C-x RET f (translated from C-x <return> f) runs the command set-buffer-file-coding-system
which is an interactive compiled Lisp function in `mule.el'.
It is bound to C-x RET f, <menu-bar> <options> <mule> <set-various-coding-system> <set-buffer-file-coding-system>.
(set-buffer-file-coding-system CODING-SYSTEM &optional FORCE NOMODIFY)
Set the file coding-system of the current buffer to CODING-SYSTEM.
This means that when you save the buffer, it will be converted
according to CODING-SYSTEM. For a list of possible values of CODING-SYSTEM,
use M-x list-coding-systems.
If CODING-SYSTEM leaves the text conversion unspecified, or if it
leaves the end-of-line conversion unspecified, FORCE controls what to
do. If FORCE is nil, get the unspecified aspect (or aspects) from the
buffer's previous `buffer-file-coding-system' value (if it is
specified there). Otherwise, leave it unspecified.
This marks the buffer modified so that the succeeding M-x save-buffer
surely saves the buffer with CODING-SYSTEM. From a program, if you
don't want to mark the buffer modified, specify t for NOMODIFY.
If you know exactly what coding system you want to use,
just set the variable `buffer-file-coding-system' directly.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 16:31 ` David Kastrup
@ 2006-06-21 16:47 ` Lennart Borgman
2006-06-21 17:31 ` Eli Zaretskii
2006-07-02 15:39 ` Stefan Monnier
0 siblings, 2 replies; 24+ messages in thread
From: Lennart Borgman @ 2006-06-21 16:47 UTC (permalink / raw)
Cc: Eli Zaretskii, emacs-devel
David Kastrup wrote:
> Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
>
>
>> David Kastrup wrote:
>>
>>> Lennart Borgman <lennart.borgman.073@student.lu.se> writes:
>>>
>>>
>>>
>>>> Eli Zaretskii wrote:
>>>>
>>>>
>>>>>> Date: Wed, 21 Jun 2006 00:15:17 +0200
>>>>>> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
>>>>>>
>>>>>> If you change line endings this change is not saved to undo. Is
>>>>>> this the expected behaviour?
>>>>>>
>>>>>>
>>>>> If you mean "C-x RET f", then it doesn't really change anything. It
>>>>> just sets a buffer-local variable to some value. So there's nothing
>>>>> to undo.
>>>>>
>>>>>
>>>> That is an internal Emacs perpective. From a users point of view there
>>>> is truly a change. If you for example change the line endings the file
>>>> will be saved with this new line endings.
>>>>
>>>> BTW should not changes of this kind also set the buffer to modified?
>>>>
>>>>
>>> What makes you think they don't?
>>>
>>>
>>>
>> Test this for example:
>>
>> (defun test-set-eol()
>> (interactive)
>> (let* ((coding buffer-file-coding-system)
>> (new-coding (coding-system-change-eol-conversion coding 2)))
>> (setq buffer-file-coding-system new-coding)))
>>
>
> Very funny. setq most certainly does not trigger effects like a
> changed buffer modification flag. But setq is not a user-level
> command. Here is one that is:
>
Thanks, you are right ;-) Now I see what Eli meant. I still believe that
everything that can result in changing an external file should go into
the undo history but this is really a corner case of course.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 16:47 ` Lennart Borgman
@ 2006-06-21 17:31 ` Eli Zaretskii
2006-07-02 15:39 ` Stefan Monnier
1 sibling, 0 replies; 24+ messages in thread
From: Eli Zaretskii @ 2006-06-21 17:31 UTC (permalink / raw)
Cc: emacs-devel
> Date: Wed, 21 Jun 2006 18:47:27 +0200
> From: Lennart Borgman <lennart.borgman.073@student.lu.se>
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
>
> Thanks, you are right ;-) Now I see what Eli meant. I still believe that
> everything that can result in changing an external file should go into
> the undo history
Undo saves changes to the _buffer_text_, not changes to the file on
disk. Undo has no reasonable way of knowing whether the file on disk
will change.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 15:12 ` Lennart Borgman
2006-06-21 15:14 ` David Kastrup
@ 2006-06-21 21:54 ` Stuart D. Herring
2006-06-21 22:45 ` Lennart Borgman
2006-06-22 3:24 ` Eli Zaretskii
1 sibling, 2 replies; 24+ messages in thread
From: Stuart D. Herring @ 2006-06-21 21:54 UTC (permalink / raw)
Cc: emacs-devel
Lennart Borgman wrote:
> Eli Zaretskii wrote:
>> If you mean "C-x RET f", then it doesn't really change anything. It
>> just sets a buffer-local variable to some value. So there's nothing
>> to undo.
>>
> That is an internal Emacs perpective. From a users point of view there
> is truly a change. If you for example change the line endings the file
> will be saved with this new line endings.
Doing
(add-hook 'local-write-file-functions 'erase-buffer)
also would change how files were written out. Changing how Emacs works
(via variables like the coding systems, hooks, or outright rewriting
functions) is not within the scope of the undo mechanism, which is for
modifications to text, not Emacs.
> BTW should not changes of this kind also set the buffer to modified?
If and only if they should be undoable (which they shouldn't, IMHO). It
would be very odd to have a buffer unmodified before and after an undo, or
to be marked modified with no way (via undo) to remove that marking.
Davis
--
This product is sold by volume, not by mass. If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 21:54 ` Stuart D. Herring
@ 2006-06-21 22:45 ` Lennart Borgman
2006-06-22 3:24 ` Eli Zaretskii
1 sibling, 0 replies; 24+ messages in thread
From: Lennart Borgman @ 2006-06-21 22:45 UTC (permalink / raw)
Cc: emacs-devel
Stuart D. Herring wrote:
> Lennart Borgman wrote:
>
>> Eli Zaretskii wrote:
>>
>>> If you mean "C-x RET f", then it doesn't really change anything. It
>>> just sets a buffer-local variable to some value. So there's nothing
>>> to undo.
>>>
>>>
>> That is an internal Emacs perpective. From a users point of view there
>> is truly a change. If you for example change the line endings the file
>> will be saved with this new line endings.
>>
>
> Doing
>
> (add-hook 'local-write-file-functions 'erase-buffer)
>
> also would change how files were written out. Changing how Emacs works
> (via variables like the coding systems, hooks, or outright rewriting
> functions) is not within the scope of the undo mechanism, which is for
> modifications to text, not Emacs.
>
I would say that the line endings is a border case. I would expect most
users to look like it like changing the text (even if that is not what
is done internally). However I realize it is a lot of work to fix this
border case and it is perhaps not worth the trouble.
>
>> BTW should not changes of this kind also set the buffer to modified?
>>
>
> If and only if they should be undoable (which they shouldn't, IMHO). It
> would be very odd to have a buffer unmodified before and after an undo, or
> to be marked modified with no way (via undo) to remove that marking.
>
My mistake. As David pointed out the buffer is marked modified if you
change the line endings in a supported way. It is natural to make the
buffer modified since perhaps it will not get saved otherwise.
Unfortunately this change is not undoable and that is a bit confusing
sometimes.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 21:54 ` Stuart D. Herring
2006-06-21 22:45 ` Lennart Borgman
@ 2006-06-22 3:24 ` Eli Zaretskii
1 sibling, 0 replies; 24+ messages in thread
From: Eli Zaretskii @ 2006-06-22 3:24 UTC (permalink / raw)
Cc: lennart.borgman.073, emacs-devel
> Date: Wed, 21 Jun 2006 14:54:07 -0700 (PDT)
> From: "Stuart D. Herring" <herring@lanl.gov>
> Cc: emacs-devel@gnu.org
>
> > BTW should not changes of this kind also set the buffer to modified?
>
> If and only if they should be undoable
??? Why?
> It would be very odd to have a buffer unmodified before and after
> an undo, or to be marked modified with no way (via undo) to remove
> that marking.
It is very easy to ``undo'' the buffer-modified flag: type "M-~".
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-06-21 16:47 ` Lennart Borgman
2006-06-21 17:31 ` Eli Zaretskii
@ 2006-07-02 15:39 ` Stefan Monnier
2006-07-02 21:19 ` Kim F. Storm
2006-08-21 14:27 ` Kim F. Storm
1 sibling, 2 replies; 24+ messages in thread
From: Stefan Monnier @ 2006-07-02 15:39 UTC (permalink / raw)
Cc: Eli Zaretskii, emacs-devel
> Thanks, you are right ;-) Now I see what Eli meant. I still believe that
> everything that can result in changing an external file should go into the
> undo history but this is really a corner case of course.
You can change C-x RET f to do what you want by having it add (manually in
elisp) an `apply' entry to buufer-undo-list.
E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
to commit it).
Stefan
--- orig/src/buffer.c
+++ mod/src/buffer.c
@@ -2112,10 +2100,11 @@
{
struct Lisp_Marker *tail, *markers;
struct buffer *other;
- int undo_enabled_p = !EQ (current_buffer->undo_list, Qt);
int begv, zv;
int narrowed = (BEG != BEGV || Z != ZV);
int modified_p = !NILP (Fbuffer_modified_p (Qnil));
+ Lisp_Object old_undo = current_buffer->undo_list;
+ struct gcpro gcpro1;
if (current_buffer->base_buffer)
error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
@@ -2124,10 +2113,11 @@
if (NILP (flag) == NILP (current_buffer->enable_multibyte_characters))
return flag;
- /* It would be better to update the list,
- but this is good enough for now. */
- if (undo_enabled_p)
- current_buffer->undo_list = Qt;
+ GCPRO1 (old_undo);
+
+ /* Don't record these buffer changes. We will put a special undo entry
+ instead. */
+ current_buffer->undo_list = Qt;
/* If the cached position is for this buffer, clear it out. */
clear_charpos_cache (current_buffer);
@@ -2327,8 +2317,18 @@
set_intervals_multibyte (1);
}
- if (undo_enabled_p)
- current_buffer->undo_list = Qnil;
+ if (!EQ (old_undo, Qt))
+ {
+ /* Represent all the above changes by a special undo entry. */
+ extern Lisp_Object Qapply;
+ Lisp_Object args[3];
+ args[0] = Qapply;
+ args[1] = Qset_buffer_multibyte;
+ args[2] = NILP (flag) ? Qt : Qnil;
+ current_buffer->undo_list = Fcons (Flist (3, args), old_undo);
+ }
+
+ UNGCPRO;
/* Changing the multibyteness of a buffer means that all windows
showing that buffer must be updated thoroughly. */
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-07-02 15:39 ` Stefan Monnier
@ 2006-07-02 21:19 ` Kim F. Storm
2006-07-03 15:05 ` Richard Stallman
2006-08-21 14:27 ` Kim F. Storm
1 sibling, 1 reply; 24+ messages in thread
From: Kim F. Storm @ 2006-07-02 21:19 UTC (permalink / raw)
Cc: Lennart Borgman, Eli Zaretskii, emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Thanks, you are right ;-) Now I see what Eli meant. I still believe that
>> everything that can result in changing an external file should go into the
>> undo history but this is really a corner case of course.
>
> You can change C-x RET f to do what you want by having it add (manually in
> elisp) an `apply' entry to buufer-undo-list.
>
> E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
> to commit it).
I think this is an _excellent_ idea (and IMO the current behaviour is faulty).
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-07-02 21:19 ` Kim F. Storm
@ 2006-07-03 15:05 ` Richard Stallman
2006-07-03 21:30 ` Lennart Borgman
0 siblings, 1 reply; 24+ messages in thread
From: Richard Stallman @ 2006-07-03 15:05 UTC (permalink / raw)
Cc: lennart.borgman.073, eliz, monnier, emacs-devel
> E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
> to commit it).
I think this is an _excellent_ idea (and IMO the current behaviour is faulty).
Maybe this is a bug that should be fixed; can someone explain the
problem to me?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-07-03 15:05 ` Richard Stallman
@ 2006-07-03 21:30 ` Lennart Borgman
2006-07-04 12:55 ` Richard Stallman
0 siblings, 1 reply; 24+ messages in thread
From: Lennart Borgman @ 2006-07-03 21:30 UTC (permalink / raw)
Cc: eliz, emacs-devel, monnier, Kim F. Storm
Richard Stallman wrote:
> > E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
> > to commit it).
>
> I think this is an _excellent_ idea (and IMO the current behaviour is faulty).
>
> Maybe this is a bug that should be fixed; can someone explain the
> problem to me?
>
I started the thread, see here:
http://lists.gnu.org/archive/html/emacs-devel/2006-06/msg00512.html
If you change line endings this change is not saved to undo. However it
is a change that is written to the edited file. Therefore I think it
should be saved to undo.
It seemed quite hard to fix this but it seems like Stefan has a very
good idea of how to do this.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-07-03 21:30 ` Lennart Borgman
@ 2006-07-04 12:55 ` Richard Stallman
0 siblings, 0 replies; 24+ messages in thread
From: Richard Stallman @ 2006-07-04 12:55 UTC (permalink / raw)
Cc: eliz, emacs-devel, monnier, storm
If you change line endings this change is not saved to undo. However it
is a change that is written to the edited file. Therefore I think it
should be saved to undo.
It seemed quite hard to fix this but it seems like Stefan has a very
good idea of how to do this.
Let's try that change, and see how it works out.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-07-02 15:39 ` Stefan Monnier
2006-07-02 21:19 ` Kim F. Storm
@ 2006-08-21 14:27 ` Kim F. Storm
2006-08-21 16:17 ` Stefan Monnier
2006-08-22 7:42 ` Richard Stallman
1 sibling, 2 replies; 24+ messages in thread
From: Kim F. Storm @ 2006-08-21 14:27 UTC (permalink / raw)
Cc: Lennart Borgman, Eli Zaretskii, emacs-devel
In case you forgot:
RMS agreed to install the following change in emacs 22.
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Thanks, you are right ;-) Now I see what Eli meant. I still believe that
>> everything that can result in changing an external file should go into the
>> undo history but this is really a corner case of course.
>
> You can change C-x RET f to do what you want by having it add (manually in
> elisp) an `apply' entry to buufer-undo-list.
>
> E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
> to commit it).
>
>
> Stefan
>
>
> --- orig/src/buffer.c
> +++ mod/src/buffer.c
> @@ -2112,10 +2100,11 @@
> {
> struct Lisp_Marker *tail, *markers;
> struct buffer *other;
> - int undo_enabled_p = !EQ (current_buffer->undo_list, Qt);
> int begv, zv;
> int narrowed = (BEG != BEGV || Z != ZV);
> int modified_p = !NILP (Fbuffer_modified_p (Qnil));
> + Lisp_Object old_undo = current_buffer->undo_list;
> + struct gcpro gcpro1;
>
> if (current_buffer->base_buffer)
> error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
> @@ -2124,10 +2113,11 @@
> if (NILP (flag) == NILP (current_buffer->enable_multibyte_characters))
> return flag;
>
> - /* It would be better to update the list,
> - but this is good enough for now. */
> - if (undo_enabled_p)
> - current_buffer->undo_list = Qt;
> + GCPRO1 (old_undo);
> +
> + /* Don't record these buffer changes. We will put a special undo entry
> + instead. */
> + current_buffer->undo_list = Qt;
>
> /* If the cached position is for this buffer, clear it out. */
> clear_charpos_cache (current_buffer);
> @@ -2327,8 +2317,18 @@
> set_intervals_multibyte (1);
> }
>
> - if (undo_enabled_p)
> - current_buffer->undo_list = Qnil;
> + if (!EQ (old_undo, Qt))
> + {
> + /* Represent all the above changes by a special undo entry. */
> + extern Lisp_Object Qapply;
> + Lisp_Object args[3];
> + args[0] = Qapply;
> + args[1] = Qset_buffer_multibyte;
> + args[2] = NILP (flag) ? Qt : Qnil;
> + current_buffer->undo_list = Fcons (Flist (3, args), old_undo);
> + }
> +
> + UNGCPRO;
>
> /* Changing the multibyteness of a buffer means that all windows
> showing that buffer must be updated thoroughly. */
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-21 14:27 ` Kim F. Storm
@ 2006-08-21 16:17 ` Stefan Monnier
2006-08-22 7:42 ` Richard Stallman
1 sibling, 0 replies; 24+ messages in thread
From: Stefan Monnier @ 2006-08-21 16:17 UTC (permalink / raw)
Cc: Lennart Borgman, Eli Zaretskii, emacs-devel
> RMS agreed to install the following change in Emacs 22.
Oh, did he? I must have missed it. If you want to install it, then please
go ahead (I'm on the road right now). Otherwise I'll get to it later.
Thanks,
Stefan
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> Thanks, you are right ;-) Now I see what Eli meant. I still believe that
>>> everything that can result in changing an external file should go into the
>>> undo history but this is really a corner case of course.
>>
>> You can change C-x RET f to do what you want by having it add (manually in
>> elisp) an `apply' entry to buufer-undo-list.
>>
>> E.g. I've changed my set-buffer-multibyte to do that (waiting for post-22
>> to commit it).
>>
>>
>> Stefan
>>
>>
>> --- orig/src/buffer.c
>> +++ mod/src/buffer.c
>> @@ -2112,10 +2100,11 @@
>> {
>> struct Lisp_Marker *tail, *markers;
>> struct buffer *other;
>> - int undo_enabled_p = !EQ (current_buffer->undo_list, Qt);
>> int begv, zv;
>> int narrowed = (BEG != BEGV || Z != ZV);
>> int modified_p = !NILP (Fbuffer_modified_p (Qnil));
>> + Lisp_Object old_undo = current_buffer->undo_list;
>> + struct gcpro gcpro1;
>>
>> if (current_buffer->base_buffer)
>> error ("Cannot do `set-buffer-multibyte' on an indirect buffer");
>> @@ -2124,10 +2113,11 @@
>> if (NILP (flag) == NILP (current_buffer->enable_multibyte_characters))
>> return flag;
>>
>> - /* It would be better to update the list,
>> - but this is good enough for now. */
>> - if (undo_enabled_p)
>> - current_buffer->undo_list = Qt;
>> + GCPRO1 (old_undo);
>> +
>> + /* Don't record these buffer changes. We will put a special undo entry
>> + instead. */
>> + current_buffer->undo_list = Qt;
>>
>> /* If the cached position is for this buffer, clear it out. */
>> clear_charpos_cache (current_buffer);
>> @@ -2327,8 +2317,18 @@
>> set_intervals_multibyte (1);
>> }
>>
>> - if (undo_enabled_p)
>> - current_buffer->undo_list = Qnil;
>> + if (!EQ (old_undo, Qt))
>> + {
>> + /* Represent all the above changes by a special undo entry. */
>> + extern Lisp_Object Qapply;
>> + Lisp_Object args[3];
>> + args[0] = Qapply;
>> + args[1] = Qset_buffer_multibyte;
>> + args[2] = NILP (flag) ? Qt : Qnil;
>> + current_buffer->undo_list = Fcons (Flist (3, args), old_undo);
>> + }
>> +
>> + UNGCPRO;
>>
>> /* Changing the multibyteness of a buffer means that all windows
>> showing that buffer must be updated thoroughly. */
> --
> Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-21 14:27 ` Kim F. Storm
2006-08-21 16:17 ` Stefan Monnier
@ 2006-08-22 7:42 ` Richard Stallman
2006-08-22 9:26 ` Kim F. Storm
1 sibling, 1 reply; 24+ messages in thread
From: Richard Stallman @ 2006-08-22 7:42 UTC (permalink / raw)
Cc: lennart.borgman.073, eliz, monnier, emacs-devel
RMS agreed to install the following change in emacs 22.
Would you please install that change?
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-22 7:42 ` Richard Stallman
@ 2006-08-22 9:26 ` Kim F. Storm
2006-08-22 9:39 ` Kim F. Storm
0 siblings, 1 reply; 24+ messages in thread
From: Kim F. Storm @ 2006-08-22 9:26 UTC (permalink / raw)
Cc: lennart.borgman.073, eliz, monnier, emacs-devel
Richard Stallman <rms@gnu.org> writes:
> RMS agreed to install the following change in emacs 22.
>
> Would you please install that change?
Done.
But I had to replace undefined symbol
Qset_buffer_multibyte
by
intern ("set-buffer-multibyte")
Stefan, is that ok?
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-22 9:26 ` Kim F. Storm
@ 2006-08-22 9:39 ` Kim F. Storm
2006-08-23 4:06 ` Richard Stallman
0 siblings, 1 reply; 24+ messages in thread
From: Kim F. Storm @ 2006-08-22 9:39 UTC (permalink / raw)
Cc: lennart.borgman.073, eliz, monnier, emacs-devel
storm@cua.dk (Kim F. Storm) writes:
> Richard Stallman <rms@gnu.org> writes:
>
>> RMS agreed to install the following change in emacs 22.
>>
>> Would you please install that change?
>
> Done.
BTW, this change does not fix the original problem of recording undo
information for changing line endings; it only addresses undo for
multibyte.
--
Kim F. Storm <storm@cua.dk> http://www.cua.dk
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-22 9:39 ` Kim F. Storm
@ 2006-08-23 4:06 ` Richard Stallman
2006-08-23 4:11 ` Lennart Borgman
0 siblings, 1 reply; 24+ messages in thread
From: Richard Stallman @ 2006-08-23 4:06 UTC (permalink / raw)
Cc: lennart.borgman.073, eliz, monnier, emacs-devel
BTW, this change does not fix the original problem of recording undo
information for changing line endings; it only addresses undo for
multibyte.
set-buffer-multibyte changes the buffer contents, so it ought to be
undoable. Changing buffer-file-coding-system does not change the buffer
contents, so I am not sure it ought to be undoable. It only affects
how the buffer will be saved. set-visited-file-name also affects
how the buffer will be saved, and we did not make it undoable.
I am not convinced it is correct to try to make undo cover changes
in how the buffer would be saved.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-23 4:06 ` Richard Stallman
@ 2006-08-23 4:11 ` Lennart Borgman
2006-08-28 9:52 ` Richard Stallman
0 siblings, 1 reply; 24+ messages in thread
From: Lennart Borgman @ 2006-08-23 4:11 UTC (permalink / raw)
Cc: eliz, emacs-devel, monnier, Kim F. Storm
Richard Stallman wrote:
> I am not convinced it is correct to try to make undo cover changes
> in how the buffer would be saved.
>
See it from the users point of view. Is it not desireable then to be
able to undo all changes that will be saved to disk?
Or are there any logical problems regarding this (since undo is buffer
specific) that can cause problems later? I can not find any. Saving is
buffer specific.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Changing of line format and undo
2006-08-23 4:11 ` Lennart Borgman
@ 2006-08-28 9:52 ` Richard Stallman
0 siblings, 0 replies; 24+ messages in thread
From: Richard Stallman @ 2006-08-28 9:52 UTC (permalink / raw)
Cc: eliz, emacs-devel, monnier, storm
> I am not convinced it is correct to try to make undo cover changes
> in how the buffer would be saved.
>
See it from the users point of view. Is it not desireable then to be
able to undo all changes that will be saved to disk?
The argument seems powerful, but it would seem to apply just as
strongly to set-visited-file-name. Do you think set-visited-file-name
should be an undoable buffer change?
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2006-08-28 9:52 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-20 22:15 Changing of line format and undo Lennart Borgman
2006-06-21 3:23 ` Eli Zaretskii
2006-06-21 15:12 ` Lennart Borgman
2006-06-21 15:14 ` David Kastrup
2006-06-21 15:50 ` Lennart Borgman
2006-06-21 16:31 ` David Kastrup
2006-06-21 16:47 ` Lennart Borgman
2006-06-21 17:31 ` Eli Zaretskii
2006-07-02 15:39 ` Stefan Monnier
2006-07-02 21:19 ` Kim F. Storm
2006-07-03 15:05 ` Richard Stallman
2006-07-03 21:30 ` Lennart Borgman
2006-07-04 12:55 ` Richard Stallman
2006-08-21 14:27 ` Kim F. Storm
2006-08-21 16:17 ` Stefan Monnier
2006-08-22 7:42 ` Richard Stallman
2006-08-22 9:26 ` Kim F. Storm
2006-08-22 9:39 ` Kim F. Storm
2006-08-23 4:06 ` Richard Stallman
2006-08-23 4:11 ` Lennart Borgman
2006-08-28 9:52 ` Richard Stallman
2006-06-21 21:54 ` Stuart D. Herring
2006-06-21 22:45 ` Lennart Borgman
2006-06-22 3:24 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).