Paneru vs Yabai vs Niri:macOS滑动平铺窗口管理器横向对比与选择建议
【免费下载链接】paneruA sliding, tiling window manager for MacOS.项目地址: https://gitcode.com/gh_mirrors/pan/paneru
Paneru 是一款面向 macOS 的滑动平铺窗口管理器,它把窗口排列在一条无限延伸的横向条带上,开新窗口也绝不会挤动已有窗口。本文横向对比 Paneru、Yabai 与 Niri 三款窗口管理器的布局哲学、系统要求与生态差异,并给出快速选择指南,帮你挑到最适合自己的 macOS 平铺窗口管理器。
三款窗口管理器,一句话说清它们是什么
- Paneru:macOS 上的滑动平铺窗口管理器,窗口排在无限横向条带上,向右滑动浏览,灵感来自 Niri 的滚动平铺体验,用 Rust + Bevy ECS 构建。
- Yabai:macOS 上老牌的经典网格平铺窗口管理器,用 C 编写,生态成熟(常搭配 skhd 等工具),但网格会随新窗口不断分割重排。
- Niri:Linux 上的滚动平铺 Wayland 合成器,"可滚动平铺"这一玩法的鼻祖,Paneru 正是想把它带到 macOS 上。
💡 三者并非同一赛道的直接竞品:Yabai 和 Paneru 都跑在 macOS 上,可以对比取舍;Niri 只在 Linux(Wayland)上运行,它的存在更多是帮你理解"滑动平铺"这个理念的来龙去脉。
核心差异速览:一张表看懂三大窗口管理器
| 维度 | Paneru | Yabai | Niri |
|---|---|---|---|
| 支持平台 | macOS | macOS | Linux(Wayland) |
| 布局模型 | 无限横向滑动条带 | 固定网格分割 | 无限横向滚动条带 |
| 打开新窗口时 | 已有窗口保持原尺寸 | 已有窗口被重新分割、缩放 | 已有窗口不动,新窗口可滚动查看 |
| 系统要求 | 授予辅助功能(Accessibility)权限 | 需关闭系统完整性保护(SIP)才能完整使用 | 需 Wayland 会话 |
| 工作区 | 原生 macOS Spaces + 虚拟工作区(实验性) | 原生 Spaces | Focus Mode 等原生机制 |
| 脚本能力 | 内置 Lua 运行时(paneru.setup/paneru.on/paneru.bind) | 依赖 skhd、Hammerspoon 等外部工具 | 配置文件 + 内置脚本 |
| 输入方式 | 键盘快捷键 + 触摸板滑动手势 + 滚轮 | 键盘快捷键为主 | 键盘 + 触摸板/滚轮 |
| 开发语言 | Rust(Bevy ECS) | C | Rust |
📌 最直观的区别在于**"新窗口进来时,旧窗口怎么办"**:Yabai 的网格会被持续切割,窗口越开越小;Paneru 和 Niri 的滑动条带则让每个窗口尺寸稳定,新窗口排到条带末端,滑动即可看到——这正是"滑动平铺"解决的核心痛点。
Paneru 的四大亮点体验
1️⃣ 新窗口永不挤动已有布局
这是 Paneru 的核心设计原则:窗口条带向右无限延伸,打开新应用只会在末端追加,你精心调整过的列宽、堆叠全部原样保留。多开浏览器、IDE、终端时,布局稳定性是它和传统网格平铺最大的体感差异,具体平铺算法见 src/ecs/layout.rs。
2️⃣ 触摸板滑动手势,滑动窗口如丝般顺滑
Paneru 为触摸板用户量身设计:三指滑动、滚轮 + 修饰键都能推动整条窗口条带,还带惯性和吸附(实现在 src/ecs/scroll.rs)。配合focus_follows_mouse(焦点跟随鼠标),少点一次鼠标就能切换窗口。
3️⃣ 原生 Spaces + 虚拟工作区的双层管理
每个显示器有自己独立的窗口条带,配合 macOS 原生 Spaces 键盘/手势切换;还可以在同一 Space 内堆叠多行条带,用虚拟工作区按任务分组,菜单栏自带当前工作区指示器。相关逻辑集中在 src/ecs/workspace.rs。启动时它还能恢复上次的窗口布局、虚拟工作区和显示器分配,重启不丢现场。
4️⃣ 内置 Lua 运行时 + 配置热重载
Paneru 默认内嵌 LuaJIT,可以直接用一个 Lua 脚本声明全部配置、挂接窗口事件(如"窗口聚焦时自动均衡宽度")、绑定快捷键——无需依赖任何外部脚本框架,完整用法见 SCRIPTING.md。TOML 与 Lua 配置均支持保存即热重载,调键位不用重启。状态查询也开箱即用:paneru query state --json输出结构化 JSON,paneru subscribe --json可持续订阅焦点、标题、工作区变化事件(协议详见 QUERY_AND_SUBSCRIBE_FORMAT.md),方便接入状态栏或自动化工具。
安装与系统要求:运行前的 3 个设置
⚠️ Paneru 和 Yabai 一样依赖 macOS 的非原生接口,但要求更温和:
- 授予辅助功能权限:首次运行会弹窗请求,或在"系统设置 → 隐私与安全性 → 辅助功能"中开启;
- 开启"显示器具有单独的空间":让每个显示器独立管理自己的窗口条带;
- 多显示器用户注意摆放:Paneru 会把滑出屏幕的窗口藏在屏幕外(保留一条细窄可见边)。若外接显示器横向摆在旁边,macOS 可能把"移出屏幕"的窗口偷渡到副屏,导致行为异常——建议把副屏上下摆放(另有
horizontal_mouse_warp选项让纵向排列的屏幕"感觉"横向),详见 README.md 的安装说明。
安装方式任选其一:Homebrew(brew install paneru)、Cargo(cargo install paneru)或 Nix(见 nix/README.md)。安装后可用paneru install && paneru start注册为后台服务,长期驻留菜单栏。
如何选择:按你的需求快速对号入座
- 🍎只想在 macOS 上体验滑动平铺→Paneru。它是三者中唯一"macOS + 滑动条带"的组合,无需关闭 SIP,触摸板体验一流;
- 🐧主力系统是 Linux/Wayland,追求滚动平铺鼻祖体验→Niri,成熟且社区活跃,Paneru 的滑动理念正是源自它;
- 🧱需要 macOS 上的经典网格平铺、依赖现成 skhd 工作流→Yabai。生态最成熟,但要接受:SIP 必须关闭、网格会被不断切割重排、项目更新节奏已明显放缓;
- 💻笔记本小屏 / 外接大屏混合使用→ 优先Paneru。官方特别强调它对大显示器的适配(避免"巨大最大化窗口 vs 一堆小碎窗口"的两极体验),小屏上也不会被迫反复最大化;
- 🔌重度脚本玩家→ Paneru 内置 Lua 已覆盖配置、事件钩子、键绑定、状态查询;Yabai 则需要拼装 skhd + Hammerspoon 等外部组件。
常见问题 FAQ
Q1:Paneru 需要像 Yabai 一样关闭 SIP 吗?不需要。Paneru 只需辅助功能权限即可移动窗口,安全性要求更低。
Q2:Paneru 和 Yabai 能同时装吗?不建议。两者都会抢占窗口管理权,行为会互相冲突。Paneru 参考了 Yabai 的架构与 macOS 窗口管理经验(详见 ARCHITECTURE.md),是独立实现的滑动平铺方案,两者二选一即可。
Q3:Niri 的滑动平铺能用在 macOS 上吗?不能。Niri 是 Wayland 合成器,仅运行于 Linux。想在 macOS 上获得同款体验,Paneru(或 Hammerspoon 方案 PaperWM.spoon)是现成选择。
Q4:窗口数量很多时,条带会不会乱?不会。条带无限延伸但每个显示器独立,window balance可一键把全部列宽对齐当前窗口宽度,window center随时回到屏幕中央,重置布局一个热键搞定。
总结
三款工具各有所长:Yabai 胜在 macOS 网格平铺的成熟生态,Niri 是 Linux 滚动平铺的标杆,而 Paneru 把"开新窗口不动旧窗口"的滑动平铺哲学带进了 macOS——免关 SIP、触摸板手势自然、内置 Lua 脚本、会话恢复、热重载一应俱全。如果你的主力是 Mac 且受够了网格不断被切割重排,Paneru 值得成为你的第一选择。
📖 延伸阅读:完整功能与安装说明见 README.md,全部配置项见 CONFIGURATION.md,Lua 脚本指南见 SCRIPTING.md,内部架构解析见 ARCHITECTURE.md。
【免费下载链接】paneruA sliding, tiling window manager for MacOS.项目地址: https://gitcode.com/gh_mirrors/pan/paneru
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考