1 个不稳定版本
0.1.0 | 2021 年 8 月 1 日 |
---|
#878 在 GUI 中
91KB
2K SLoC
Cnx —
一个简单的 X11 状态栏,适用于简单的窗口管理器。
Cnx 不依赖于任何特定窗口管理器的功能,而是从 EWMH 中定义的通用属性获取数据。如果你的窗口管理器实现了足够的 EWMH,它应该可以与 Cnx 一起使用。
功能
Cnx 编写为可定制、简单和快速。
在可能的情况下,它更愿意异步等待底层数据源的变化(并使用 tokio
来实现这一点),而不是定期调用外部程序。
目前可用的这些小部件
- 活动窗口标题 — 显示当前聚焦窗口的标题(EWMH 的
_NET_WM_NAME
)。 - 分页器 — 显示窗口管理器的空间/组,突出显示当前活动的一个。(使用 EWMH 的
_NET_DESKTOP_NAMES
、_NET_NUMBER_OF_DESKTOPS
和_NET_CURRENT_DESKTOP
)。 - 时钟 — 显示时间。
cnx-contrib 包含额外的小部件
- 传感器 — 定期解析并显示系统提供的传感器输出。
- 音量 - 显示默认输出设备的当前音量和静音状态。
- 电池 - 显示剩余电池和充电状态。
- 无线 - 显示当前网络的无线信号强度。
- CPU - 显示当前 CPU 消耗量
- 天气 - 显示您位置的天气信息
- 磁盘使用情况 - 显示已挂载文件系统的当前使用情况
- LeftWM - 显示 LeftWM 的监视器和标签
Sensors
、Volume
和 Battery
小部件需要平台支持。它们目前支持 Linux(见下面的依赖项)和 OpenBSD。支持其他平台应该是可能的。
如何使用
Cnx 是一个库,允许你创建自己的状态栏。
在正常使用中,你将创建一个新的依赖 cnx
的二进制项目,并通过传递给主 Cnx
对象及其小部件的选项来自定义它。(它受到 QTile
和 dwm
的启发,因为在代码中完成配置,允许在不需要复杂的配置处理的情况下进行更大的扩展)。
使用 Cnx 的一个简单示例
use cnx::text::*;
use cnx::widgets::*;
use cnx::{Cnx, Position};
fn main() -> Result<()> {
let attr = Attributes {
font: Font::new("Envy Code R 21"),
fg_color: Color::white(),
bg_color: None,
padding: Padding::new(8.0, 8.0, 0.0, 0.0),
};
let mut cnx = Cnx::new(Position::Top);
cnx.add_widget(ActiveWindowTitle::new(attr.clone()));
cnx.add_widget(Clock::new(attr.clone()));
cnx.run()?;
Ok(())
}
更复杂的示例在项目的 src/bin/cnx.rs
中给出。(这是该crate的默认[bin]目标,因此你可以通过在crate根目录中执行 cargo run
或甚至运行 cargo install cnx; cnx
来使用它。然而,这些都不建议用作自定义 Cnx 的选项,因为那时自定义选项将受到限制)。
在运行 Cnx 之前,你需要确保你的系统具有所需的 依赖项。
依赖项
除了 Cargo.toml
中的 Rust 依赖项外,Cnx 还依赖于以下系统库
x11-xcb
xcb-util
:xcb-ewmh
/xcb-icccm
/xcb-keysyms
pango
cairo
pangocairo
以下 Ubuntu 软件包应该可以使您的系统满足这些要求
apt-get install libx11-xcb-dev libxcb-ewmh-dev libpango1.0-dev libcairo2-dev
如果启用了 volume
功能(默认情况下是启用的),您还需要在 Linux 上安装 alsa-lib
apt-get install libasound2-dev
如果启用了 wireless
功能(默认情况下未启用),您还需要在 Linux 上安装 iwlib-dev
apt install libiw-dev
测试
不幸的是,没有太多。你可以用下面的方式运行这里的内容
cargo test
许可
MIT
依赖项
~18–31MB
~540K SLoC