特殊工作区可以像抽屉一样,在当前普通工作区上方显示或收起一组窗口。它不是暂停进程、权限隔离或另一套桌面会话:隐藏之后,应用仍然运行。
本篇根据 Ed 的特殊工作区教程重新整理,去除网页导航与个人信息,并以 Hyprland 0.54 的版本化文档校对旧式 Hyprlang 示例。上游后续配置接口会变化,使用其他版本时先核对对应版本文档,不混用 Lua 配置和这里的 Hyprlang 语法。
先给抽屉一个名字,再绑定显示动作#
命名使多个特殊工作区彼此独立。快捷键触发 togglespecialworkspace,其参数是名称本身,不加 special: 前缀。
# Hyprland 0.54 / Hyprlang 示例
bind = ALT, X, togglespecialworkspace, chat
bind = ALT, E, togglespecialworkspace, mail
bind = ALT, B, togglespecialworkspace, notes
bind = ALT, T, togglespecialworkspace, tasks
bind = ALT, P, togglespecialworkspace, gallery
bind = ALT, V, togglespecialworkspace, media动作依次包含修饰键、按键、dispatcher 和目标名称。名字只是标签,不会自动启动同名程序。空工作区被打开时看不到窗口,并不表示快捷键失效。
原剪藏声称数量无限,这是不准确的;0.54 文档给出的同时存在上限为 97。通常只应为有实际用途的窗口组建立固定入口。
把已有窗口送入指定工作区#
显示/隐藏与移动窗口是两种动作。移动命令接受一般工作区,因此目标要写成 special:名称。
bind = SUPER SHIFT, S, movetoworkspace, special:notes
bind = SUPER, S, togglespecialworkspace, notes前一条作用于当前窗口,后一条显示或隐藏 notes。需要静默移动时核对该版本的 movetoworkspacesilent。多显示器环境也要观察工作区出现在哪个输出,避免把“窗口移动”和“当前焦点改变”混成一件事。
会话启动时,把应用放进去#
exec-once 负责启动命令;执行规则给新窗口指定目标工作区。以下应用仅作通用示例,需要对应可执行文件已安装。
exec-once = [workspace special:chat silent] ferdium
exec-once = [workspace special:notes silent] logseq
exec-once = [workspace special:mail silent] betterbird
exec-once = [workspace special:tasks silent] com.todoist.Todoist
exec-once = [workspace special:gallery silent] allusion
exec-once = [workspace special:media silent] youtube-musicsilent 旨在不把当前视图立即切过去。exec-once 在会话启动时执行,不会因为普通配置重载就再次执行;验证窗口规则无需重启整台机器,可以手动启动一个测试实例并检查归属。
这条机制依赖启动进程与窗口的关联。如果命令转交给已经运行的单实例进程,或者经过包装与派生进程,执行规则未必能抓住最终窗口。因此还需要下一层基于窗口属性的规则。
用窗口规则覆盖以后重新打开的实例#
先读取真实窗口属性,而不是把程序文件名猜成窗口 class。xprop 只适用于 X11 / XWayland 窗口;原生 Wayland 窗口应使用合成器提供的信息。
hyprctl version
hyprctl clients
hyprctl -j clients以下按 0.54 的窗口规则格式示意:
windowrule {
name = notes-special
match:class = ^(Logseq)$
workspace = special:notes silent
}
windowrule {
name = mail-special
match:class = ^(betterbird)$
workspace = special:mail silent
}程序名、class、initialClass、窗口 title 的用途不同。用现场输出确认大小写和匹配对象;对话框是否也被规则捕获,需要单独检查。旧教程的 windowrule = workspace ..., ^(...)$ 不能不加版本判断直接复制进新配置。
分三步验证,不把问题堆到一起#
- 先只测试快捷键能否打开和收起空工作区。
- 手动把一个窗口送入工作区,确认显示动作和移动动作的目标名称相同。
- 最后加入自动启动和窗口规则,关闭并重新打开测试程序,检查新窗口是否仍进入目标。
如果只有自动启动正确、以后重开失败,优先检查窗口规则;如果规则完全无效,先检查实际 class 和版本语法。隐藏的窗口仍消耗资源,是否常驻应由用途决定。删除规则前可把窗口移回普通工作区,再清理对应快捷键和启动项。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。