揭秘driftwm磁吸聚簇:窗口如何自动组成可整体操控的Cluster

发布时间:2026/10/11 16:57:41
揭秘driftwm磁吸聚簇:窗口如何自动组成可整体操控的Cluster
【免费下载链接】driftwmA trackpad-first infinite canvas Wayland compositor.项目地址https://gitcode.com/gh_mirrors/dr/driftwm点击查看免费下载driftwm 是一款以触控板为核心的无限画布 Wayland 合成器它的**磁吸聚簇Cluster**是最让人眼前一亮的设计窗口无需任何手动分组只要两扇窗口磁吸对接就自动组成一个可以整体移动、整体缩放、整体最大化的聚簇。本文将从零讲清 driftwm 聚簇是如何形成的、如何用 Shift 一键整体操控以及它零簿记的底层原理。什么是磁吸聚簇不用分组贴在一起就是一伙的 传统窗口管理器要么把窗口堆叠要么把它们压缩平铺。而 driftwm 的思路完全不同窗口以原始尺寸躺在一块无限大的 2D 画布上你的屏幕只是一台相机。当两扇窗口互相靠近时边缘会自动磁吸贴合——这就是窗口吸附snap。关键在于吸附后的窗口会自动形成一个隐式聚簇。没有新建分组菜单没有添加成员操作聚簇的边界完全由窗口当前的几何位置决定。正如 README.md 所说Snapped windows form a cluster.吸附的窗口组成一个聚簇聚簇如何形成磁吸对齐的三条判定规则 聚簇判定发生在 src/layout/cluster.rs 中核心是 adjacent_side() 函数。两扇窗口要算同簇必须同时满足只认边缘对接一轴上恰好相距gap默认 12px另一轴上有真实的正向重叠。斜角相碰、只是离得近都不算容错 1 像素窗口居中、适配等操作的取整可能让间距偏差 1px这仍算相邻EPS 1.0不会把聚簇打散传递性扩散A 贴着 B、B 贴着 C则 A、B、C 同属一个聚簇把 C 拖走聚簇立刻缩回 A、B。也就是说聚簇是**对当前布局实时求连通分量**的结果——窗口一挪动成员关系就地重算不存在任何需要维护的分组状态。磁吸本身的吸附力触发距离、破磁力值由 src/layout/snap.rs 中的吸附搜索驱动配置项见下文调优一节。上手实操一个 Shift 键整体操控 Cluster ✋聚簇形成后所有单窗口操作都有一条对应的聚簇版统一用Shift 前缀区分默认绑定如下完整列表见 docs/config.md操作触控板 / 快捷键效果整体移动聚簇AltShift 左键拖动拖走窗口同簇邻居整队跟随整体缩放聚簇AltShift 三指滑动拉主窗口相邻窗口按比例让位/跟进整体适配最大化AltShift 中键点击 /ModShiftM整簇铺满屏幕聚簇总览缩放至适应ModShiftW镜头缩到刚好框住整簇触屏设备同样享受完整能力三指双击-滑动移动窗口时按住即为聚簇拖动见 README.md。几个贴心细节拖动窗口时键盘仍然有效Mod1-4跳到书签、ModA回家你手里的窗口连同整簇会跟着走用suspend-window挂起的窗口会留下占位牌占位牌也是聚簇成员整簇操作同样作用于它新窗口默认可以用placement auto自动生成它会直接吸附到你视野中现有聚簇的旁边相当于自动入职见 src/state/placement.rs。底层揭秘零存储、逐帧重算的连通图 driftwm 的聚簇实现有一个漂亮的设计决策——图结构从不存储。src/layout/cluster.rs 的注释开宗明义The graph is never stored; each query BFSes current geometry.图从不存储每次查询都对当前几何做一次 BFScluster_of()cluster.rs#L338-L366以焦点窗口为根做一次广度优先搜索谁和谁隔着恰好一个gap谁就连边。因为没有任何持久状态移动、缩放、全屏、关闭窗口后都不需要重建任何东西——下一帧自然就是对的。当你真的开始拖动/缩放时系统会做两件事冻结聚簇快照抓取瞬间记录成员名单、每个成员相对主窗口的方位左/右/上/下链与初始矩形见 src/state/cluster_snapshot.rs三阶段位移传播resolve_cluster_shifts()先把主窗口同侧的链上邻居做静态位移再按已有粘性绑定让成员紧贴主窗口边缘最后用推挤级联push cascade多轮迭代解决成员之间的挤压与重叠——主窗口变大它右侧的窗口依次被推开像多米诺骨牌一样传导cluster.rs#L93-L226。其中还有个精妙的粘性绑定bond某成员被推过一次后本次拖动期间它会无条件跟随推动者包括你反向拖回去保证整簇像一块刚体一样不散架。调优聚簇行为让磁吸更顺手 ⚙️所有聚簇行为都继承自[snap]配置段参考 config.reference.toml配置项默认值作用gap12.0窗口间距同时是聚簇判定的精确距离distance24.0磁吸触发的临界距离屏幕 pxbreak_force32.0拖过多少像素可以挣脱吸附corners/centersfalse额外开启边缘对齐 / 中心对齐注意这些不产生聚簇邻接想让拖边框缩放和点最大化按钮也波及整簇可开启[mouse]下的decoration_resize_snapped与decoration_fit_snapped默认均为 false详细说明见 docs/config.md。写在最后 driftwm 的磁吸聚簇把窗口分组从显式操作变成了空间布局的自然结果贴在一起就是一伙分开就是各过各的。配合Shift前缀的整体操控和ModShiftW的聚簇总览多窗协作像整理桌面卡片一样直观。这种零簿记、逐帧连通分量的实现思路也让它天生免疫分组状态失同步的各种边界情况——这正是它敢承诺没有显式分组可管理的底气。赞分享【免费下载链接】driftwmA trackpad-first infinite canvas Wayland compositor.项目地址https://gitcode.com/gh_mirrors/dr/driftwm点击查看免费下载相关推荐如何让macOS窗口自动聚焦AutoRaise工具完整配置指南如何让macOS窗口自动聚焦AutoRaise工具完整配置指南 AutoRaise是一款专为macOS系统设计的窗口管理工具能够在鼠标悬停时自动将窗口提升到桌面应用揭秘 git-sim 动画原理如何用 Manim 实现 Git 操作可视化揭秘 git sim 动画原理如何用 Manim 实现 Git 操作可视化 git sim 是一款能将 Git 操作以动画形式可视化的工具通过单个终端命令就开发工具Cherry Studio 命令行实战手册从开发到构建Cherry Studio 命令行实战手册从开发到构建 Cherry Studio 是一个统一接入 300 大模型的 AI 桌面工作台支持智能聊天、自主AI 应用大模型桌面应用本地部署RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考