diff options
| author | Eli Zaretskii | 2019-03-30 12:01:58 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2019-03-30 12:01:58 +0300 |
| commit | 9c0fa1172fd987a8f23b115145270383a11c12fc (patch) | |
| tree | 251e79c78ada59224c8a9743e4b13dd9c86df6e5 /src/coding.c | |
| parent | 273d7b3ee0f4841c7f3f112aeb2e29db51a642e7 (diff) | |
| download | emacs-9c0fa1172fd987a8f23b115145270383a11c12fc.tar.gz emacs-9c0fa1172fd987a8f23b115145270383a11c12fc.zip | |
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.c | 26 |
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) | |||
| 7785 | 7785 | ||
| 7786 | 7786 | ||
| 7787 | /* Name (or base name) of work buffer for code conversion. */ | 7787 | /* Name (or base name) of work buffer for code conversion. */ |
| 7788 | static Lisp_Object Vcode_conversion_workbuf_name; | 7788 | Lisp_Object Vcode_conversion_workbuf_name; |
| 7789 | 7789 | ||
| 7790 | /* A working buffer used by the top level conversion. Once it is | 7790 | /* A working buffer used by the top level conversion. Once it is |
| 7791 | created, it is never destroyed. It has the name | 7791 | created, it is never destroyed. It has the name |
| @@ -7797,7 +7797,6 @@ static Lisp_Object Vcode_conversion_reused_workbuf; | |||
| 7797 | /* True iff Vcode_conversion_reused_workbuf is already in use. */ | 7797 | /* True iff Vcode_conversion_reused_workbuf is already in use. */ |
| 7798 | static bool reused_workbuf_in_use; | 7798 | static bool reused_workbuf_in_use; |
| 7799 | 7799 | ||
| 7800 | |||
| 7801 | static void | 7800 | static void |
| 7802 | code_conversion_restore (Lisp_Object arg) | 7801 | code_conversion_restore (Lisp_Object arg) |
| 7803 | { | 7802 | { |
| @@ -7810,12 +7809,7 @@ code_conversion_restore (Lisp_Object arg) | |||
| 7810 | if (EQ (workbuf, Vcode_conversion_reused_workbuf)) | 7809 | if (EQ (workbuf, Vcode_conversion_reused_workbuf)) |
| 7811 | reused_workbuf_in_use = 0; | 7810 | reused_workbuf_in_use = 0; |
| 7812 | else | 7811 | else |
| 7813 | { | 7812 | Fkill_buffer (workbuf); |
| 7814 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 7815 | specbind (Qbuffer_list_update_hook, Qnil); | ||
| 7816 | Fkill_buffer (workbuf); | ||
| 7817 | unbind_to (count, Qnil); | ||
| 7818 | } | ||
| 7819 | } | 7813 | } |
| 7820 | set_buffer_internal (XBUFFER (current)); | 7814 | set_buffer_internal (XBUFFER (current)); |
| 7821 | } | 7815 | } |
| @@ -7827,24 +7821,17 @@ code_conversion_save (bool with_work_buf, bool multibyte) | |||
| 7827 | 7821 | ||
| 7828 | if (with_work_buf) | 7822 | if (with_work_buf) |
| 7829 | { | 7823 | { |
| 7830 | ptrdiff_t count = SPECPDL_INDEX (); | ||
| 7831 | if (reused_workbuf_in_use) | 7824 | if (reused_workbuf_in_use) |
| 7832 | { | 7825 | { |
| 7833 | Lisp_Object name | 7826 | Lisp_Object name |
| 7834 | = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil); | 7827 | = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil); |
| 7835 | specbind (Qbuffer_list_update_hook, Qnil); | ||
| 7836 | workbuf = Fget_buffer_create (name); | 7828 | workbuf = Fget_buffer_create (name); |
| 7837 | unbind_to (count, Qnil); | ||
| 7838 | } | 7829 | } |
| 7839 | else | 7830 | else |
| 7840 | { | 7831 | { |
| 7841 | if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf))) | 7832 | if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf))) |
| 7842 | { | 7833 | Vcode_conversion_reused_workbuf |
| 7843 | specbind (Qbuffer_list_update_hook, Qnil); | 7834 | = Fget_buffer_create (Vcode_conversion_workbuf_name); |
| 7844 | Vcode_conversion_reused_workbuf | ||
| 7845 | = Fget_buffer_create (Vcode_conversion_workbuf_name); | ||
| 7846 | unbind_to (count, Qnil); | ||
| 7847 | } | ||
| 7848 | workbuf = Vcode_conversion_reused_workbuf; | 7835 | workbuf = Vcode_conversion_reused_workbuf; |
| 7849 | } | 7836 | } |
| 7850 | } | 7837 | } |
| @@ -7863,11 +7850,6 @@ code_conversion_save (bool with_work_buf, bool multibyte) | |||
| 7863 | bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil); | 7850 | bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil); |
| 7864 | if (EQ (workbuf, Vcode_conversion_reused_workbuf)) | 7851 | if (EQ (workbuf, Vcode_conversion_reused_workbuf)) |
| 7865 | reused_workbuf_in_use = 1; | 7852 | reused_workbuf_in_use = 1; |
| 7866 | else | ||
| 7867 | { | ||
| 7868 | Fset (Fmake_local_variable (Qkill_buffer_query_functions), Qnil); | ||
| 7869 | Fset (Fmake_local_variable (Qkill_buffer_hook), Qnil); | ||
| 7870 | } | ||
| 7871 | set_buffer_internal (current); | 7853 | set_buffer_internal (current); |
| 7872 | } | 7854 | } |
| 7873 | 7855 | ||