34 lines
1.2 KiB
Bash
Executable File
34 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# 获取窗口列表,格式为 "ADDRESS [Workspace] Class: Title"
|
|
# 使用 jq 解析 hyprctl clients -j 的 JSON 输出
|
|
# select(.workspace.id != -1) 过滤掉特殊工作区(如概览)的窗口
|
|
WINDOWS_LIST=$(hyprctl clients -j | jq -r '.[] | select(.workspace.id != -1) | "\(.address)\t[\(.workspace.name)] \(.class): \(.title)"')
|
|
|
|
# 如果没有窗口,显示提示并退出
|
|
if [ -z "$WINDOWS_LIST" ]; then
|
|
rofi -e "No open windows found."
|
|
exit 1
|
|
fi
|
|
|
|
# 使用 Rofi 显示窗口列表,允许用户选择
|
|
# -dmenu: dmenu 模式
|
|
# -i: 不区分大小写搜索
|
|
# -p: 提示符文本
|
|
# -markup-rows: (可选) 如果你想在列表中使用 Pango 标记
|
|
# -format 's': 输出选择的完整行
|
|
CHOSEN_WINDOW_LINE=$(echo -e "$WINDOWS_LIST" | rofi -dmenu -i -p " Switch Window" -format 's')
|
|
# 你可以使用其他图标,例如 或 Window:
|
|
|
|
# 如果用户取消了选择 (Rofi 返回空),则退出
|
|
if [ -z "$CHOSEN_WINDOW_LINE" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# 从选择的行中提取窗口地址 (它是第一个字段,以制表符分隔)
|
|
CHOSEN_ADDRESS=$(echo "$CHOSEN_WINDOW_LINE" | awk -F'\t' '{print $1}')
|
|
|
|
# 使用 hyprctl 切换到选定的窗口
|
|
hyprctl dispatch focuswindow address:"$CHOSEN_ADDRESS"
|
|
|
|
exit 0 |