emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm aa7de9d 4/5: Exit the active minibuffer on unmanag


From: Chris Feng
Subject: [elpa] externals/exwm aa7de9d 4/5: Exit the active minibuffer on unmanaging X windows
Date: Sat, 30 Jul 2016 02:21:50 +0000 (UTC)

branch: externals/exwm
commit aa7de9dc6f13b0d937fe265b64368b7be6e8798e
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Exit the active minibuffer on unmanaging X windows
    
    * exwm-manage.el (exwm-manage--unmanage-window): Exit the minibuffer as
    a precaution to prevent the "selecting deleted buffer" error.
---
 exwm-manage.el |   28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/exwm-manage.el b/exwm-manage.el
index c083229..16abe98 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -352,14 +352,26 @@ manager is shutting down."
         ;; Destroy the X window container (and the frame container if any).
         (xcb:+request exwm--connection
             (make-instance 'xcb:DestroyWindow :window exwm--container))
-        (let ((kill-buffer-query-functions nil)
-              (floating exwm--floating-frame))
-          (kill-buffer)
-          (when floating
-            (select-window
-             (frame-selected-window exwm-workspace--current)))))
-      (exwm-manage--set-client-list)
-      (xcb:flush exwm--connection))))
+        (exwm-manage--set-client-list)
+        (xcb:flush exwm--connection))
+      (let ((kill-buffer-func
+             (lambda (buffer)
+               (with-current-buffer buffer
+                 (let ((kill-buffer-query-functions nil)
+                       (floating exwm--floating-frame))
+                   (kill-buffer)
+                   (when floating
+                     (select-window
+                      (frame-selected-window exwm-workspace--current))))))))
+        (if (not (active-minibuffer-window))
+            ;; Kill the buffer as usual.
+            (funcall kill-buffer-func buffer)
+          ;; This can happen when this buffer was requested to be killed
+          ;; from the minibuffer (e.g. with `ido-kill-buffer-at-head').
+          ;; We have to exit the minibuffer first or there'll be a
+          ;; "selecting deleted buffer" error.
+          (run-with-idle-timer 0 nil kill-buffer-func buffer)
+          (exit-minibuffer))))))
 
 (defun exwm-manage--scan ()
   "Search for existing windows and try to manage them."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]