]> git.eshelyaron.com Git - emacs.git/commitdiff
Add inhibit-buffer-hooks to `make-indirect-buffer'
authorLars Ingebrigtsen <larsi@gnus.org>
Mon, 19 Jul 2021 16:23:07 +0000 (18:23 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Mon, 19 Jul 2021 16:23:11 +0000 (18:23 +0200)
* doc/lispref/buffers.texi (Indirect Buffers): Document it (bug#49160).

* src/buffer.c (Fmake_indirect_buffer): Allow controlling whether
to inhibit buffer hooks.

doc/lispref/buffers.texi
src/buffer.c
test/src/buffer-tests.el

index 0d31b0bc4c68df3f664c26e7cebb877e121fd3aa..02bbc67c5d125e7ef243ca96c3707ded78429a3b 100644 (file)
@@ -1183,7 +1183,7 @@ buffer.
 the base buffer effectively kills the indirect buffer in that it cannot
 ever again be the current buffer.
 
-@deffn Command make-indirect-buffer base-buffer name &optional clone
+@deffn Command make-indirect-buffer base-buffer name &optional clone inhibit-buffer-hooks
 This creates and returns an indirect buffer named @var{name} whose
 base buffer is @var{base-buffer}.  The argument @var{base-buffer} may
 be a live buffer or the name (a string) of an existing buffer.  If
@@ -1199,6 +1199,8 @@ If @var{base-buffer} is an indirect buffer, its base buffer is used as
 the base for the new buffer.  If, in addition, @var{clone} is
 non-@code{nil}, the initial state is copied from the actual base
 buffer, not from @var{base-buffer}.
+
+@xref{Creating Buffers} for the meaning of @var{inhibit-buffer-hooks}.
 @end deffn
 
 @deffn Command clone-indirect-buffer newname display-flag &optional norecord
index a574de16723ee6e48ad0141c75540e7f12508249..18c473490686aaef11e563452418bb1c2253ce90 100644 (file)
@@ -781,15 +781,22 @@ fetch_buffer_markers (struct buffer *b)
 
 
 DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer,
-       2, 3,
+       2, 4,
        "bMake indirect buffer (to buffer): \nBName of indirect buffer: ",
        doc: /* Create and return an indirect buffer for buffer BASE-BUFFER, named NAME.
 BASE-BUFFER should be a live buffer, or the name of an existing buffer.
+
 NAME should be a string which is not the name of an existing buffer.
 Optional argument CLONE non-nil means preserve BASE-BUFFER's state,
 such as major and minor modes, in the indirect buffer.
-CLONE nil means the indirect buffer's state is reset to default values.  */)
-  (Lisp_Object base_buffer, Lisp_Object name, Lisp_Object clone)
+
+CLONE nil means the indirect buffer's state is reset to default values.
+
+If optional argument INHIBIT-BUFFER-HOOKS is non-nil, the new buffer
+does not run the hooks `kill-buffer-hook',
+`kill-buffer-query-functions', and `buffer-list-update-hook'.  */)
+  (Lisp_Object base_buffer, Lisp_Object name, Lisp_Object clone,
+   Lisp_Object inhibit_buffer_hooks)
 {
   Lisp_Object buf, tem;
   struct buffer *b;
@@ -834,7 +841,7 @@ CLONE nil means the indirect buffer's state is reset to default values.  */)
   b->pt_byte = b->base_buffer->pt_byte;
   b->begv_byte = b->base_buffer->begv_byte;
   b->zv_byte = b->base_buffer->zv_byte;
-  b->inhibit_buffer_hooks = b->base_buffer->inhibit_buffer_hooks;
+  b->inhibit_buffer_hooks = inhibit_buffer_hooks;
 
   b->newline_cache = 0;
   b->width_run_cache = 0;
index 0161927419cb0805bfecbc82719aa26ddc2de3cc..2adffc024a4c81eb8920ef46a765e0fee352f7c9 100644 (file)
@@ -1369,7 +1369,8 @@ with parameters from the *Messages* buffer modification."
           (dotimes (_i 11)
             (let* (flag*
                    (flag (lambda () (prog1 t (setq flag* t))))
-                   (indirect (make-indirect-buffer base "foo[indirect]")))
+                   (indirect (make-indirect-buffer base "foo[indirect]" nil
+                                                   inhibit)))
               (unwind-protect
                   (progn
                     (with-current-buffer indirect