aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorEli Zaretskii2019-03-30 12:01:58 +0300
committerEli Zaretskii2019-03-30 12:01:58 +0300
commit9c0fa1172fd987a8f23b115145270383a11c12fc (patch)
tree251e79c78ada59224c8a9743e4b13dd9c86df6e5 /src/buffer.c
parent273d7b3ee0f4841c7f3f112aeb2e29db51a642e7 (diff)
downloademacs-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/buffer.c')
-rw-r--r--src/buffer.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 5fabbc253c8..8bdc30300ba 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -37,6 +37,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
37#include "window.h" 37#include "window.h"
38#include "commands.h" 38#include "commands.h"
39#include "character.h" 39#include "character.h"
40#include "coding.h"
40#include "buffer.h" 41#include "buffer.h"
41#include "region-cache.h" 42#include "region-cache.h"
42#include "indent.h" 43#include "indent.h"
@@ -583,6 +584,11 @@ even if it is dead. The return value is never nil. */)
583 set_string_intervals (name, NULL); 584 set_string_intervals (name, NULL);
584 bset_name (b, name); 585 bset_name (b, name);
585 586
587 if (STRINGP (Vcode_conversion_workbuf_name)
588 && strncmp (SSDATA (name), SSDATA (Vcode_conversion_workbuf_name),
589 SBYTES (Vcode_conversion_workbuf_name)) == 0)
590 b->inhibit_buffer_hooks = true;
591
586 bset_undo_list (b, SREF (name, 0) != ' ' ? Qnil : Qt); 592 bset_undo_list (b, SREF (name, 0) != ' ' ? Qnil : Qt);
587 593
588 reset_buffer (b); 594 reset_buffer (b);
@@ -595,7 +601,7 @@ even if it is dead. The return value is never nil. */)
595 XSETBUFFER (buffer, b); 601 XSETBUFFER (buffer, b);
596 Vbuffer_alist = nconc2 (Vbuffer_alist, list1 (Fcons (name, buffer))); 602 Vbuffer_alist = nconc2 (Vbuffer_alist, list1 (Fcons (name, buffer)));
597 /* And run buffer-list-update-hook. */ 603 /* And run buffer-list-update-hook. */
598 if (!NILP (Vrun_hooks)) 604 if (!NILP (Vrun_hooks) && !b->inhibit_buffer_hooks)
599 call1 (Vrun_hooks, Qbuffer_list_update_hook); 605 call1 (Vrun_hooks, Qbuffer_list_update_hook);
600 606
601 return buffer; 607 return buffer;
@@ -1493,7 +1499,7 @@ This does not change the name of the visited file (if any). */)
1493 call0 (intern ("rename-auto-save-file")); 1499 call0 (intern ("rename-auto-save-file"));
1494 1500
1495 /* Run buffer-list-update-hook. */ 1501 /* Run buffer-list-update-hook. */
1496 if (!NILP (Vrun_hooks)) 1502 if (!NILP (Vrun_hooks) && !current_buffer->inhibit_buffer_hooks)
1497 call1 (Vrun_hooks, Qbuffer_list_update_hook); 1503 call1 (Vrun_hooks, Qbuffer_list_update_hook);
1498 1504
1499 /* Refetch since that last call may have done GC. */ 1505 /* Refetch since that last call may have done GC. */
@@ -1706,8 +1712,9 @@ cleaning up all windows currently displaying the buffer to be killed. */)
1706 1712
1707 /* First run the query functions; if any query is answered no, 1713 /* First run the query functions; if any query is answered no,
1708 don't kill the buffer. */ 1714 don't kill the buffer. */
1709 tem = CALLN (Frun_hook_with_args_until_failure, 1715 if (!b->inhibit_buffer_hooks)
1710 Qkill_buffer_query_functions); 1716 tem = CALLN (Frun_hook_with_args_until_failure,
1717 Qkill_buffer_query_functions);
1711 if (NILP (tem)) 1718 if (NILP (tem))
1712 return unbind_to (count, Qnil); 1719 return unbind_to (count, Qnil);
1713 1720
@@ -1726,7 +1733,8 @@ cleaning up all windows currently displaying the buffer to be killed. */)
1726 return unbind_to (count, Qt); 1733 return unbind_to (count, Qt);
1727 1734
1728 /* Then run the hooks. */ 1735 /* Then run the hooks. */
1729 run_hook (Qkill_buffer_hook); 1736 if (!b->inhibit_buffer_hooks)
1737 run_hook (Qkill_buffer_hook);
1730 unbind_to (count, Qnil); 1738 unbind_to (count, Qnil);
1731 } 1739 }
1732 1740
@@ -1928,7 +1936,7 @@ cleaning up all windows currently displaying the buffer to be killed. */)
1928 bset_undo_list (b, Qnil); 1936 bset_undo_list (b, Qnil);
1929 1937
1930 /* Run buffer-list-update-hook. */ 1938 /* Run buffer-list-update-hook. */
1931 if (!NILP (Vrun_hooks)) 1939 if (!NILP (Vrun_hooks) && !b->inhibit_buffer_hooks)
1932 call1 (Vrun_hooks, Qbuffer_list_update_hook); 1940 call1 (Vrun_hooks, Qbuffer_list_update_hook);
1933 1941
1934 return Qt; 1942 return Qt;
@@ -1970,7 +1978,7 @@ record_buffer (Lisp_Object buffer)
1970 fset_buried_buffer_list (f, Fdelq (buffer, f->buried_buffer_list)); 1978 fset_buried_buffer_list (f, Fdelq (buffer, f->buried_buffer_list));
1971 1979
1972 /* Run buffer-list-update-hook. */ 1980 /* Run buffer-list-update-hook. */
1973 if (!NILP (Vrun_hooks)) 1981 if (!NILP (Vrun_hooks) && !XBUFFER (buffer)->inhibit_buffer_hooks)
1974 call1 (Vrun_hooks, Qbuffer_list_update_hook); 1982 call1 (Vrun_hooks, Qbuffer_list_update_hook);
1975} 1983}
1976 1984
@@ -2009,7 +2017,7 @@ DEFUN ("bury-buffer-internal", Fbury_buffer_internal, Sbury_buffer_internal,
2009 (f, Fcons (buffer, Fdelq (buffer, f->buried_buffer_list))); 2017 (f, Fcons (buffer, Fdelq (buffer, f->buried_buffer_list)));
2010 2018
2011 /* Run buffer-list-update-hook. */ 2019 /* Run buffer-list-update-hook. */
2012 if (!NILP (Vrun_hooks)) 2020 if (!NILP (Vrun_hooks) && !XBUFFER (buffer)->inhibit_buffer_hooks)
2013 call1 (Vrun_hooks, Qbuffer_list_update_hook); 2021 call1 (Vrun_hooks, Qbuffer_list_update_hook);
2014 2022
2015 return Qnil; 2023 return Qnil;