Fix issues with deleting the last workspace

* exwm-workspace.el (exwm-workspace-delete): Prevent deleting the last
workspace.

* exwm-workspace.el (exwm-workspace--remove-frame-as-workspace): Create
a new workspace if the last one is deleted.
This commit is contained in:
Chris Feng 2016-07-22 12:29:01 +08:00
parent d86db3edd6
commit 6ecd8b921f

View file

@ -604,10 +604,11 @@ INDEX must not exceed the current number of workspaces."
(defun exwm-workspace-delete (&optional frame-or-index) (defun exwm-workspace-delete (&optional frame-or-index)
"Delete the workspace FRAME-OR-INDEX." "Delete the workspace FRAME-OR-INDEX."
(interactive) (interactive)
(delete-frame (when (< 1 (exwm-workspace--count))
(if frame-or-index (delete-frame
(exwm-workspace--workspace-from-frame-or-index frame-or-index) (if frame-or-index
exwm-workspace--current))) (exwm-workspace--workspace-from-frame-or-index frame-or-index)
exwm-workspace--current))))
(defun exwm-workspace--on-focus-in () (defun exwm-workspace--on-focus-in ()
"Handle unexpected frame switch." "Handle unexpected frame switch."
@ -1198,12 +1199,13 @@ Please check `exwm-workspace--minibuffer-own-frame-p' first."
(cond (cond
((not (exwm-workspace--workspace-p frame)) ((not (exwm-workspace--workspace-p frame))
(exwm--log "Frame `%s' is not a workspace" frame)) (exwm--log "Frame `%s' is not a workspace" frame))
((= 1 (exwm-workspace--count))
;; FIXME: When using dedicated minibuffer frame, deleting the last
;; frame hangs Emacs.
(user-error "[EXWM] Cannot remove last workspace"))
(t (t
(exwm--log "Removing frame `%s' as workspace" frame) (exwm--log "Removing frame `%s' as workspace" frame)
(when (= 1 (exwm-workspace--count))
;; The user managed to delete the last workspace, so create a new one.
(exwm--log "Last worksapce deleted; create a new one")
(let ((exwm-workspace--create-silently t))
(make-frame)))
(let* ((index (exwm-workspace--position frame)) (let* ((index (exwm-workspace--position frame))
(lastp (= index (1- (exwm-workspace--count)))) (lastp (= index (1- (exwm-workspace--count))))
(nextw (elt exwm-workspace--list (+ index (if lastp -1 +1))))) (nextw (elt exwm-workspace--list (+ index (if lastp -1 +1)))))