From 897f840af5fbae79d82d536a81ec022c68b65643 Mon Sep 17 00:00:00 2001 From: BluePhi09 <97019661+BluePhi09@users.noreply.github.com> Date: Fri, 23 Jan 2026 08:15:53 +0100 Subject: [PATCH] refactor brightness_list.sh to use associative array for unique brightness values this is necessary because brightnessctl returns more than one brightness values for some displays fixes part of https://github.com/Axenide/Ambxst/issues/29 --- scripts/brightness_list.sh | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/scripts/brightness_list.sh b/scripts/brightness_list.sh index 4d2e3bfd..0fdc6d13 100755 --- a/scripts/brightness_list.sh +++ b/scripts/brightness_list.sh @@ -2,6 +2,29 @@ # Script to list all monitors and their current brightness # Outputs format: MonitorName:Brightness +# declare associative map to collect unique brightness values per monitor +declare -A BRIGHTNESS_MAP=() + +# Helper: set a brightness value in the map, preferring non-zero and larger values +set_brightness() { + local name="$1" value="$2" + local prev + prev="${BRIGHTNESS_MAP[$name]}" + if [ -z "$prev" ]; then + BRIGHTNESS_MAP[$name]="$value" + return + fi + # prefer non-zero over zero + if [ "$prev" -eq 0 ] && [ "$value" -gt 0 ]; then + BRIGHTNESS_MAP[$name]="$value" + return + fi + # prefer larger value if both non-zero + if [ "$value" -gt "$prev" ]; then + BRIGHTNESS_MAP[$name]="$value" + fi +} + # Check for internal displays using brightnessctl (backlight devices only) if command -v brightnessctl &> /dev/null; then DEVICES=$(brightnessctl -l 2>/dev/null | grep "backlight" | awk -F"'" '{print $2}') @@ -16,7 +39,7 @@ if command -v brightnessctl &> /dev/null; then if [ -z "$MONITOR_NAME" ]; then MONITOR_NAME="eDP-1" fi - echo "${MONITOR_NAME}:${PERCENT}" + set_brightness "$MONITOR_NAME" "$PERCENT" fi done fi @@ -35,10 +58,15 @@ if command -v ddcutil &> /dev/null; then # End of display block, get brightness BRIGHTNESS=$(ddcutil -b "$CURRENT_BUS" getvcp 10 --brief 2>/dev/null | awk '{print $4}') if [ -n "$BRIGHTNESS" ]; then - echo "${CURRENT_CONNECTOR}:${BRIGHTNESS}" + set_brightness "$CURRENT_CONNECTOR" "$BRIGHTNESS" fi CURRENT_BUS="" CURRENT_CONNECTOR="" fi done < <(ddcutil detect --brief 2>/dev/null; echo "") fi + + # Output unique brightness entries + for k in "${!BRIGHTNESS_MAP[@]}"; do + echo "${k}:${BRIGHTNESS_MAP[$k]}" + done