Debounce brightness key bursts
This commit is contained in:
@@ -7,8 +7,4 @@ if [[ -f "$CONFIG" ]]; then
|
||||
source "$CONFIG"
|
||||
fi
|
||||
|
||||
BACKLIGHT_DEVICE="${BRIGHTNESS_BACKLIGHT_DEVICE:-intel_backlight}"
|
||||
STEP="${BRIGHTNESS_STEP:-10}"
|
||||
|
||||
brightnessctl -q -d "$BACKLIGHT_DEVICE" set "${STEP}%-"
|
||||
"$HOME/.local/bin/brightness-osd" || true
|
||||
"$HOME/.local/bin/brightness-step" down
|
||||
|
||||
92
bin/brightness-step
Executable file
92
bin/brightness-step
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
CONFIG="${BRIGHTNESS_AUTOMATION_CONFIG:-$HOME/.config/brightness-automation/env}"
|
||||
if [[ -f "$CONFIG" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$CONFIG"
|
||||
fi
|
||||
|
||||
BACKLIGHT_DEVICE="${BRIGHTNESS_BACKLIGHT_DEVICE:-intel_backlight}"
|
||||
BACKLIGHT_PATH="${BRIGHTNESS_SYNC_BACKLIGHT:-/sys/class/backlight/${BACKLIGHT_DEVICE}}"
|
||||
STEP="${BRIGHTNESS_STEP:-10}"
|
||||
DEBOUNCE_MS="${BRIGHTNESS_APPLY_DEBOUNCE_MS:-180}"
|
||||
STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/brightness-automation"
|
||||
STATE_FILE="$STATE_DIR/target-percent"
|
||||
STAMP_FILE="$STATE_DIR/target-stamp"
|
||||
LOCK_FILE="$STATE_DIR/lock"
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
read_current_percent() {
|
||||
local current max
|
||||
current="$(<"${BACKLIGHT_PATH}/brightness")"
|
||||
max="$(<"${BACKLIGHT_PATH}/max_brightness")"
|
||||
printf '%s\n' "$(( (current * 100 + max / 2) / max ))"
|
||||
}
|
||||
|
||||
clamp_percent() {
|
||||
local value="$1"
|
||||
if (( value < 1 )); then
|
||||
value=1
|
||||
elif (( value > 100 )); then
|
||||
value=100
|
||||
fi
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
now_ms() {
|
||||
date +%s%3N
|
||||
}
|
||||
|
||||
apply_after_quiet_period() {
|
||||
while true; do
|
||||
sleep "$(awk "BEGIN { printf \"%.3f\", ${DEBOUNCE_MS} / 1000 }")"
|
||||
|
||||
local now stamp age target
|
||||
now="$(now_ms)"
|
||||
stamp="$(<"$STAMP_FILE")"
|
||||
age="$(( now - stamp ))"
|
||||
|
||||
if (( age >= DEBOUNCE_MS )); then
|
||||
target="$(<"$STATE_FILE")"
|
||||
brightnessctl -q -d "$BACKLIGHT_DEVICE" set "${target}%"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "--apply-worker" ]]; then
|
||||
apply_after_quiet_period
|
||||
fi
|
||||
|
||||
if [[ "$#" -ne 1 || ! "$1" =~ ^(up|down)$ ]]; then
|
||||
echo "Usage: $(basename "$0") up|down" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
(
|
||||
flock 9
|
||||
|
||||
current="$(read_current_percent)"
|
||||
if [[ -f "$STATE_FILE" ]]; then
|
||||
base="$(<"$STATE_FILE")"
|
||||
else
|
||||
base="$current"
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
up) target="$(( base + STEP ))" ;;
|
||||
down) target="$(( base - STEP ))" ;;
|
||||
esac
|
||||
|
||||
target="$(clamp_percent "$target")"
|
||||
printf '%s\n' "$target" >"$STATE_FILE"
|
||||
now_ms >"$STAMP_FILE"
|
||||
|
||||
"$HOME/.local/bin/brightness-osd" "$target" || true
|
||||
) 9>"$LOCK_FILE"
|
||||
|
||||
if ! pgrep -f "$HOME/.local/bin/brightness-step --apply-worker" >/dev/null 2>&1; then
|
||||
nohup "$HOME/.local/bin/brightness-step" --apply-worker >/dev/null 2>&1 &
|
||||
fi
|
||||
@@ -7,8 +7,4 @@ if [[ -f "$CONFIG" ]]; then
|
||||
source "$CONFIG"
|
||||
fi
|
||||
|
||||
BACKLIGHT_DEVICE="${BRIGHTNESS_BACKLIGHT_DEVICE:-intel_backlight}"
|
||||
STEP="${BRIGHTNESS_STEP:-10}"
|
||||
|
||||
brightnessctl -q -d "$BACKLIGHT_DEVICE" set "+${STEP}%"
|
||||
"$HOME/.local/bin/brightness-osd" || true
|
||||
"$HOME/.local/bin/brightness-step" up
|
||||
|
||||
Reference in New Issue
Block a user