2个不稳定版本

0.3.0 2021年8月1日
0.2.0 2019年3月31日

#311GUI


被用于 cnx-contrib

MIT 许可证

43KB
827

Cnx — CI

为简单窗口管理器(WM)提供的简单X11状态栏

Cnx不依赖于任何特定的WM功能,而是从EWMH中定义的通用属性获取数据。如果您的WM实现了足够的EWMH,则应与Cnx兼容。

screenshot of 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 对象及其小部件的选项来自定义它。(它受到了 QTiledwm 的启发,配置完全在代码中完成,允许在不需要复杂的配置处理的情况下实现更大的可扩展性)。

使用 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