From a61fc411c6a419887a67b1fc41393b720dcdb438 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Fri, 1 Jan 2021 00:00:31 +0000 Subject: [PATCH] Reorganise EXWM config a little --- config.org | 60 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/config.org b/config.org index 7d5d49a..443837f 100644 --- a/config.org +++ b/config.org @@ -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