2个不稳定版本
0.3.0 | 2021年8月1日 |
---|---|
0.2.0 | 2019年3月31日 |
#311 在 GUI
被用于 cnx-contrib
43KB
827 行
Cnx —
为简单窗口管理器(WM)提供的简单X11状态栏
Cnx不依赖于任何特定的WM功能,而是从EWMH中定义的通用属性获取数据。如果您的WM实现了足够的EWMH,则应与Cnx兼容。
功能
Cnx旨在可定制、简单和快速。
尽可能异步等待底层数据源的变化(使用tokio
实现),而不是定期调用外部程序。
当前可用的组件有这些
- 活动窗口标题 — 显示当前焦点窗口的标题(EWMH的
_NET_WM_NAME
)。 - 页面导航器 — 显示WM的工作区/组,突出显示当前活动的工作区。 (使用EWMH的
_NET_DESKTOP_NAMES
和_NET_CURRENT_DESKTOP
). - 时钟 — 显示时间。
cnx-contrib 包含额外的组件
- 传感器 — 定期解析并显示系统提供的传感器输出。
- 音量 - 显示默认输出设备的当前音量/静音状态。
- 电池 - 显示剩余电池和充电状态。
- 无线 - 显示当前网络的无线信号强度。
- CPU - 显示当前CPU消耗。
- 天气 - 显示您位置的天气信息。
- 磁盘使用率 - 显示挂载文件系统的当前使用情况。
组件 [Sensors
]、[Volume
] 和 [Battery
] 需要 platform 支持当前支持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
依赖项
~9–22MB
~277K SLoC