From: "Basil L. Contovounesios" via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Eli Zaretskii <eliz@gnu.org>,
49160@debbugs.gnu.org, dick <dick.r.chiang@gmail.com>
Subject: bug#49160: 28.0.50; [PATCH] Uninitialized inhibit_buffer_hooks
Date: Wed, 11 Jan 2023 20:13:21 +0000 [thread overview]
Message-ID: <87sfggx21q.fsf@tcd.ie> (raw)
In-Reply-To: <87a6mijmrb.fsf@gnus.org> (Lars Ingebrigtsen's message of "Mon, 19 Jul 2021 18:23:36 +0200")
[-- Attachment #1: Type: text/plain, Size: 715 bytes --]
Lars Ingebrigtsen [2021-07-19 18:23 +0200] wrote:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>> More to the point: since this attribute of a buffer cannot be changed
>> once the buffer is created, I think it might be okay to copy from the
>> base buffer, but we should also allow the caller to control that by
>> introducing an optional argument similar to that of get-buffer-create.
>> And if we do that, we could also consider making the default value be
>> nil, not necessarily a copy of that of the base buffer.
>
> I've now applied Dick's patch, and then adjusted as you suggest.
Fmake_indirect_buffer continues to run buffer-list-update-hook
regardless of the new argument. Any objections to changing that?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-buffer-list-update-hook-for-indirect-buffers.patch --]
[-- Type: text/x-diff, Size: 4922 bytes --]
From 0fdf0cb925088d0b5a019df2bbf803e550bebbd5 Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <contovob@tcd.ie>
Date: Wed, 11 Jan 2023 16:34:07 +0000
Subject: [PATCH] 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.
---
src/buffer.c | 10 ++++-----
test/src/buffer-tests.el | 46 +++++++++++++++++++++++-----------------
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)
return Qnil;
}
-/* Run buffer-list-update-hook if Vrun_hooks is non-nil, and BUF is NULL
- or does not have buffer hooks inhibited. BUF is NULL when called by
- make-indirect-buffer, since it does not inhibit buffer hooks. */
+/* Run buffer-list-update-hook if Vrun_hooks is non-nil and BUF does
+ not have buffer hooks inhibited. */
static void
run_buffer_list_update_hook (struct buffer *buf)
{
- if (! (NILP (Vrun_hooks) || (buf && buf->inhibit_buffer_hooks)))
+ eassert (buf);
+ if (! (NILP (Vrun_hooks) || buf->inhibit_buffer_hooks))
call1 (Vrun_hooks, Qbuffer_list_update_hook);
}
@@ -907,7 +907,7 @@ DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer,
set_buffer_internal_1 (old_b);
}
- run_buffer_list_update_hook (NULL);
+ run_buffer_list_update_hook (b);
return buf;
}
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 @@ buffer-tests-inhibit-buffer-hooks
(remove-hook 'buffer-list-update-hook bluh))))
(ert-deftest buffer-tests-inhibit-buffer-hooks-indirect ()
- "Indirect buffers do not call `get-buffer-create'."
- (dolist (inhibit '(nil t))
- (let ((base (get-buffer-create "foo" inhibit)))
+ "Test `make-indirect-buffer' argument INHIBIT-BUFFER-HOOKS."
+ (let* ( base run-bluh run-kbh run-kbqf
+ (bluh (lambda () (setq run-bluh t)))
+ (kbh (lambda () (setq run-kbh t)))
+ (kbqf (lambda () (setq run-kbqf t))))
+ (dolist (inhibit-base '(nil t))
(unwind-protect
- (dotimes (_i 11)
- (let* (flag*
- (flag (lambda () (prog1 t (setq flag* t))))
- (indirect (make-indirect-buffer base "foo[indirect]" nil
- inhibit)))
- (unwind-protect
- (progn
- (with-current-buffer indirect
- (add-hook 'kill-buffer-query-functions flag nil t))
- (kill-buffer indirect)
- (if inhibit
- (should-not flag*)
- (should flag*)))
- (let (kill-buffer-query-functions)
+ (let (indirect)
+ (setq base (generate-new-buffer " base" inhibit-base))
+ (dolist (inhibit-indirect '(nil t))
+ (dotimes (_ 11)
+ (unwind-protect
+ (let ((name (generate-new-buffer-name " indirect")))
+ (setq run-bluh nil run-kbh nil run-kbqf nil)
+ (add-hook 'buffer-list-update-hook bluh)
+ (with-current-buffer
+ (setq indirect (make-indirect-buffer
+ base name nil inhibit-indirect))
+ (add-hook 'kill-buffer-hook kbh nil t)
+ (add-hook 'kill-buffer-query-functions kbqf nil t)
+ (kill-buffer))
+ (should (xor inhibit-indirect run-bluh))
+ (should (xor inhibit-indirect run-kbh))
+ (should (xor inhibit-indirect run-kbqf)))
+ (remove-hook 'buffer-list-update-hook bluh)
(when (buffer-live-p indirect)
(kill-buffer indirect))))))
- (let (kill-buffer-query-functions)
- (when (buffer-live-p base)
- (kill-buffer base)))))))
+ (when (buffer-live-p base)
+ (kill-buffer base))))))
(ert-deftest zero-length-overlays-and-not ()
(with-temp-buffer
--
2.39.0
[-- Attachment #3: Type: text/plain, Size: 20 bytes --]
Thanks,
--
Basil
next prev parent reply other threads:[~2023-01-11 20:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-21 19:39 bug#49160: 28.0.50; [PATCH] Uninitialized inhibit_buffer_hooks dick
2021-06-22 11:41 ` Eli Zaretskii
2021-07-19 16:23 ` Lars Ingebrigtsen
2021-07-19 16:47 ` Eli Zaretskii
2023-01-11 20:13 ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2023-01-11 20:23 ` Eli Zaretskii
2023-01-11 21:16 ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-12 7:39 ` Eli Zaretskii
2023-01-12 16:25 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-14 13:20 ` Eli Zaretskii
2023-01-14 14:01 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-01-17 11:08 ` Basil L. Contovounesios via Bug reports for GNU Emacs, the Swiss army knife of text editors
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sfggx21q.fsf@tcd.ie \
--to=bug-gnu-emacs@gnu.org \
--cc=49160@debbugs.gnu.org \
--cc=contovob@tcd.ie \
--cc=dick.r.chiang@gmail.com \
--cc=eliz@gnu.org \
--cc=larsi@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.