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:
parent
d86db3edd6
commit
6ecd8b921f
1 changed files with 10 additions and 8 deletions
|
@ -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)
|
||||||
|
(when (< 1 (exwm-workspace--count))
|
||||||
(delete-frame
|
(delete-frame
|
||||||
(if frame-or-index
|
(if frame-or-index
|
||||||
(exwm-workspace--workspace-from-frame-or-index frame-or-index)
|
(exwm-workspace--workspace-from-frame-or-index frame-or-index)
|
||||||
exwm-workspace--current)))
|
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)))))
|
||||||
|
|
Loading…
Reference in a new issue