Add hook run when screen changes

* exwm-randr.el (exwm-randr-screen-change-hook): New hook.
  (exwm-randr--init): Run the new hook in the event handler of
  ScreenChangeNotify.
This commit is contained in:
Chris Feng 2015-11-01 10:54:20 +08:00
parent 45c24eac7a
commit 9ee1c9bb17

View file

@ -25,15 +25,21 @@
;; tools such as xrandr(1) to properly configure RandR first. This dependency ;; tools such as xrandr(1) to properly configure RandR first. This dependency
;; may be removed in the future, but more work is needed before that. ;; may be removed in the future, but more work is needed before that.
;; To use this module, first load/enable it and properly configure the variable ;; To use this module, load, enable it and configure
;; `exwm-randr-workspace-output-plist': ;; `exwm-randr-workspace-output-plist' and `exwm-randr-screen-change-hook'
;; as follows:
;;
;; (require 'exwm-randr) ;; (require 'exwm-randr)
;; (setq exwm-randr-workspace-output-plist '(0 "VGA1")) ;; (setq exwm-randr-workspace-output-plist '(0 "VGA1"))
;; (add-hook 'exwm-randr-screen-change-hook
;; (lambda ()
;; (start-process-shell-command
;; "xrandr" nil "xrandr --output VGA1 --left-of LVDS1 --auto")))
;; (exwm-randr-enable) ;; (exwm-randr-enable)
;; Then configure RandR with 'xrandr': ;;
;; $ xrandr --output VGA1 --left-of LVDS1 --auto
;; With above lines, workspace 0 should be assigned to the output named "VGA1", ;; With above lines, workspace 0 should be assigned to the output named "VGA1",
;; staying at the left of other workspaces on the output "LVDS1". ;; staying at the left of other workspaces on the output "LVDS1". Please refer
;; to xrandr(1) for the configuration of RandR.
;; References: ;; References:
;; + RandR (http://www.x.org/archive/X11R7.7/doc/randrproto/randrproto.txt) ;; + RandR (http://www.x.org/archive/X11R7.7/doc/randrproto/randrproto.txt)
@ -109,6 +115,9 @@
:data (vconcat viewports))) :data (vconcat viewports)))
(xcb:flush exwm--connection))) (xcb:flush exwm--connection)))
(defvar exwm-randr-screen-change-hook nil
"Normal hook run when screen changes.")
(defun exwm-randr--init () (defun exwm-randr--init ()
"Initialize RandR extension and EXWM RandR module." "Initialize RandR extension and EXWM RandR module."
(if (= 0 (slot-value (xcb:get-extension-data exwm--connection 'xcb:randr) (if (= 0 (slot-value (xcb:get-extension-data exwm--connection 'xcb:randr)
@ -125,6 +134,7 @@
(xcb:+event exwm--connection 'xcb:randr:ScreenChangeNotify (xcb:+event exwm--connection 'xcb:randr:ScreenChangeNotify
(lambda (_data _synthetic) (lambda (_data _synthetic)
(exwm--log "(RandR) ScreenChangeNotify") (exwm--log "(RandR) ScreenChangeNotify")
(run-hooks 'exwm-randr-screen-change-hook)
(exwm-randr--refresh))) (exwm-randr--refresh)))
;; (xcb:+event exwm--connection 'xcb:randr:Notify ;; (xcb:+event exwm--connection 'xcb:randr:Notify
;; (lambda (_data _synthetic) ;; (lambda (_data _synthetic)