From 80f78202b5102feff4c08216c44819397867924e Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 16 Apr 2017 06:24:09 +0200
Subject: [PATCH] Improve backlight setting script.

---
 bin/w530_backlight.sh | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/bin/w530_backlight.sh b/bin/w530_backlight.sh
index bce6b30..e9a0c6b 100755
--- a/bin/w530_backlight.sh
+++ b/bin/w530_backlight.sh
@@ -1,17 +1,31 @@
 #!/bin/sh
+
 # A very primitive backlight setter with a hardcoded backlight path, to replace
 # xbacklight which currently does not work on my system.
-if ! echo "${1}" | egrep -q '^[0-9]+$'; then
-  echo 'Argument must be a number.'
+
+if ! echo "${1}" | egrep -q '^[0-9]+$' && ! [ "${1}" = "+" -o "${1}" = "-" ]; then
+  echo 'Argument must be a number, or "+", or "-".'
   exit 1
 fi
-percentage=${1}
 backlight_dir=/sys/class/backlight/intel_backlight
 max_brightness=$(cat "${backlight_dir}"/max_brightness)
+target="${backlight_dir}"/brightness
+fract=$(expr "${max_brightness}" / 100)
+if [ "${1}" = "+" -o "${1}" = "-" ]; then
+  cur_brightness=$(cat "${backlight_dir}"/brightness)
+  brightness=$(expr "${cur_brightness}" "${1}" "${fract}")
+  if [ "${brightness}" -gt "${max_brightness}" ]; then
+    brightness="${max_brightness}"
+  elif [ "${brightness}" -lt "0" ]; then
+    brightness=0
+  fi
+  sudo sh -c 'echo '"${brightness}"' > '"${target}"
+  exit 0
+fi
+percentage=${1}
 if [ "${percentage}" = '100' ]; then
-  sudo sh -c 'echo '"${max_brightness}"' > '"${backlight_dir}"'/brightness'
+  sudo sh -c 'echo '"${max_brightness}"' > '"${target}"
 else
-  fract=$(expr "${max_brightness}" / 100)
   brightness=$(expr "${percentage}" \* "${fract}")
-  sudo sh -c 'echo '"${brightness}"' > '"${backlight_dir}"'/brightness'
+  sudo sh -c 'echo '"${brightness}"' > '"${target}"
 fi
-- 
2.30.2