aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBasil L. Contovounesios2023-01-11 16:34:07 +0000
committerBasil L. Contovounesios2023-01-17 10:38:22 +0000
commitbd094207c76c500f8a3bffe8231d8c6ae0fd0778 (patch)
tree715c592a1fbd3f8f3f15672fb895d93668956b94
parent9e7a5d58eea664b55e11f2ea5dc7da9ba26d500f (diff)
downloademacs-bd094207c76c500f8a3bffe8231d8c6ae0fd0778.tar.gz
emacs-bd094207c76c500f8a3bffe8231d8c6ae0fd0778.zip
Fix buffer-list-update-hook for indirect buffers
Fmake_indirect_buffer can be told whether to run buffer hooks since bug#49160, but until now it ran buffer-list-update-hook irrespective of this. * src/buffer.c (Fmake_indirect_buffer): Don't run buffer-list-update-hook when called with a non-nil INHIBIT-BUFFER-HOOKS argument. (run_buffer_list_update_hook): Don't special-case NULL argument, as no such callers remain. * test/src/buffer-tests.el (buffer-tests-inhibit-buffer-hooks-indirect): Test whether indirect buffer hooks are run regardless of whether base buffer hooks are inhibited. Check that all three buffer hooks, not just kill-buffer-query-functions, are inhibited.
-rw-r--r--src/buffer.c10
-rw-r--r--test/src/buffer-tests.el46
2 files changed, 31 insertions, 25 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 100e42fc1f9..88ca69b0dd8 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -525,14 +525,14 @@ get_truename_buffer (register Lisp_Object filename)
525 return Qnil; 525 return Qnil;
526} 526}
527 527
528/* Run buffer-list-update-hook if Vrun_hooks is non-nil, and BUF is NULL 528/* Run buffer-list-update-hook if Vrun_hooks is non-nil and BUF does
529 or does not have buffer hooks inhibited. BUF is NULL when called by 529 not have buffer hooks inhibited. */
530 make-indirect-buffer, since it does not inhibit buffer hooks. */
531 530
532static void 531static void
533run_buffer_list_update_hook (struct buffer *buf) 532run_buffer_list_update_hook (struct buffer *buf)
534{ 533{
535 if (! (NILP (Vrun_hooks) || (buf && buf->inhibit_buffer_hooks))) 534 eassert (buf);
535 if (! (NILP (Vrun_hooks) || buf->inhibit_buffer_hooks))
536 call1 (Vrun_hooks, Qbuffer_list_update_hook); 536 call1 (Vrun_hooks, Qbuffer_list_update_hook);
537} 537}
538 538
@@ -907,7 +907,7 @@ does not run the hooks `kill-buffer-hook',
907 set_buffer_internal_1 (old_b); 907 set_buffer_internal_1 (old_b);
908 } 908 }
909 909
910 run_buffer_list_update_hook (NULL); 910 run_buffer_list_update_hook (b);
911 911
912 return buf; 912 return buf;
913} 913}
diff --git a/test/src/buffer-tests.el b/test/src/buffer-tests.el
index e5de8f3464a..9d4bbf3e040 100644
--- a/test/src/buffer-tests.el
+++ b/test/src/buffer-tests.el
@@ -8315,29 +8315,35 @@ dicta sunt, explicabo. "))
8315 (remove-hook 'buffer-list-update-hook bluh)))) 8315 (remove-hook 'buffer-list-update-hook bluh))))
8316 8316
8317(ert-deftest buffer-tests-inhibit-buffer-hooks-indirect () 8317(ert-deftest buffer-tests-inhibit-buffer-hooks-indirect ()
8318 "Indirect buffers do not call `get-buffer-create'." 8318 "Test `make-indirect-buffer' argument INHIBIT-BUFFER-HOOKS."
8319 (dolist (inhibit '(nil t)) 8319 (let* ( base run-bluh run-kbh run-kbqf
8320 (let ((base (get-buffer-create "foo" inhibit))) 8320 (bluh (lambda () (setq run-bluh t)))
8321 (kbh (lambda () (setq run-kbh t)))
8322 (kbqf (lambda () (setq run-kbqf t))))
8323 (dolist (inhibit-base '(nil t))
8321 (unwind-protect 8324 (unwind-protect
8322 (dotimes (_i 11) 8325 (let (indirect)
8323 (let* (flag* 8326 (setq base (generate-new-buffer " base" inhibit-base))
8324 (flag (lambda () (prog1 t (setq flag* t)))) 8327 (dolist (inhibit-indirect '(nil t))
8325 (indirect (make-indirect-buffer base "foo[indirect]" nil 8328 (dotimes (_ 11)
8326 inhibit))) 8329 (unwind-protect
8327 (unwind-protect 8330 (let ((name (generate-new-buffer-name " indirect")))
8328 (progn 8331 (setq run-bluh nil run-kbh nil run-kbqf nil)
8329 (with-current-buffer indirect 8332 (add-hook 'buffer-list-update-hook bluh)
8330 (add-hook 'kill-buffer-query-functions flag nil t)) 8333 (with-current-buffer
8331 (kill-buffer indirect) 8334 (setq indirect (make-indirect-buffer
8332 (if inhibit 8335 base name nil inhibit-indirect))
8333 (should-not flag*) 8336 (add-hook 'kill-buffer-hook kbh nil t)
8334 (should flag*))) 8337 (add-hook 'kill-buffer-query-functions kbqf nil t)
8335 (let (kill-buffer-query-functions) 8338 (kill-buffer))
8339 (should (xor inhibit-indirect run-bluh))
8340 (should (xor inhibit-indirect run-kbh))
8341 (should (xor inhibit-indirect run-kbqf)))
8342 (remove-hook 'buffer-list-update-hook bluh)
8336 (when (buffer-live-p indirect) 8343 (when (buffer-live-p indirect)
8337 (kill-buffer indirect)))))) 8344 (kill-buffer indirect))))))
8338 (let (kill-buffer-query-functions) 8345 (when (buffer-live-p base)
8339 (when (buffer-live-p base) 8346 (kill-buffer base))))))
8340 (kill-buffer base)))))))
8341 8347
8342(ert-deftest zero-length-overlays-and-not () 8348(ert-deftest zero-length-overlays-and-not ()
8343 (with-temp-buffer 8349 (with-temp-buffer