improve eww
This commit is contained in:
@@ -1,29 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
# Backlight brightness (first device under /sys/class/backlight). Refreshes
|
||||
# on backlight udev events, which also fire for the hardware keys.
|
||||
#
|
||||
# brightness status loop (deflisten)
|
||||
# brightness set PERCENT
|
||||
|
||||
BACKLIGHT="/sys/class/backlight"
|
||||
DEV=$(ls "$BACKLIGHT" 2>/dev/null | head -n1)
|
||||
dev=""
|
||||
for d in /sys/class/backlight/*; do
|
||||
[[ -e $d ]] && { dev=${d##*/}; break; }
|
||||
done
|
||||
|
||||
gen_output() {
|
||||
if [ -z "$DEV" ]; then
|
||||
echo '{"percent":0,"available":false}'
|
||||
return
|
||||
fi
|
||||
max=$(cat "$BACKLIGHT/$DEV/max_brightness")
|
||||
cur=$(cat "$BACKLIGHT/$DEV/actual_brightness" 2>/dev/null || cat "$BACKLIGHT/$DEV/brightness")
|
||||
percent=$(awk -v c="$cur" -v m="$max" 'BEGIN{print int(c/m*100+0.5)}')
|
||||
printf '{"percent":%d,"available":true}\n' "$percent"
|
||||
state() {
|
||||
[[ -n $dev ]] || { printf '{"percent":0,"available":false}'; return; }
|
||||
local max cur
|
||||
max=$(<"/sys/class/backlight/$dev/max_brightness")
|
||||
cur=$(cat "/sys/class/backlight/$dev/actual_brightness" 2>/dev/null \
|
||||
|| cat "/sys/class/backlight/$dev/brightness")
|
||||
printf '{"percent":%d,"available":true}' "$(((cur * 100 + max / 2) / max))"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
set)
|
||||
[ -z "$DEV" ] && exit 0
|
||||
brightnessctl -d "$DEV" set "${2}%" -q 2>/dev/null
|
||||
;;
|
||||
refresh() { emit "$(state)"; }
|
||||
_bl_events() { exec udevadm monitor --udev --subsystem-match=backlight; }
|
||||
|
||||
case ${1:-} in
|
||||
set) [[ -n $dev ]] && brightnessctl -q -d "$dev" set "${2%.*}%" ;;
|
||||
*)
|
||||
gen_output
|
||||
[ -z "$DEV" ] && exit 0
|
||||
udevadm monitor --udev --subsystem-match=backlight 2>/dev/null | while read -r _; do
|
||||
gen_output
|
||||
done
|
||||
refresh
|
||||
[[ -n $dev ]] || exit 0
|
||||
mux_init
|
||||
mux_add _bl_events
|
||||
mux_loop refresh
|
||||
;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user