diff options
-rw-r--r-- | emacs/.emacs.d/wpc/display.el | 30 | ||||
-rw-r--r-- | emacs/.emacs.d/wpc/keybindings.el | 19 |
2 files changed, 31 insertions, 18 deletions
diff --git a/emacs/.emacs.d/wpc/display.el b/emacs/.emacs.d/wpc/display.el index 2a7bbe94247f..56fc2de89817 100644 --- a/emacs/.emacs.d/wpc/display.el +++ b/emacs/.emacs.d/wpc/display.el @@ -18,14 +18,12 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'prelude) +(require 'cycle) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconst display/install-kbds? t - "When t, install the keybindings defined in this module.") - ;; TODO: Consider if this logic should be conditioned by `device/work-laptop?'. (defconst display/laptop-monitor "eDP1" "The xrandr identifier for my primary screen (on work laptop).") @@ -34,6 +32,11 @@ (defconst display/4k-monitor "HDMI1" "The xrandr identifer for my 4K monitor.") +(defconst display/display-states (cycle/from-list '((t . t) (t . nil) (nil . t))) + "A list of cons cells modelling enabled and disabled states for my displays. +The car models the enabled state of my laptop display; the cdr models the + enabled state of my external monitor.") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Library ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -78,21 +81,12 @@ Sometimes this is useful when I'm sharing my screen in a Google Hangout and I :command (string/format "xrandr --output %s --off" display/laptop-monitor))) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Keybindings -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(when display/install-kbds? - (general-define-key - :prefix "<SPC>" - :states '(normal) - "d0" #'display/disable-laptop - "d1" #'display/enable-laptop) - (general-define-key - :prefix "<SPC>" - :states '(normal) - "D0" #'display/disable-4k - "D1" #'display/enable-4k)) +(defun display/cycle-display-states () + "Cycle through `display/display-states' enabling and disabling displays." + (interactive) + (let ((state (cycle/next display/display-states))) + (if (car state) (display/enable-laptop) (display/disable-laptop)) + (if (cdr state) (display/enable-4k) (display/disable-4k)))) (provide 'display) ;;; display.el ends here diff --git a/emacs/.emacs.d/wpc/keybindings.el b/emacs/.emacs.d/wpc/keybindings.el index 5cebf34b8f0a..c9af5b48d1e9 100644 --- a/emacs/.emacs.d/wpc/keybindings.el +++ b/emacs/.emacs.d/wpc/keybindings.el @@ -19,6 +19,8 @@ (require 'window-manager) (require 'vterm-mgt) (require 'buffer) +(require 'display) +(require 'device) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Configuration @@ -66,5 +68,22 @@ "<C-S-iso-lefttab>" #'vterm-mgt-prev "<s-backspace>" #'vterm-mgt-rename-buffer) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Displays +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(when (device/work-laptop?) + (keybinding/exwm "<XF86Display>" #'display/cycle-display-states) + (general-define-key + :prefix "<SPC>" + :states '(normal) + "d0" #'display/disable-laptop + "d1" #'display/enable-laptop) + (general-define-key + :prefix "<SPC>" + :states '(normal) + "D0" #'display/disable-4k + "D1" #'display/enable-4k)) + (provide 'keybindings) ;;; keybindings.el ends here |