1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-16 09:50:25 +00:00

2006-08-22 Stefan Monnier <monnier@iro.umontreal.ca>

(Fset_buffer_multibyte): Record proper undo entry.
This commit is contained in:
Kim F. Storm 2006-08-22 09:25:59 +00:00
parent 1867217a61
commit 38babc072d

View File

@ -2115,10 +2115,11 @@ current buffer is cleared. */)
{
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");
@ -2127,10 +2128,11 @@ current buffer is cleared. */)
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);
@ -2330,8 +2332,18 @@ current buffer is cleared. */)
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] = intern ("set-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. */