21 个版本
0.3.5 | 2024 年 6 月 4 日 |
---|---|
0.3.4 | 2023 年 11 月 7 日 |
0.3.3 | 2023 年 7 月 16 日 |
0.3.1 | 2022 年 11 月 14 日 |
0.1.8 | 2020 年 7 月 30 日 |
在 GUI 中排名第 226
每月下载 292 次
用于 2 crates
460KB
10K SLoC
penrose - 一个平铺窗口管理器库
Penrose
是一个模块化库,用于在 Rust 中配置自己的 X11 窗口管理器。
这意味着,与大多数其他平铺窗口管理器不同,Penrose
不是一个您安装到系统上的二进制文件。相反,您可以使用它作为您自己的 crate 中的正常依赖项来编写自己的窗口管理器。请放心,顶级 API 有很好的文档,许多事情都可以直接使用,如果您喜欢深入挖掘,您会发现有很多机会根据您的喜好进行自定义。
简而言之 - 入门
penrose 的用户文档使用 mdBook 编写,并发布到 GitHub Pages,地址为 这里。它们涵盖了有关如何启动的一些更一般的概念,而不是 docs.rs 上的 crate 文档,后者更多地旨在涵盖 API 本身,并且您可以从开源库中期望得到这些。
当前版本的文档是从
develop
分支的头部构建的,可以在这里找到 这里。
如果您想看看它是如何组合在一起的,那么这个存储库的 examples 目录为您提供了几个不同的起点,我的个人设置可以在 这里 找到。(您几乎肯定 不 想要使用我的完整设置,但它应该可以作为真实用例的良好参考!)
Discord
首先,如果您想了解 Penrose 及其工作原理,请参阅文档(书籍和 API 文档)。GitHub 问题跟踪器也是了解常见问题解决方案的绝佳资源。尽管如此,我反复接到人们希望有一个可以进行更开放讨论和聊天个人设置的场所的请求,因此,如果您觉得这样不错,您可以在 discord 这里 加入我们。
项目目标
可理解的代码
Penrose
是从我尝试重构 dwm 代码库,使其更易于理解和修改的过程中诞生的。虽然我非常钦佩并致力于代码的极简主义,但个人觉得当代码库开始为了追求简洁而简化代码时,这就会成为一个问题。
我当然不会声称 Penrose
拥有您见过的最干净的代码库,但除了运行速度快,它应该是可读的。
易于配置
我过去也尝试过使用 Xmonad。我喜欢人们用它实现的配置(这个是我个人的最爱),但用 Haskell 做所有事情对我来说是个难题。我相信很多人对 Rust 也会有同样的看法,但至少我给了你们更多的选择!
使用 Penrose
,大约5分钟内就可以写出一个简单的窗口管理器,代码不超过100行。它将非常简洁,但每个附加功能(如状态栏、便签板、自定义布局、动态菜单等)都可以用一行代码添加。如果您想要的功能不可用,那么就让我们继续...
易于扩展
dwm 补丁、qtile 懒惰API、i3 IPC 配置;这些方法确实有效,但它们不是我所追求的。再次强调,Xmonad 模型,即引入并使用作为编写您自己的窗口管理器一部分的辅助库,对我来说总是扩展窗口管理器的正确模型。
Penrose
提供了一套特性和API,用于扩展默认提供的最小核心库。默认情况下,您本质上得到一个事件循环,以及一个“纯”状态管理API和与X服务器交互的“差异和渲染”层之间清晰的分离。有足够的内置组件来展示如何工作,以及更多有趣/有用的代码在 扩展 模块中。
项目目标之外
外部配置文件
解析配置文件并根据内容动态切换行为会增加代码的复杂性,更不用说还需要 验证 配置文件!默认情况下,Penrose
在您的 main.rs 中静态配置,并在每次您想进行更改时进行编译(类似于 Xmonad 和 dwm)。没有内置的热重载更改支持或主窗口管理器进程的包装器。
但话虽如此,Penrose
的可扩展性确实意味着您完全可以定义自己的配置文件格式,并在启动时解析该格式,如果您想这么做的话。
选择权在你手中!
IPC / 依赖外部程序进行核心功能
在 Penrose
中,有几个地方使用了外部程序进行实用功能(例如读取用户的键映射或启动程序启动器),但核心窗口管理器功能包含在纯状态数据结构中。这使得维护代码库变得容易得多,并且(重要的是)提供了一个很好的API来扩展窗口管理器的行为。
正如您可能预期的,如果您想模仿其他窗口管理器(如 i3
或 bspwm
)中的某些功能,您当然可以编写自己的扩展来提供某种IPC或客户端/服务器风格的机制,但这不会在库的核心中得到支持。
依赖关系
~10MB
~215K SLoC