Reorganise EXWM config a little

This commit is contained in:
2021-01-01 00:00:31 +00:00
parent 7b690bbc78
commit a61fc411c6

View File

@@ -345,41 +345,47 @@ needs to be set up to install them if they aren't already.
#+begin_src emacs-lisp
(use-package exwm
:config
(require 'exwm-randr)
(exwm-randr-enable)
(require 'exwm-config)
(exwm-config-default))
#+end_src
When I have my laptop connected to a monitor I want the built-in
display to turn off, but turn back on when it's disconnected. Turns
out this is a total pain.
*** Multi-monitor
Multi-monitor support is provided in =exwm-randr=:
To start with we need a function to tell whether a monitor's
attached. =exwm-randr= provides [[help:exwm-randr--get-monitors][exwm-randr--get-monitors]], but its
result is not -- as I'd expect -- a list of monitors, but instead a
rather complicated mess that is (as far as I can tell)
undocumented. Rather than trying to figure out what was going on
there, I opted for the search-in-shell-command-output route
#+begin_src emacs-lisp
(require 'exwm-randr)
(exwm-randr-enable)
#+end_src
#+begin_src emacs-lisp
(defun hdmi-connected-p ()
(string-match-p "HDMI-2 connected"
(shell-command-to-string "xrandr")))
#+end_src
When I have my laptop connected to a monitor I want the built-in
display to turn off, but turn back on when it's disconnected. Turns
out this is a total pain.
With that defined, an [[help:exwm-randr-screen-change-hook][exwm-randr-screen-change-hook]] can then be
added to turn the built-in display on and off appropriately.
To start with we need a function to tell whether a monitor's
attached. =exwm-randr= provides [[help:exwm-randr--get-monitors][exwm-randr--get-monitors]], but its
result is not -- as I'd expect -- a list of monitors, but instead a
rather complicated mess that is (as far as I can tell)
undocumented. Rather than trying to figure out what was going on
there, I opted for the search-in-shell-command-output route
#+begin_src emacs-lisp
(add-hook 'exwm-randr-screen-change-hook
(lambda ()
(let ((xrandr-command
(if (hdmi-connected-p)
"xrandr --output eDP-1 --off --output HDMI-2 --auto"
"xrandr --output eDP-1 --auto")))
(start-process-shell-command "xrandr" nil xrandr-command))))
#+end_src
#+begin_src emacs-lisp
(defun hdmi-connected-p ()
(string-match-p "HDMI-2 connected"
(shell-command-to-string "xrandr")))
#+end_src
With that defined, an [[help:exwm-randr-screen-change-hook][exwm-randr-screen-change-hook]] can then be
added to turn the built-in display on and off appropriately.
#+begin_src emacs-lisp
(add-hook 'exwm-randr-screen-change-hook
(lambda ()
(let ((xrandr-command
(if (hdmi-connected-p)
"xrandr --output eDP-1 --off --output HDMI-2 --auto"
"xrandr --output eDP-1 --auto")))
(start-process-shell-command "xrandr" nil xrandr-command))))
#+end_src
** Mode Line
*** Clock