所以我在使用 SXHKD 时遇到了一些困难 - 我使用 BSPWM 运行它。我最近编写了一个脚本,它能够找到活动监视器中的所有窗口,然后从该监视器中选择所需的桌面。该脚本运行良好,但是当我尝试在 SXHKD 中使用此脚本时,一切都崩溃了。使用热键:alt + {1-9,0} 有效,但即使在我按下 alt 后仍会继续运行脚本。我将使用以下脚本:
SXHKDRC 位
alt + {1,2,3,4,5,6,7,8,9,0}
输入={1,2,3,4,5,6,7,8,9,0}; \
回显“$input”| ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh从活动监视器获取桌面:
#!/usr/bin/env bash desktops=() counter=1 for i in $(bspc query -D -m); do desktops[$counter]="$i" counter=$(("$counter+1")) done select=$(cat) if [ "$select" -gt ${#desktops[@]} ] || [ "$select" -lt 1 ]; then return fi $(bspc desktop -f "${desktops[$select]}")
我现在有一个临时的解决方案,那就是使用pkill -USR1 -x -sxhkd,但我对此并不满意。我希望能够以最快的速度浏览我的所有窗口 - 我现在做不到,因为上次我尝试时,我的电脑崩溃了。感谢您的时间和帮助!
[编辑#1] 因此,我实施了 @Counthchrisdo 的一些代码,因为他对 bash 知识非常了解,但我仍然遇到同样的问题 - 除非我使用和弦链 alt + o。此外,请确保在 sxhkdrc 中的每一行后面都使用 ; \,否则它将不起作用。我已经替换了:
alt + {1,2,3,4,5,6,7,8,9,0}
input={1,2,3,4,5,6,7,8,9,0}; \
echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh
和:
alt + {1,2,3,4,5,6,7,8,9,0} input={1,2,3,4,5,6,7,8,9,0}; \ echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh >/dev/null 2>&1 &
我猜他关闭了我打开的管道猫所以我认为这肯定会奏效。还有其他线索吗?
答案1
在我看来,您的脚本似乎没有正确退出,导致它在释放键绑定后仍继续执行。这是您的脚本的更新版本:
#!/usr/bin/env bash
desktops=()
counter=1
for i in $(bspc query -D -m); do
desktops[$counter]="$i"
counter=$((counter+1))
done
select=$(cat)
if [ "$select" -gt ${#desktops[@]} ] || [ "$select" -lt 1 ]; then
exit 1 # Exit with an error code if the selection is out of range
fi
$(bspc desktop -f "${desktops[$select]}")
exit 0 # Exit successfully after the action is performed
所做的更改:
Added exit 1 to indicate an error if the selection is out of range.
Added exit 0 to indicate successful execution after changing the desktop.
确保脚本具有可执行权限(chmod +x script_name.sh)并更新 SXHKD 配置以正确处理脚本:
alt + {1,2,3,4,5,6,7,8,9,0}
input={1,2,3,4,5,6,7,8,9,0}
echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh >/dev/null 2>&1 &
此版本的脚本应在更改桌面后正常退出,从而防止其在 SXHKD 中释放键绑定后继续执行。确保将脚本输出重定向到 /dev/null 以抑制任何输出。