Files
dotfiles/local_bin/qq-smart-launch
T
2026-09-25 20:54:28 +08:00

40 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# QQ 智能启动:已运行则激活主窗口,否则正常启动
QQ_BIN="/usr/bin/linuxqq"
APP_IDS=("qq" "QQ" "linuxqq")
# 1) QQ 进程没在跑 → 直接启动
if ! pgrep -f "/opt/QQ/qq" >/dev/null 2>&1; then
exec "$QQ_BIN" "$@"
fi
# 2) 进程在跑:先检查 niri 里有没有已 map 的 QQ 窗口,有就直接 focus
WIN_ID=""
if command -v niri >/dev/null 2>&1; then
# 解析 niri 输出:找 App ID 匹配的第一行所属 Window ID
current_id=""
while IFS= read -r line; do
if [[ "$line" =~ ^Window\ ID\ ([0-9]+): ]]; then
current_id="${BASH_REMATCH[1]}"
elif [[ "$line" =~ ^\ +App\ ID:\ \"([^\"]+)\"$ ]]; then
app="${BASH_REMATCH[1]}"
for match in "${APP_IDS[@]}"; do
if [[ "$app" == "$match" ]]; then
WIN_ID="$current_id"
break 2
fi
done
fi
done < <(niri msg windows 2>/dev/null)
fi
if [[ -n "$WIN_ID" ]]; then
niri msg action focus-window -- "$WIN_ID" >/dev/null 2>&1
exit 0
fi
# 3) 进程在跑但窗口没在 niri → 隐藏在托盘的情况
# Electron 的 requestSingleInstanceLock:第二次执行会让第一实例显示主窗口然后自己退出
exec "$QQ_BIN" "$@"