rewrote xsetwacom-my-preferences to fish, automatic detection of HDMI-1

This commit is contained in:
Phuntsok Drak-pa 2019-10-16 11:58:39 +02:00
parent 790dfcef0f
commit 4b336fc4e2

View File

@ -1,89 +1,91 @@
#!/bin/bash #!/usr/bin/fish
# #
# From: # Inspired from:
# https://bitbucket.org/denilsonsa/small_scripts/src/default/xsetwacom_my_preferences.sh # https://bitbucket.org/denilsonsa/small_scripts/src/default/xsetwacom_my_preferences.sh
# #
# CONFIGURATION
# Set this to your (stylus) device. Find it by running:
# xsetwacom --list devices
DEVICE='Wacom USB Bamboo PAD Pen stylus'
# These numbers are specific for each device. Get them by running:
# xsetwacom --set "Your device name here" ResetArea
# xsetwacom --get "Your device name here" Area
AREAX=10690
AREAY=6680
# END OF CONFIGURATION
SCREEN="$1"
if [ -z "$SCREEN" -o "$SCREEN" = "--help" -o "$SCREEN" = "-help" -o "$SCREEN" = "-h" ]; then
echo 'This script configures a Wacom tablet to one specific monitor, or to '
echo 'the entire desktop. In addition, it also reduces the tablet area in '
echo 'order to keep the same aspect ratio as the monitor.'
echo
echo 'How to run this script? Run one of the following lines:'
CONNECTED_DISPLAYS=`xrandr -q --current | sed -n 's/^\([^ ]\+\) connected .*/\1/p'`
for d in desktop $CONNECTED_DISPLAYS; do
echo " $0 $d"
done
exit
fi
if [ "$SCREEN" = "desktop" ]; then
# Sample xrandr line:
# Screen 0: minimum 320 x 200, current 3286 x 1080, maximum 32767 x 32767
LINE=`xrandr -q --current | sed -n 's/^Screen 0:.*, current \([0-9]\+\) x \([0-9]\+\),.*/\1 \2/p'`
read WIDTH HEIGHT <<< "$LINE"
else
# Sample xrandr lines:
# LVDS1 connected 1366x768+0+312 (normal left inverted right x axis y axis) 309mm x 174mm
# VGA1 disconnected (normal left inverted right x axis y axis)
# HDMI1 connected 1920x1080+1366+0 (normal left inverted right x axis y axis) 509mm x 286mm
LINE=`xrandr -q --current | sed -n "s/^${SCREEN}"' connected \([0-9]\+\)x\([0-9]\+\)+.*/\1 \2/p'`
read WIDTH HEIGHT <<< "$LINE"
fi
if [ -z "$WIDTH" -o -z "$HEIGHT" ]; then
echo "Aborting."
exit 1
fi
# New values respecint aspect ratio:
RATIOAREAY=$(( AREAX * HEIGHT / WIDTH ))
RATIOAREAX=$(( AREAY * WIDTH / HEIGHT ))
if [ "$AREAY" -gt "$RATIOAREAY" ]; then
NEWAREAX="$AREAX"
NEWAREAY="$RATIOAREAY"
else
NEWAREAX="$RATIOAREAX"
NEWAREAY="$AREAY"
fi
xsetwacom --set "$DEVICE" Area 0 0 "$NEWAREAX" "$NEWAREAY"
xsetwacom --set "$DEVICE" MapToOutput "$SCREEN"
# $ xsetwacom --list devices
# Wacom Graphire4 6x8 stylus id: 9 type: STYLUS
# Wacom Graphire4 6x8 eraser id: 10 type: ERASER
# Wacom Graphire4 6x8 cursor id: 11 type: CURSOR
# Wacom Graphire4 6x8 pad id: 12 type: PAD
# Button mappings only apply to the "pad" device.
# The wheel on Graphire4 acts as mouse buttons 4 and 5 (as a mouse wheel)
# The buttons on Graphire4 act as mouse buttons 8 and 9
# Default Area: 0 0 16704 12064
# ResetArea
# #
# Other potentially useful parameters:
# * Mode: absolute or relative # Configuration
# * Rotate: none, cw, ccw, half
# * MapToOutput: "next" (but is buggy), "desktop", or a name from xrandr function set_device
set -g DEVICE "Wacom USB Bamboo PAD Pen stylus"
set -g DEVICETOUCH "Wacom USB Bamboo PAD Finger touch"
set -g WACOMPROPTOUCHSPEED "Device Accel Velocity Scaling"
xsetwacom set "$DEVICE" ResetArea
set AREATOT (xsetwacom get "$DEVICE" Area)
set -g AREAX (echo $AREATOT | awk '{print $3}')
set -g AREAY (echo $AREATOT | awk '{print $4}')
end
function print_help
echo "This script configures a Wacom tablet to one specific monitor,"
echo "or to the entire desktop. In addition, it also redues the tablet"
echo "area in order to keep the same aspect ration as the monitor."
echo
echo "How to run this script? Run one of the following lines:"
set CONNECTED_DISPLAYS (xrandr -q --current | sed -n 's/^\([^ ]\+\) connected .*/\1/p')
set EXEC_NAME (basename (status -f))
for d in $CONNECTED_DISPLAYS
echo " $EXEC_NAME $d"
end
echo " $EXEC_NAME desktop"
exit
end
function set_screen
if count $argv > /dev/null
switch $argv[1]
case "--help"
print_help
case "-h"
print_help
case "-help"
print_help
case '*'
set -g SCREEN $argv[1]
end
else
if test (xrandr --listmonitors | grep "HDMI-1")
set -g SCREEN "HDMI-1"
else
print_help
end
end
if [ "$SCREEN" = "desktop" ]
set -g LINE (xrandr -q --current | sed -n 's/^Screen 0:.*, current \([0-9]\+\) x \([0-9]\+\),.*/\1 \2/p')
else
set -g LINE (xrandr -q --current | sed -n "s/^$SCREEN"' connected \([0-9]\+\)x\([0-9]\+\)+.*/\1 \2/p')
end
echo $LINE | read WIDTH HEIGHT
set -g WIDTH $WIDTH
set -g HEIGHT $HEIGHT
if test -z $WIDTH || test -z $HEIGHT
exit 1
end
end
function adjust_device
set RATIOAREAY (math ceil \($AREAX \* $HEIGHT \/ $WIDTH\))
set RATIOAREAX (math ceil \($AREAY \* $WIDTH \/ $HEIGHT\))
if test $AREAY -gt $RATIOAREAY
set -g NEWAREAX $AREAX
set -g NEWAREAY $RATIOAREAY
else
set -g NEWAREAX $RATIOAREAX
set -g NEWAREAY $AREAY
end
xsetwacom set "$DEVICE" Area 0 0 $NEWAREAX $NEWAREAY
xsetwacom set "$DEVICE" MapToOutput "$SCREEN"
# slow down touchpad
xinput set-float-prop $DEVICETOUCH $WACOMPROPTOUCHSPEED 0.5
# slow down scrolling speed
xsetwacom set $DEVICETOUCH "ScrollDistance" "90"
end
set_device
set_screen
adjust_device