From 5d69851f3943138e0a8e7344f422ce80f18ae3e5 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 18 Mar 2018 02:39:32 -0400 Subject: [PATCH] feature/popup: possible fix for elusive 'at top level' bug Occasionally, a keyboard-quit bubbles up from popup's buffer cleanup process, causing all kinds of havoc; like killed term buffers (#436), abrupt interrupting of the minibuffer, and the point jumping around. This tries to fix this, but needs more testing! --- modules/feature/popup/autoload.el | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/feature/popup/autoload.el b/modules/feature/popup/autoload.el index 63aab8c6a..e7958ae38 100644 --- a/modules/feature/popup/autoload.el +++ b/modules/feature/popup/autoload.el @@ -14,18 +14,19 @@ "Tries to kill BUFFER, as was requested by a transient timer. If it fails, eg. the buffer is visible, then set another timer and try again later." (when (buffer-live-p buffer) - (let ((kill-buffer-hook (remq '+popup|kill-buffer-hook kill-buffer-hook))) - (cond ((eq ttl 0) - (kill-buffer buffer)) - ((get-buffer-window buffer) - (with-current-buffer buffer - (setq +popup--timer - (run-at-time ttl nil #'+popup--kill-buffer buffer ttl)))) - ((with-demoted-errors "Error killing transient buffer: %s" - (let (confirm-kill-processes) - (when-let* ((process (get-buffer-process (current-buffer)))) - (kill-process process))) - (kill-buffer buffer))))))) + (with-temp-buffer + (let ((kill-buffer-hook (remq '+popup|kill-buffer-hook kill-buffer-hook))) + (cond ((eq ttl 0) + (kill-buffer buffer)) + ((get-buffer-window buffer) + (with-current-buffer buffer + (setq +popup--timer + (run-at-time ttl nil #'+popup--kill-buffer buffer ttl)))) + ((with-demoted-errors "Error killing transient buffer: %s" + (let (confirm-kill-processes) + (when-let* ((process (get-buffer-process (current-buffer)))) + (kill-process process))) + (kill-buffer buffer)))))))) (defun +popup--init (window &optional alist) "Initializes a popup window. Run any time a popup is opened. It sets the