这个项目能做什么
hana(花)是一款用 Zig 编写的早期开发阶段的 X11 窗口管理器,围绕模块化、灵活性和舒适配置构建。它支持动态平铺和浮动窗口范式,并自带集成在窗口管理器中的可选状态栏。除核心外,没有严格必需的功能:子系统及其模块可以从源代码中删除,项目可重新编译为不同的二进制文件。
模块化被明确列为最高优先级。可选逻辑位于各自文件中,核心通过开放契约(Surfaces、WindowModule、Segment、Layout)和构建生成的注册表来适应子系统的存在或缺失,因此核心从不按名称导入可选模块。删除模块只会缩短数组,而不会留下存根。dev/plugin-template/ 下的即用模板涵盖新的平铺布局、窗口子系统和状态栏段,并通过 zig build check 针对契约进行编译。
窗口管理功能包括平铺布局(主从堆栈、单屏、网格、斐波那契、滚动、叶子,部分带变体)、每窗口平铺/浮动切换和浮动规则、全屏和最小化、带标签和固定的工作区、按程序和按工作区的窗口规则,以及带吸附的拖放放置。状态栏提供工作区、标题、布局指示器、时钟、系统状态和音量/亮度滑块等小部件,外加标题轮播和带 vim 模态按键的内联命令提示符。
配置使用 TOML 并支持热重载,包括保留现有 X 会话的二进制热重载。配置可拆分为多个文件,自动合并;功能性配置和 config/themes/ 下可切换的主题是默认拆分方式。绑定支持通配符扩展、范围键、多操作数组、鼠标绑定和占位符替换。缩放支持 DPI 感知。
会话集成涵盖 EWMH/ICCCM 协作、重启时窗口持久化、干净的重执行、SIGUSR2 上的崩溃回溯转储,以及通过 RandR 的显示器刷新率检测。亮度控制通过 sysfs 写入(当配置了 udev 规则和视频组成员时),否则回退到节流的 brightnessctl 子进程。
构建要求为 Zig 0.16.0、X 服务器、带 randr/XKB 扩展的 libxcb、xcb-util-cursor、xcb-util-keysyms、xkbcommon 和 xkbcommon-x11,外加 cairo 和 pango/pangocairo。这些是无条件链接的,因此即使移除状态栏也需要开发头文件。安装基本就是 zig build;发行版包命令针对 Ubuntu/Debian、Arch 和 Fedora 给出。
开发工具包括层检查、模块化矩阵(每个模块单独构建)、可选的延迟基准测试、dev/harness/ 下带黄金快照的端到端 X 场景,以及 src/test/ 下的单元测试。README 指出项目处于早期阶段,计划有稳定的 main 分支,dev 上进行前沿工作。路线图列出尚未实现的功能:外部状态栏支持、反转比例拼写、更细粒度的规则驱动窗口属性和每显示器缩放优化。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。