您尚未登录。

#1 2023-07-30 18:33:36

BRS5672023
会员
注册时间: 2020-07-07
帖子: 129

[已解决]关于 Hyprland 使用类似 Scratchpad 功能的一个问题

最近在 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)

离线

#2 2023-11-07 21:53:25

enjolrascoli
会员
注册时间: 2023-11-07
帖子: 2

Re: [已解决]关于 Hyprland 使用类似 Scratchpad 功能的一个问题

可以利用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

离线

#3 2023-11-09 18:19:46

BRS5672023
会员
注册时间: 2020-07-07
帖子: 129

Re: [已解决]关于 Hyprland 使用类似 Scratchpad 功能的一个问题

enjolrascoli 说:

可以利用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

不是很明白要怎么使用你给的脚本,看起来是在我每次打开窗口的时候都判断一下?不清楚需要放在哪才能生效。。

离线

#4 2023-11-11 00:59:44

enjolrascoli
会员
注册时间: 2023-11-07
帖子: 2

Re: [已解决]关于 Hyprland 使用类似 Scratchpad 功能的一个问题

直接运行就行了,可以在 hyprland.conf 里加上 exec-once=/path/to/script 设置自启动

Hyprland会通过socket输出事件信息,事件包括打开窗口,切换workspace等,脚本利用这点在每次事件发生时判断一次

离线

#5 2023-11-11 01:48:41

BRS5672023
会员
注册时间: 2020-07-07
帖子: 129

Re: [已解决]关于 Hyprland 使用类似 Scratchpad 功能的一个问题

enjolrascoli 说:

直接运行就行了,可以在 hyprland.conf 里加上 exec-once=/path/to/script 设置自启动

Hyprland会通过socket输出事件信息,事件包括打开窗口,切换workspace等,脚本利用这点在每次事件发生时判断一次

👍感谢,解决了一个我用 hyprland 以来长久困扰的问题

离线

页脚