added wayshell framework
This commit is contained in:
Executable
+45
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# Focused Module — Detect client focus/unfocus events
|
||||
#===============================================================================
|
||||
# Description:
|
||||
# Subscribes to `mmsg watch focusing-client` and emits JSON when the focused
|
||||
# client changes. Tracks the previously focused app_id to emit unfocused
|
||||
# events.
|
||||
#
|
||||
# Output format (JSON lines):
|
||||
# {"app_id":"firefox","state":"focused"}
|
||||
# {"app_id":"firefox","state":"unfocused"}
|
||||
# {"app_id":"com.mitchellh.ghostty","state":"focused"}
|
||||
#
|
||||
# Dependencies:
|
||||
# - jq
|
||||
# - mmsg
|
||||
#===============================================================================
|
||||
|
||||
PREV_APP_ID=""
|
||||
|
||||
if ! command -v mmsg &>/dev/null || ! command -v jq &>/dev/null; then
|
||||
echo "focused.sh: mmsg and jq are required" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while read -r line; do
|
||||
app_id=$(jq -r '.appid // empty' <<< "$line" 2>/dev/null)
|
||||
|
||||
if [[ -z "$app_id" || "$app_id" == "null" ]]; then
|
||||
if [[ -n "$PREV_APP_ID" ]]; then
|
||||
echo "{\"app_id\":\"$PREV_APP_ID\",\"state\":\"unfocused\"}"
|
||||
PREV_APP_ID=""
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$app_id" != "$PREV_APP_ID" ]]; then
|
||||
if [[ -n "$PREV_APP_ID" ]]; then
|
||||
echo "{\"app_id\":\"$PREV_APP_ID\",\"state\":\"unfocused\"}"
|
||||
fi
|
||||
echo "{\"app_id\":\"$app_id\",\"state\":\"focused\"}"
|
||||
PREV_APP_ID="$app_id"
|
||||
fi
|
||||
done < <(mmsg watch focusing-client 2>/dev/null)
|
||||
Reference in New Issue
Block a user