FancyWM
"引发了一场桌面革命" - Seelen UI Blog
"在一个小巧紧凑的包中提供了大量功能" - Softpedia
"尝试过 FancyWM 后,你可能会觉得自己像是一个超级高级用户" - MakeUseOf
"一旦你掌握了它,你就会看到这些功能可以有多高效" - ZDNET
"让多任务处理变得更加容易" - XDA Developers
FancyWM 是一款面向 Windows 10/11 的动态平铺窗口管理器,它将平铺窗口的生产力带到 Windows 桌面——无需复杂配置,且不牺牲大多数用户所期望的熟悉鼠标与键盘交互。
无需手动排列重叠的窗口,FancyWM 会自动将您的应用程序组织到垂直、水平和堆叠面板中。窗口在打开时流入当前聚焦的面板,当同级窗口关闭时优雅地调整大小,并可通过简单的键盘快捷键或鼠标拖放进行重新排列。其结果是一个整洁无杂乱的工作区,每个应用程序都有明确的位置。
为什么在 Windows 上使用平铺?
平铺从根本上改变了您与桌面交互的方式。新窗口不再重叠;相反,它们会自动在现有窗口旁边占据空间。键盘导航取代了频繁的鼠标操作。对于同时管理多个应用程序的开发者、研究人员和高级用户——无论是边编码边查阅参考文档、跨项目多任务处理,还是编排复杂的工作流——平铺都能显著节省时间和认知负荷。
Windows 提供了 Snap Layouts 和 Virtual Desktops,它们很有用,但缺乏 tiling 所提供的控制力和动态行为。FancyWM 填补了这一空白:它是那些对 tiling 感兴趣但不愿离开 Windows 生态系统的用户的实用入门点。
核心功能
面板:水平、垂直和堆叠
FancyWM 将窗口组织为三种面板类型:
这些面板可以任意嵌套 - 包含垂直子面板的水平面板,其中嵌入堆叠面板。通过组合基本元素来构建自定义布局,而不是通过编辑配置文件。
无需配置
忘掉预定义的布局模板和复杂的配置。FancyWM 在你工作时创建布局。按 [⇧ Shift] + [⊞ Win] 后,会显示可用的 keybingins。
- 打开你的第一个窗口 - 它会自动填充工作区。
- 打开第二个窗口 - FancyWM 创建一个水平分割;两个窗口现在共享空间。
- 使用
[⇧ Shift]+[⊞ Win]创建一个垂直面板,然后按[V]- 焦点窗口移动到一个新的垂直面板中。 - 使用
[⇧ Shift]+[⊞ Win]创建一个堆叠面板,然后按[S]- 窗口现在可以像标签页一样重叠。 - 在面板之间拖动窗口,或将面板嵌入其他面板,实时优化布局。
混合输入:键盘和鼠标
FancyWM 尊重 Windows 用户对两种输入方式的重视:
这平衡了高级用户的效率与 Windows 上预期的易用性。
布局约束
应用程序通过 Windows API(WM_GETMINMAXINFO)声明最小和最大窗口尺寸。如果应用程序拒绝缩小到其声明的最小尺寸以下,FancyWM 将尊重该约束——窗口绝不会缩小到其声明的最小尺寸以下。对话框、工具提示和临时窗口会自动浮动(从平铺中移除),以免干扰布局。如果新窗口会导致你的列缩小到最小尺寸以下,该窗口也会自动浮动。
其结果是:没有重叠的平铺块,没有损坏的布局——平铺器会根据应用程序的约束进行适应,而不是强制应用程序使用不合适的尺寸。
原生虚拟桌面
FancyWM 与 Windows 的原生虚拟桌面集成。使用 [⇧ Shift] + [⊞ Win],然后按 [1]、[2]、[3] 跳转到桌面 1、2 或 3,或使用 [⇧ Shift] + [⊞ Win]、[⇧ Shift] + [1]、[2]、[3] 将窗口移动到不同的桌面。面板布局可以是每显示器独立或全局统一——由你选择。这适用于多项目工作流:“桌面 1 用于编码,桌面 2 用于研究,桌面 3 用于会议”,每个桌面都有各自的面板排列。
低资源占用
FancyWM 作为一个轻量级的用户态进程运行,而非系统服务。空闲时的典型 CPU 使用率为 <1%,并可选动画开关以减少笔记本电脑的功耗。基于 .NET 运行时的 C# 实现足够高效,可在后台进行窗口管理,而不会对系统产生明显影响。
其他控制
☑ 使用 [⇧ Shift] + [⊞ Win] 完全开启/关闭平铺,然后使用 [F11] 短暂使用浮动窗口
☑ 最大化并还原单个窗口,而不破坏平铺布局
☑ 自动折叠单窗口面板以减少视觉杂乱
☑ 为注重电池续航的工作流禁用动画
☑ 窗口焦点高亮(短暂闪烁)以提高可见性
☑ 可自定义的按键绑定 - 重新绑定所有按键以匹配你的习惯
☑ 如果 [Shift]+[Win] 与其他软件冲突,请将激活热键重映射为 [Ctrl]+[Win] 或 [Alt]+[Win]
设计理念
FancyWM 基于特定标准构建,其中许多标准在其他地方并未同时实现:
其结果是一个感觉像 Windows 自然延伸的平铺器,而非 Linux 移植版。
两遍布局算法
在幕后,FancyWM 使用两遍算法来计算窗口位置:
第一遍:约束收集
查询每个窗口的最小和最大尺寸(通过 WM_GETMINMAXINFO)。识别层级中的所有面板及其约束。
第二遍:位置计算 给定面板树和约束,计算每个窗体的像素位置,使得没有窗口被迫低于其最小值。如果所有窗口在其最小尺寸下没有足够的空间,FancyWM 会优雅地降级 - 尊重最小值,并可能将窗口推至可见工作区边界之外,而不是让它们重叠。
后果:布局绝不会因应用约束而损坏。 每个窗口获得相等的空间;关闭一个窗口只是将该空间在剩余窗口中重新平均分配。
二叉空间分割(BSP)通过每次分割将空间递归地划分为两个区域,这可能导致低效的布局或需要手动重新平衡。FancyWM 的等空间方法更易于理解,并能自动适应窗口数量的变化。
原生主题引擎(预览版)
FancyWM v2.19 增加了对使用 CSS 进行自定义主题的支持。这是基于原生平台 API 构建的,不使用 WebViews/Chromium,因此速度快且开销低。
要完善和改进此功能,还需要大量工作,因此请考虑为开发做出贡献或进行捐赠。
在此处查看一些示例:https://github.com/FancyWM/fancywm/pull/444#issuecomment-4016018314
panel-bar {
border-color: white;
border-width: 1px;
border-radius: 12px;
filter: drop-shadow(0px 0px 8px white);
background-image: linear-gradient(30deg,
red 0%, blue 20%, green 40%, green 60%, orange 60%);
}
下载
可以从 Releases 下载预编译的二进制文件。
这些文件由自动化的 GitHub Action 构建,您可以查看所有 构建步骤 和 之前的运行记录。
通过 winget 安装(推荐)
winget install fancywm
从 Microsoft Store 安装
安装 .msixbundle(不推荐)
您可以通过使用 PowerShell 安装 Microsoft Store 包来测试它们。
PowerShell(以管理员身份运行)
certutil.exe -addstore TrustedPeople .\FancyWM.Package_1.0.0.0.x64.cer
Add-AppxPackage -Path .\FancyWM.Package_1.0.0.0.x64.msixbundle
用户指南
请访问 Wiki。
问题反馈
请花点时间通过以下方式报告您遇到的任何问题:
- 在 https://github.com/fancywm/fancywm/issues 上提交 issue(也欢迎功能请求) 如果发生崩溃,请记得保存并附上应用程序生成的日志文件。
从源码构建
克隆此仓库,包括子模块。
git clone --recursive https://github.com/FancyWM/fancywm.git
使用 Visual Studio 2022 打开 .sln 文件并构建 FancyWM 项目。
WinMan & WinMan.Windows
FancyWM 基于 WinMan 和 WinMan.Windows。
