summaryrefslogtreecommitdiff
path: root/src/coding.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2019-03-30 12:01:58 +0300
committerEli Zaretskii <eliz@gnu.org>2019-03-30 12:01:58 +0300
commit9c0fa1172fd987a8f23b115145270383a11c12fc (patch)
tree251e79c78ada59224c8a9743e4b13dd9c86df6e5 /src/coding.c
parent273d7b3ee0f4841c7f3f112aeb2e29db51a642e7 (diff)
downloademacs-9c0fa1172fd987a8f23b115145270383a11c12fc.tar.gz
Don't run buffer-related hooks in " *code conversion work*" buffers
Note: portions of this change were mistakenly pushed as part of an unrelated commit a35a1f6a9. * src/buffer.c (Fget_buffer_create): Set inhibit_buffer_hooks non-zero for temporary buffers created by coding.c. Don't run buffer-list-update-hook for such buffers. (Frename_buffer, Fkill_buffer, record_buffer) (Fbury_buffer_internal): Don't run hooks for buffers whose inhibit_buffer_hooks flag is set. * src/buffer.h (struct buffer): New member inhibit_buffer_hooks. * src/pdumper.c (dump_buffer): Dump the new field. Update the hash value in HASH_buffer_XXX. * src/coding.c (make_conversion_work_buffer): Function deleted; code moved to code_conversion_save. (code_conversion_save): Insert code from make_conversion_work_buffer, but arrange for unwind-protecting the current buffer before switching to the work buffer. This avoids leaving reused_workbuf_in_use set if user presses C-g during encoding/decoding. (Vcode_conversion_workbuf_name): Now external variable. * src/coding.h (Vcode_conversion_reused_workbuf): Declare.
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c26
1 files changed, 4 insertions, 22 deletions
diff --git a/src/coding.c b/src/coding.c
index c6d96436770..e351cc72fab 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -7785,7 +7785,7 @@ encode_coding (struct coding_system *coding)
/* Name (or base name) of work buffer for code conversion. */
-static Lisp_Object Vcode_conversion_workbuf_name;
+Lisp_Object Vcode_conversion_workbuf_name;
/* A working buffer used by the top level conversion. Once it is
created, it is never destroyed. It has the name
@@ -7797,7 +7797,6 @@ static Lisp_Object Vcode_conversion_reused_workbuf;
/* True iff Vcode_conversion_reused_workbuf is already in use. */
static bool reused_workbuf_in_use;
-
static void
code_conversion_restore (Lisp_Object arg)
{
@@ -7810,12 +7809,7 @@ code_conversion_restore (Lisp_Object arg)
if (EQ (workbuf, Vcode_conversion_reused_workbuf))
reused_workbuf_in_use = 0;
else
- {
- ptrdiff_t count = SPECPDL_INDEX ();
- specbind (Qbuffer_list_update_hook, Qnil);
- Fkill_buffer (workbuf);
- unbind_to (count, Qnil);
- }
+ Fkill_buffer (workbuf);
}
set_buffer_internal (XBUFFER (current));
}
@@ -7827,24 +7821,17 @@ code_conversion_save (bool with_work_buf, bool multibyte)
if (with_work_buf)
{
- ptrdiff_t count = SPECPDL_INDEX ();
if (reused_workbuf_in_use)
{
Lisp_Object name
= Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
- specbind (Qbuffer_list_update_hook, Qnil);
workbuf = Fget_buffer_create (name);
- unbind_to (count, Qnil);
}
else
{
if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf)))
- {
- specbind (Qbuffer_list_update_hook, Qnil);
- Vcode_conversion_reused_workbuf
- = Fget_buffer_create (Vcode_conversion_workbuf_name);
- unbind_to (count, Qnil);
- }
+ Vcode_conversion_reused_workbuf
+ = Fget_buffer_create (Vcode_conversion_workbuf_name);
workbuf = Vcode_conversion_reused_workbuf;
}
}
@@ -7863,11 +7850,6 @@ code_conversion_save (bool with_work_buf, bool multibyte)
bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil);
if (EQ (workbuf, Vcode_conversion_reused_workbuf))
reused_workbuf_in_use = 1;
- else
- {
- Fset (Fmake_local_variable (Qkill_buffer_query_functions), Qnil);
- Fset (Fmake_local_variable (Qkill_buffer_hook), Qnil);
- }
set_buffer_internal (current);
}