Add StumpWM keybinding to configure monitor layout
This commit is contained in:
parent
819d7551a7
commit
fc7fa03725
@ -35,6 +35,7 @@
|
|||||||
(define-key stumpwm:*root-map* (kbd "w") "exec rofi -show window")
|
(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 "P") "exec passmenu")
|
||||||
(define-key stumpwm:*root-map* (kbd "N") "exec networkmanager_dmenu")
|
(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 "L") "lock")
|
||||||
(define-key stumpwm:*root-map* (kbd "b") "battery")
|
(define-key stumpwm:*root-map* (kbd "b") "battery")
|
||||||
(define-key *top-map* (kbd "XF86MonBrightnessDown") "exec light -U 5")
|
(define-key *top-map* (kbd "XF86MonBrightnessDown") "exec light -U 5")
|
||||||
|
99
stumpwm/bin/monitor_layout.sh
Executable file
99
stumpwm/bin/monitor_layout.sh
Executable file
@ -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]} )
|
Loading…
Reference in New Issue
Block a user