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/buffer.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/buffer.c')
| -rw-r--r-- | src/buffer.c | 24 |
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; |