mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-27 14:57:59 +01:00
Add `exwm-workspace--position' helper
* exwm-workspace.el (exwm-workspace--position): New function. * exwm-layout.el (exwm-layout--refresh): * exwm-input.el (exwm-input--on-ButtonPress): * exwm-workspace.el (exwm-workspace--update-switch-history): * exwm.el (exwm--on-ClientMessage, exwm-workspace--init): Use it.
This commit is contained in:
parent
cd1372eaec
commit
ed6a18a697
4 changed files with 16 additions and 7 deletions
|
@ -179,6 +179,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
||||||
|
|
||||||
(declare-function exwm-floating--start-moveresize "exwm-floating.el"
|
(declare-function exwm-floating--start-moveresize "exwm-floating.el"
|
||||||
(id &optional type))
|
(id &optional type))
|
||||||
|
(declare-function exwm-workspace--position "exwm-workspace.el" (frame))
|
||||||
|
|
||||||
(defvar exwm-workspace--list)
|
(defvar exwm-workspace--list)
|
||||||
|
|
||||||
|
@ -208,14 +209,14 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
||||||
(if (memq frame exwm-workspace--list)
|
(if (memq frame exwm-workspace--list)
|
||||||
;; The X window is on another workspace
|
;; The X window is on another workspace
|
||||||
(exwm-workspace-switch
|
(exwm-workspace-switch
|
||||||
(cl-position frame exwm-workspace--list))
|
(exwm-workspace--position frame))
|
||||||
(with-current-buffer (window-buffer window)
|
(with-current-buffer (window-buffer window)
|
||||||
(when (and (eq major-mode 'exwm-mode)
|
(when (and (eq major-mode 'exwm-mode)
|
||||||
(not (eq exwm--frame
|
(not (eq exwm--frame
|
||||||
exwm-workspace--current)))
|
exwm-workspace--current)))
|
||||||
;; The floating X window is on another workspace
|
;; The floating X window is on another workspace
|
||||||
(exwm-workspace-switch
|
(exwm-workspace-switch
|
||||||
(cl-position exwm--frame exwm-workspace--list))))))
|
(exwm-workspace--position exwm--frame))))))
|
||||||
;; It has been reported that the `window' may have be deleted
|
;; It has been reported that the `window' may have be deleted
|
||||||
(if (window-live-p window)
|
(if (window-live-p window)
|
||||||
(select-window window)
|
(select-window window)
|
||||||
|
|
|
@ -161,6 +161,7 @@
|
||||||
(declare-function exwm-workspace--current-width "exwm-workspace.el")
|
(declare-function exwm-workspace--current-width "exwm-workspace.el")
|
||||||
(declare-function exwm-workspace--get-geometry "exwm-workspace.el" (frame))
|
(declare-function exwm-workspace--get-geometry "exwm-workspace.el" (frame))
|
||||||
(declare-function exwm-workspace--minibuffer-own-frame-p "exwm-workspace.el")
|
(declare-function exwm-workspace--minibuffer-own-frame-p "exwm-workspace.el")
|
||||||
|
(declare-function exwm-workspace--position "exwm-workspace.el" (frame))
|
||||||
(declare-function exwm-workspace--set-fullscreen "exwm-workspace.el" (frame))
|
(declare-function exwm-workspace--set-fullscreen "exwm-workspace.el" (frame))
|
||||||
(declare-function exwm-workspace-move-window "exwm-workspace.el"
|
(declare-function exwm-workspace-move-window "exwm-workspace.el"
|
||||||
(index &optional id))
|
(index &optional id))
|
||||||
|
@ -346,7 +347,7 @@ selected by `other-buffer'."
|
||||||
(if (eq frame exwm--frame)
|
(if (eq frame exwm--frame)
|
||||||
(exwm-layout--show exwm--id window)
|
(exwm-layout--show exwm--id window)
|
||||||
(exwm-workspace-move-window
|
(exwm-workspace-move-window
|
||||||
(cl-position frame exwm-workspace--list) exwm--id))
|
(exwm-workspace--position frame) exwm--id))
|
||||||
;; Make sure this buffer is not displayed elsewhere. Note down
|
;; Make sure this buffer is not displayed elsewhere. Note down
|
||||||
;; windows displaying an EXWM-buffer now displayed elsewhere; we
|
;; windows displaying an EXWM-buffer now displayed elsewhere; we
|
||||||
;; need to display with some other buffer there.
|
;; need to display with some other buffer there.
|
||||||
|
|
|
@ -29,6 +29,13 @@
|
||||||
|
|
||||||
(defvar exwm-workspace-number 4 "Number of workspaces (1 ~ 10).")
|
(defvar exwm-workspace-number 4 "Number of workspaces (1 ~ 10).")
|
||||||
(defvar exwm-workspace--list nil "List of all workspaces (Emacs frames).")
|
(defvar exwm-workspace--list nil "List of all workspaces (Emacs frames).")
|
||||||
|
|
||||||
|
(defsubst exwm-workspace--position (frame)
|
||||||
|
"Retrieve index of given FRAME in workspace list.
|
||||||
|
|
||||||
|
NIL if FRAME is not a workspace"
|
||||||
|
(cl-position frame exwm-workspace--list))
|
||||||
|
|
||||||
(defvar exwm-workspace--switch-map
|
(defvar exwm-workspace--switch-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
(define-key map [t] (lambda () (interactive)))
|
(define-key map [t] (lambda () (interactive)))
|
||||||
|
@ -72,7 +79,7 @@
|
||||||
(with-current-buffer (cdr i)
|
(with-current-buffer (cdr i)
|
||||||
(when exwm--frame
|
(when exwm--frame
|
||||||
(setf (aref not-empty
|
(setf (aref not-empty
|
||||||
(cl-position exwm--frame exwm-workspace--list))
|
(exwm-workspace--position exwm--frame))
|
||||||
t))))
|
t))))
|
||||||
(setq exwm-workspace--switch-history
|
(setq exwm-workspace--switch-history
|
||||||
(mapcar
|
(mapcar
|
||||||
|
@ -948,13 +955,13 @@ applied to all subsequently created X frames."
|
||||||
:window workspace
|
:window workspace
|
||||||
:data
|
:data
|
||||||
(format "EXWM workspace %d"
|
(format "EXWM workspace %d"
|
||||||
(cl-position i exwm-workspace--list))))
|
(exwm-workspace--position i))))
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ewmh:set-_NET_WM_NAME
|
(make-instance 'xcb:ewmh:set-_NET_WM_NAME
|
||||||
:window container
|
:window container
|
||||||
:data
|
:data
|
||||||
(format "EXWM workspace %d frame container"
|
(format "EXWM workspace %d frame container"
|
||||||
(cl-position i exwm-workspace--list)))))
|
(exwm-workspace--position i)))))
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ReparentWindow
|
(make-instance 'xcb:ReparentWindow
|
||||||
:window outer-id :parent container :x 0 :y 0))
|
:window outer-id :parent container :x 0 :y 0))
|
||||||
|
|
2
exwm.el
2
exwm.el
|
@ -438,7 +438,7 @@
|
||||||
;; FIXME: check (may require other properties set)
|
;; FIXME: check (may require other properties set)
|
||||||
(when (memq xcb:Atom:_NET_WM_STATE_DEMANDS_ATTENTION props)
|
(when (memq xcb:Atom:_NET_WM_STATE_DEMANDS_ATTENTION props)
|
||||||
(when (= action xcb:ewmh:_NET_WM_STATE_ADD)
|
(when (= action xcb:ewmh:_NET_WM_STATE_ADD)
|
||||||
(let ((idx (cl-position exwm--frame exwm-workspace--list)))
|
(let ((idx (exwm-workspace--position exwm--frame)))
|
||||||
(unless (= idx exwm-workspace-current-index)
|
(unless (= idx exwm-workspace-current-index)
|
||||||
(set-frame-parameter exwm--frame 'exwm--urgency t)
|
(set-frame-parameter exwm--frame 'exwm--urgency t)
|
||||||
(setq exwm-workspace--switch-history-outdated t))))
|
(setq exwm-workspace--switch-history-outdated t))))
|
||||||
|
|
Loading…
Reference in a new issue