Prevent shortcut reset collisions
This commit is contained in:
@@ -17,13 +17,25 @@ set -euo pipefail
|
||||
|
||||
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
harness="$repo_dir/config/dot/quickshell/keybinds-harness.qml"
|
||||
config_home="$(mktemp -d /tmp/panama-rebind-config.XXXXXX)"
|
||||
service="$repo_dir/config/dot/quickshell/services/Keybinds.qml"
|
||||
|
||||
fail() {
|
||||
printf 'keybind rebind contract: %s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
rg -Fq 'function overrideOccupantFor(chord: string, exceptShipped: string): string' "$service" \
|
||||
|| fail 'resetBind has no override collision guard'
|
||||
rg -Fq 'root.overrideOccupantFor(shipped, shipped)' "$service" \
|
||||
|| fail 'resetBind does not check whether another override occupies its shipped chord'
|
||||
|
||||
if [[ "${PANAMA_KEYBINDS_STATIC_ONLY:-0}" == "1" ]]; then
|
||||
printf 'keybind rebind contract: PASS (static)\n'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
config_home="$(mktemp -d /tmp/panama-rebind-config.XXXXXX)"
|
||||
|
||||
# The compositor is the live one -- that is the point -- but preferences are
|
||||
# isolated so this cannot leave an override in the user's real settings.
|
||||
# hyprctl reload re-reads the real settings file, so the compositor is only
|
||||
@@ -87,6 +99,19 @@ sleep 0.5
|
||||
[[ "$(qs_for_harness ipc call keybinds-test overrideState | jq -r .count)" == "0" ]] \
|
||||
|| fail 'resetAll left overrides behind'
|
||||
|
||||
# Terminal moved away from its shipped chord, then Files moved into it.
|
||||
# Resetting Terminal must refuse instead of producing two binds on one chord.
|
||||
qs_for_harness ipc call keybinds-test seedResetCollision \
|
||||
"$terminal" "SUPER + SHIFT + F9" "$files" >/dev/null
|
||||
sleep 0.2
|
||||
[[ "$(qs_for_harness ipc call keybinds-test resetBind "SUPER + SHIFT + F9")" == "false" ]] \
|
||||
|| fail 'resetBind reclaimed a shipped chord occupied by another override'
|
||||
collision_state="$(qs_for_harness ipc call keybinds-test overrideState)"
|
||||
jq -e --arg terminal "$terminal" --arg files "$files" \
|
||||
'.count == 2 and .overrides[$terminal] == "SUPER + SHIFT + F9" and .overrides[$files] == $terminal and (.lastError | length > 0)' \
|
||||
<<<"$collision_state" >/dev/null \
|
||||
|| fail "a refused reset changed overrides or gave no explanation: $collision_state"
|
||||
|
||||
trap - EXIT
|
||||
cleanup
|
||||
printf 'keybind rebind contract: PASS\n'
|
||||
|
||||
Reference in New Issue
Block a user