summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fankhauser hiddenalpha.ch2023-06-21 22:34:39 +0200
committerAndreas Fankhauser hiddenalpha.ch2023-06-21 22:34:39 +0200
commit809e2a1b61bc84ff8d35e1955ea2d48d02ca6823 (patch)
tree043dcdb220d21b129d2c70a764a009a50fb9b81b
parent82ace01abba4f5d45861a7a1b8c82fa8e8151b6e (diff)
downloaddotfiles-809e2a1b61bc84ff8d35e1955ea2d48d02ca6823.zip
dotfiles-809e2a1b61bc84ff8d35e1955ea2d48d02ca6823.tar.gz
ReWrite my-brightness script to hopefully kill some bugs
-rw-r--r--src/bin/my-brightness107
-rw-r--r--src/bin/my-brightness.sh48
2 files changed, 107 insertions, 48 deletions
diff --git a/src/bin/my-brightness b/src/bin/my-brightness
new file mode 100644
index 0000000..0f65b9b
--- /dev/null
+++ b/src/bin/my-brightness
@@ -0,0 +1,107 @@
+#!/bin/sh
+
+#
+# non-root alternative to "my-backlight"
+# (Unluckily requires gnuAWK for now)
+#
+
+set -e
+
+MONITOR="LVDS-1"
+PHYS_MIN=0 # smallest value xrandr accepts/reports
+PHYS_MAX=100 # largest value xrandr accepts/reports
+VIRT_MIN=20 # smallest percent value allowed
+VIRT_MAX=100 # largest percent value allowed
+
+
+getCurrentLevelVirtValue () {
+ local val=$(xrandr --verbose | gawk 'match($0,/Brightness: ([0-9\\.]+)/,m) {print m[1]}')
+ val=$(echo "$val * 100 + 0.5" | bc | sed -E 's_^([0-9]+)\.?[0-9]*$_\1_')
+ val=$(asVirtualScale "$val")
+ echo >&2 "getCurrentLevelVirtValue $@ --> $val"
+ echo $val
+}
+
+
+asVirtualScale () {
+ local tmp=${1:?}
+ local vRange=$(echo "${VIRT_MAX:?}-${VIRT_MIN:?}"|bc)
+ local physRange=$(echo "${PHYS_MAX:?}-${PHYS_MIN}"|bc)
+ tmp=$(echo "($tmp * $vRange / $physRange) + $VIRT_MIN - $PHYS_MIN" | bc)
+ echo >&2 "asVirtualScale $@ --> $tmp"
+ echo $tmp
+}
+
+
+asPhysicalScale () {
+ #echo >&2 "asPhysicalScale" "$@"
+ local tmp=${1:?}
+ local vRange=$(echo "${VIRT_MAX:?}-${VIRT_MIN:?}"|bc)
+ local physRange=$(echo "${PHYS_MAX:?}-${PHYS_MIN}"|bc)
+ tmp=$(echo "($tmp + $PHYS_MIN - $VIRT_MIN) * $physRange / $vRange" | bc)
+ echo >&2 "asPhysicalScale $@ --> $tmp"
+ echo $tmp
+}
+
+
+xrandrScaleByVirtScale () {
+ local tmp=${1:?}
+ tmp=$(echo "scale=2;($tmp / $VIRT_MAX)" | bc)
+ echo >&2 "xrandrScaleByVirtScale $@ --> $tmp"
+ echo $tmp
+}
+
+
+cropToMinMax () {
+ local tmp=${1:?}
+ local min=${2:?}
+ local max=${3:?}
+ local ret=""
+ if [ "$tmp" -lt "$min" ]; then
+ ret=$min
+ elif [ "$tmp" -gt "$max" ]; then
+ ret=$max
+ else
+ ret=$tmp
+ fi
+ echo >&2 "cropToMinMax $@ --> $ret"
+ echo $ret
+}
+
+
+startsWithPlusOrMinus () { echo ${1:?} | grep -qE '^[+-]'; }
+
+
+main () {
+ local cur=$(getCurrentLevelVirtValue)
+
+ # Print current brightness in percent if No argument given.
+ if [ $# -eq 0 ]; then echo $cur; return 0; fi
+
+ if [ "$1" = "--help" ]; then
+ echo " Examples:"
+ echo " $(basename $0) 50 # Set brightness to 50%"
+ echo " $(basename $0) +10 # Increase brightness by 10%"
+ echo " $(basename $0) -10 # Decrease brightness by 10%"
+ return 1;
+ fi
+
+ local level=$1
+
+ if startsWithPlusOrMinus $level; then
+ # Calculate absolute out of relative value.
+ cur=$(asPhysicalScale "$cur")
+ level=$(echo "${cur:?}${level:?}" | bc)
+ fi
+
+ level=$(cropToMinMax "$level" "$VIRT_MIN" "$VIRT_MAX")
+ level=$(xrandrScaleByVirtScale "$level")
+
+ # Write evaluated brightness
+ echo >&2 CMD: xrandr --output $MONITOR --brightness "${level:?}"
+ xrandr --output $MONITOR --brightness "${level:?}"
+}
+
+
+main "$@"
+
diff --git a/src/bin/my-brightness.sh b/src/bin/my-brightness.sh
deleted file mode 100644
index 12a8c25..0000000
--- a/src/bin/my-brightness.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-
-#
-# Software (no root) alternative to "my-backlight.sh"
-#
-
-level=$1
-cur=$( xrandr --verbose | awk 'match($0,/Brightness: ([0-9\\.]+)/,m) {print m[1]}' )
-cur=$( echo "$cur*100" | bc )
-min=0
-max=100
-range=$( echo "$max-$min" | bc )
-
-curPercent=$( echo "($cur-$min)*100/$range" | bc )
-
-if [ $# -eq 0 ] ;then
- # No argument given. Print current brightness in percent.
- echo "$curPercent"
- exit;
-elif [ "$1" == "--help" ] ;then
- echo "examples:"
- echo " - $0 50 # Set brightness to 50%"
- echo " - $0 +10 # Increase brightness by 10%"
- echo " - $0 -10 # Decrease brightness by 10%"
- exit;
-fi
-
-if [[ "$level" =~ ^[+|-] ]] ;then
- # Calculate absolute for specified relative value.
- level=$( echo "0$level+$curPercent" | bc )
-fi
-
-# Fix max and min exceedations.
-if [ $level -lt 10 ] ;then
- level=10
-elif [ $level -gt 100 ] ;then
- level=100
-fi
-
-# Translate percent to target scale
-nxt=$( echo $level*$range/100 | bc )
-nxt=$( echo "scale=2;$level/100" | bc )
-
-# Write evaluated brightness
-
-echo xrandr --output LVDS-1 --brightness "$nxt"
-xrandr --output LVDS-1 --brightness "$nxt"
-