diff options
author | Vincent Ambo <tazjin@tvl.su> | 2023-11-25T14·47+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-11-25T15·24+0000 |
commit | 53008771ae57d229bb7eb642aefeb65a08bcb9d1 (patch) | |
tree | d7ec029cba6ba8dcbed010b40f98d4bae82eeddb | |
parent | dedcfc3d71260543bea0052bcb71cf4705720dd6 (diff) |
fix(tazjin/emacs): pick new primary monitor when disabling current r/7057
By default, this will be the (only) remaining monitor. In N>2 situations, ask the user. Change-Id: Id68fcf60d56d0414d1072b8ffeef72c608678f52 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10121 Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
-rw-r--r-- | users/tazjin/emacs/config/desktop.el | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/users/tazjin/emacs/config/desktop.el b/users/tazjin/emacs/config/desktop.el index 856265bcdb73..7bb15da85c7d 100644 --- a/users/tazjin/emacs/config/desktop.el +++ b/users/tazjin/emacs/config/desktop.el @@ -387,12 +387,24 @@ given monitor and assigns a workspace to it." "Interactively choose a monitor to disable." (interactive) - (let* ((active (seq-map #'car (cadr (exwm-randr--get-monitors)))) + (let* ((all (exwm-randr--get-monitors)) + (active (seq-map #'car (cadr all))) (monitor (if (> (seq-length active) 1) (completing-read "Disable which monitor? " active nil t) (error "Only one monitor is active!"))) - (xrandr-cmd (format "xrandr --output %s --off" monitor))) - (shell-command xrandr-cmd) + + ;; If this monitor was primary, pick another active one instead. + (remaining (seq-filter (lambda (s) (not (equal s monitor))) active)) + (new-primary + (when (equal monitor (car all)) + (pcase (seq-length remaining) + (1 (car remaining)) + (_ (completing-read "New primary? " remaining nil t)))))) + + (when new-primary + (shell-command (format "xrandr --output %s --primary" new-primary))) + + (shell-command (format "xrandr --output %s --off" monitor)) (exwm-assign-workspaces))) (exwm-input-set-key (kbd "s-m e") #'exwm-enable-monitor) |