diff --git a/scripts/recalc-plasma-bottom-docks.sh b/scripts/recalc-plasma-bottom-docks.sh index a40a470..677d7e0 100755 --- a/scripts/recalc-plasma-bottom-docks.sh +++ b/scripts/recalc-plasma-bottom-docks.sh @@ -1,6 +1,10 @@ #!/usr/bin/env bash set -euo pipefail +LOCK_FILE="${XDG_RUNTIME_DIR:-/tmp}/plasma-dock-autofit.lock" +exec 9>"$LOCK_FILE" +flock -n 9 || exit 0 + CONFIG_FILE="$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" CUSTOM_PRESET_DIR="$HOME/.config/panel-colorizer/presets/LogicDock" USER_BUILTIN_PRESET_DIR="$HOME/.local/share/plasma/plasmoids/luisbocanegra.panel.colorizer/contents/ui/presets/Dock" @@ -21,17 +25,25 @@ wait_for_plasma() { get_screen_count() { python - <<'PY' -import re, subprocess -text = subprocess.check_output(["kscreen-doctor", "-o"], text=True, errors="ignore") -text = re.sub(r'\x1b\[[0-9;]*[A-Za-z]', '', text) -blocks = re.split(r'(?=Output: )', text) -count = 0 -for block in blocks: - if not block.startswith('Output: '): - continue - if re.search(r'^\s*enabled\s*$', block, re.M): - count += 1 -print(max(count, 1)) +import re, subprocess, sys, time +for attempt in range(20): + try: + text = subprocess.check_output(["kscreen-doctor", "-o"], text=True, errors="ignore") + text = re.sub(r'\x1b\[[0-9;]*[A-Za-z]', '', text) + blocks = re.split(r'(?=Output: )', text) + count = 0 + for block in blocks: + if not block.startswith('Output: '): + continue + if re.search(r'^\s*enabled\s*$', block, re.M): + count += 1 + if count > 0: + print(count) + sys.exit(0) + except subprocess.CalledProcessError: + pass + time.sleep(1) +sys.exit(1) PY } @@ -137,6 +149,51 @@ for (var i = 0; i < targetScreens.length; ++i) { " } +dedupe_bottom_panels() { + local screen_count="$1" + local targets + targets=$(python - <