[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."