最近在 Hyprland 想使用类似 Scratchpad 的功能(毕竟确实很实用,放一个 dropterm,或者放一个音乐播放器都挺好的),目前是靠 special workspace 的配置来实现这种功能
比如 dropterm 我就是通过以下的脚本来实现的(略去 hyprland.conf 里面相应的 windowrule 和快捷键的配置)
if [[ -n $(hyprctl -j workspaces|jq '.[].name | select(.=="special:dropterm")') ]]; then
hyprctl dispatch togglespecialworkspace dropterm
else
hyprctl dispatch exec [ workspace special:dropterm ] "kitty --class kitty-dropterm"
sleep 1
hyprctl dispatch togglespecialworkspace dropterm
fi
另外就是我在 dropterm 对应的 windowrule 设置了 stayfocused,于是功能上就能按照我预想的来运作了;目前遇到的一个问题是 Hyprland 如何避免在 special:workspace 这个 workspace 打开另外的窗口?尤其是设置了 stayfocused 的时候,新打开的窗口会覆盖 dropterm 的显示内容,然而焦点却在 dropterm 上面。。
(此外 pyprland 也算一个不错的能够实现 scratchpad 功能的方式,包括它有能在窗口失焦自动隐藏的功能;但是一段时间的使用中有遇到窗口莫名其妙跑到 scratchpad 里面的问题,以及当显示器有 scale 的时候,设置了 fromTop 或者 fromRight 这些动画时,窗口出现的位置会有问题)
最近编辑记录 BRS5672023 (2023-11-11 01:49:24)
离线
可以利用Hyprland提供的socket https://wiki.hyprland.org/IPC/
我用的脚本如下:
handle() {
line=$1
if [[ "$line" = openwindow* ]]; then
read -r window_address workspace window_class <<<$(echo "$line" | awk -F "[>,]" '{print $3,$4,$5}')
if [[ "$workspace" = "special:dropdown" && "$window_class" != "kitty-dropdown" ]]; then
hyprctl dispatch movetoworkspace e+0,address:0x${window_address}
hyprctl dispatch togglespecialworkspace dropdown
fi
fi
}
socat -U - UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
离线
可以利用Hyprland提供的socket https://wiki.hyprland.org/IPC/
我用的脚本如下:
handle() { line=$1 if [[ "$line" = openwindow* ]]; then read -r window_address workspace window_class <<<$(echo "$line" | awk -F "[>,]" '{print $3,$4,$5}') if [[ "$workspace" = "special:dropdown" && "$window_class" != "kitty-dropdown" ]]; then hyprctl dispatch movetoworkspace e+0,address:0x${window_address} hyprctl dispatch togglespecialworkspace dropdown fi fi } socat -U - UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
不是很明白要怎么使用你给的脚本,看起来是在我每次打开窗口的时候都判断一下?不清楚需要放在哪才能生效。。
离线
直接运行就行了,可以在 hyprland.conf 里加上 exec-once=/path/to/script 设置自启动
Hyprland会通过socket输出事件信息,事件包括打开窗口,切换workspace等,脚本利用这点在每次事件发生时判断一次
离线
直接运行就行了,可以在 hyprland.conf 里加上 exec-once=/path/to/script 设置自启动
Hyprland会通过socket输出事件信息,事件包括打开窗口,切换workspace等,脚本利用这点在每次事件发生时判断一次
👍感谢,解决了一个我用 hyprland 以来长久困扰的问题
离线