update
This commit is contained in:
Executable
+39
@@ -0,0 +1,39 @@
|
||||
#!/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" "$@"
|
||||
Reference in New Issue
Block a user