跳转到内容
omarchyFIELD GUIDE
实用知识 / FIELD GUIDE

窗口规则实战:浮动、工作区与透明度

识别应用真正的窗口标识,编写范围明确的 Lua 规则,区分打开时的行为与动态外观。

根据公开资料整理,未在实机验证。操作前请核对你的版本与硬件环境。

希望文件管理器居中浮动、聊天应用进入指定工作区,只有某个应用稍微透明?窗口规则可以描述这些偏好,但先要知道匹配的是哪个窗口,以及规则在什么时候执行。

本页使用 Omarchy 的 Lua 工具函数。确认 Setup → Config 能编辑 hypr/looknfeel.lua,且个人入口加载了它。旧 windowrulev2 或 hyprlang .conf 示例不能与这里的语法互换。不熟悉文件关系时先读配置如何生效。

1. 先匹配窗口,再应用效果

章节:1. 先匹配窗口,再应用效果
应用创建窗口
→ Hyprland 识别 class、初始标题等属性
→ 匹配规则应用打开时的效果
→ 动态规则随相关属性变化重新判断
目标 效果 重要条件
让应用浮动 float = true 用新创建窗口验证
居中并指定大小 center、size 主要用于浮动窗口
在指定工作区打开 workspace 打开位置,不会自动移动全部旧窗口
跟随所有工作区 pin 需要浮动窗口
改透明度 opacity / 透明度工具函数 可能与其他透明度规则叠加

打开时规则不会在你移动窗口后不断把它拉回原位。修改规则,也不能用一直开着的旧窗口证明效果。

2. 查出应用真实标识

章节:2. 查出应用真实标识

打开目标应用,再运行:

终端窗口
hyprctl clients

根据可见标题找到对应记录。下面是简化教学示例:

class: org.gnome.Nautilus
title: Documents
initialClass: org.gnome.Nautilus
initialTitle: Documents
floating: 0
workspace: 1

你的结果可能不同。class 不一定是程序名或菜单名称;浏览器 Web App、Flatpak 和原生包可能有不同标识。也记录 initialClass、initialTitle:打开时执行的效果使用当时已有的属性。

编辑器标题可能稍后才变成文件路径,聊天标题也可能增加未读数量。不要让打开时规则依赖之后才出现的标题。只有确实观察到目标窗口的属性,才添加进一步匹配条件。

3. 让文件管理器以合适大小浮动

章节:3. 让文件管理器以合适大小浮动

确认窗口实际报告 org.gnome.Nautilus 后,备份已有个人文件:

终端窗口
cp -i ~/.config/hypr/looknfeel.lua ~/.config/hypr/looknfeel.lua.before-window-rules

备份名称占用时换一个。通过配置编辑器增加:

o.window("^org\\.gnome\\.Nautilus$", {
float = true,
center = true,
size = { 800, 560 },
})

表达式匹配完整 class。^、$ 标记边界;Lua 中双反斜杠让正则把点当作字面字符。使用 .* 这样的宽泛匹配会影响其他应用。

800 × 560 是逻辑桌面单位中的示例。先确认它能放进缩放后的显示器可用区域;小屏可能需要更小的值,不能仅凭物理分辨率判断。

保存退出,本机支持时查看 hyprctl configerrors,再保存目标窗口中的工作,关闭并新建窗口。确认浮动、初始居中和大小可用。随后手动移动、缩放:这是打开时偏好,不是持续锁定位置。

同一 class 也可能包含 Nautilus 的对话框,所以还要测试文件对话框。只想调整其中一类窗口,就观察启动属性并缩小匹配范围,不要假设同一个应用所有窗口都一样。

4. 让聊天应用进入指定工作区

章节:4. 让聊天应用进入指定工作区

先查询聊天窗口。下面假设真实 class 是 discord;本机不同就替换匹配表达式:

o.window("^discord$", {
workspace = "3 silent",
})

工作区 3 是教学选择;silent 请求放置窗口时不切换过去。新开聊天窗口,再手动切到工作区 3,用 hyprctl clients 检查位置,同时观察当前任务是否保留焦点。

单实例应用可能只唤起旧窗口,而没有创建新窗口。此时还没验证打开时规则;先保存工作,完整退出再重新打开。

多屏时,工作区位置与显示器分配是两种策略。理解自己的工作区安排前,不要再叠加显示器规则。打开时规则不能替代完整的接入、拔出外屏流程;几何布局见显示器与多屏。

5. 让一个应用参与 Omarchy 透明度控制

章节:5. 让一个应用参与 Omarchy 透明度控制

想让前面文件管理器采用自选透明度,单独增加:

o.transparent_window("^org\\.gnome\\.Nautilus$", "0.97 0.92")

数值分别描述活动、非活动透明度。工具函数还会标记窗口,让它参与 Omarchy 的透明度开关。Nautilus 在本源码的默认规则中已经参与,所以本例是在尝试自定义数值,而不是为原先不支持的应用首次启用功能。

分别看活动与非活动窗口,把它移到壁纸的亮区和暗区比较。多条透明度乘数可能叠加,0.97 不一定就是最终看到的透明程度;应用自己绘制的透明背景与合成器透明度也是不同层。

可读性变差就删除实验行,不必把整个主题都调亮。已有默认规则的应用,正常重载并按需新开窗口后,重新由默认值控制。

6. 规则似乎没生效时看什么

章节:6. 规则似乎没生效时看什么
现象 检查方向
所有地方都没效果 Lua 语法与个人文件是否加载
新窗口正常,旧窗口不变 打开时效果的执行时机
对话框意外改变 匹配范围过宽
聊天仍在原工作区 复用了旧实例或初始 class 不匹配
大小与示例不同 应用最小尺寸、缩放和其他匹配规则
比预期更透明 其他透明度设置与活动状态

多个规则可以匹配一个窗口。不要假设新增规则会完整替换该应用全部默认规则,也不要把所有属性都理解为统一的“最后一行胜出”。每次只改一种效果,用新窗口及其报告属性比较;引入旧社区方案前先查本机 Hyprland 版本文档。

7. 撤销并验证其他窗口不受影响

章节:7. 撤销并验证其他窗口不受影响

删除新增规则,通过同一菜单编辑器保存,再重新打开目标窗口。启动位置和大小要用另一个新窗口比较。复制回备份前,先确认不会丢失后来的修改。

检查目标主窗口、另一个应用、一个对话框,以及活动和非活动状态。范围明确的规则应该只影响目标,而不会改变其他桌面行为。记录真实 class、修改文件、目标效果和验证方法,应用更新后标识变化时会用得上。

来源与关联指南

章节:来源与关联指南

窗口工具函数 · 个人外观配置示例 · 默认窗口规则 · Hyprland 规则参考

继续阅读个人快捷键或更新后的配置维护。