32 lines
975 B
Bash
Executable File
32 lines
975 B
Bash
Executable File
#!/bin/bash
|
|
|
|
# blob:summary=Focus a Hyprland window by application identity
|
|
# blob:args=<app-name>
|
|
# blob:examples=blob hyprland focus app Slack
|
|
|
|
usage() {
|
|
echo "Usage: blob-hypr-focus <app-name>" >&2
|
|
exit 1
|
|
}
|
|
|
|
app=${1:-}
|
|
[[ -n $app ]] || usage
|
|
|
|
# Agent terminals notify as kitty/foot/etc. while their shared window class is
|
|
# org.blob.agent, leaving the terminal name only in initialTitle. So match
|
|
# by class first, then fall back to the launch-time title of agent windows.
|
|
address=$(
|
|
hyprctl clients -j 2>/dev/null |
|
|
jq -r --arg pattern "$app" \
|
|
'def matches($value): ($value // "") | test($pattern; "i");
|
|
first(
|
|
(.[] | select(matches(.class))),
|
|
(.[] | select(.initialClass == "org.blob.agent" and matches(.initialTitle)))
|
|
).address // empty'
|
|
)
|
|
|
|
[[ -n $address ]] || exit 1
|
|
|
|
hyprctl dispatch "hl.dsp.focus({ window = \"address:$address\" })" >/dev/null 2>&1 || \
|
|
hyprctl dispatch focuswindow "address:$address" >/dev/null
|