From fc7fa0372549f6a6cda88bba32a97cf0ac84b58e Mon Sep 17 00:00:00 2001 From: Jeremy Dormitzer Date: Sat, 4 Jan 2020 08:12:06 -0500 Subject: [PATCH] Add StumpWM keybinding to configure monitor layout --- stumpwm/.stumpwm.d/init.lisp | 1 + stumpwm/bin/monitor_layout.sh | 99 +++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100755 stumpwm/bin/monitor_layout.sh diff --git a/stumpwm/.stumpwm.d/init.lisp b/stumpwm/.stumpwm.d/init.lisp index d023270..3aae2ce 100644 --- a/stumpwm/.stumpwm.d/init.lisp +++ b/stumpwm/.stumpwm.d/init.lisp @@ -35,6 +35,7 @@ (define-key stumpwm:*root-map* (kbd "w") "exec rofi -show window") (define-key stumpwm:*root-map* (kbd "P") "exec passmenu") (define-key stumpwm:*root-map* (kbd "N") "exec networkmanager_dmenu") +(define-key stumpwm:*root-map* (kbd "M") "exec ~/bin/monitor_layout.sh") (define-key stumpwm:*root-map* (kbd "L") "lock") (define-key stumpwm:*root-map* (kbd "b") "battery") (define-key *top-map* (kbd "XF86MonBrightnessDown") "exec light -U 5") diff --git a/stumpwm/bin/monitor_layout.sh b/stumpwm/bin/monitor_layout.sh new file mode 100755 index 0000000..e51b3bb --- /dev/null +++ b/stumpwm/bin/monitor_layout.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +XRANDR=$(which xrandr) + +MONITORS=( $( ${XRANDR} | awk '( $2 == "connected" ){ print $1 }' ) ) + + +NUM_MONITORS=${#MONITORS[@]} + +TITLES=() +COMMANDS=() + + +function gen_xrandr_only() +{ + selected=$1 + + cmd="xrandr --output ${MONITORS[$selected]} --auto " + + for entry in $(seq 0 $((${NUM_MONITORS}-1))) + do + if [ $selected != $entry ] + then + cmd="$cmd --output ${MONITORS[$entry]} --off" + fi + done + + echo $cmd +} + + + +declare -i index=0 +TILES[$index]="Cancel" +COMMANDS[$index]="true" +index+=1 + + +for entry in $(seq 0 $((${NUM_MONITORS}-1))) +do + TILES[$index]="Only ${MONITORS[$entry]}" + COMMANDS[$index]=$(gen_xrandr_only $entry) + index+=1 +done + +## +# Dual screen options +## +for entry_a in $(seq 0 $((${NUM_MONITORS}-1))) +do + for entry_b in $(seq 0 $((${NUM_MONITORS}-1))) + do + if [ $entry_a != $entry_b ] + then + TILES[$index]="Dual Screen ${MONITORS[$entry_a]} -> ${MONITORS[$entry_b]}" + COMMANDS[$index]="xrandr --output ${MONITORS[$entry_a]} --auto \ + --output ${MONITORS[$entry_b]} --auto --left-of ${MONITORS[$entry_a]}" + + index+=1 + fi + done +done + + +## +# Clone monitors +## +for entry_a in $(seq 0 $((${NUM_MONITORS}-1))) +do + for entry_b in $(seq 0 $((${NUM_MONITORS}-1))) + do + if [ $entry_a != $entry_b ] + then + TILES[$index]="Clone Screen ${MONITORS[$entry_a]} -> ${MONITORS[$entry_b]}" + COMMANDS[$index]="xrandr --output ${MONITORS[$entry_a]} --auto \ + --output ${MONITORS[$entry_b]} --auto --same-as ${MONITORS[$entry_a]}" + + index+=1 + fi + done +done + + +## +# Generate entries, where first is key. +## +function gen_entries() +{ + for a in $(seq 0 $(( ${#TILES[@]} -1 ))) + do + echo $a ${TILES[a]} + done +} + +# Call menu +SEL=$( gen_entries | rofi -dmenu -p "Monitor Setup:" -a 0 -no-custom | awk '{print $1}' ) + +# Call xrandr +$( ${COMMANDS[$SEL]} )