1 个不稳定版本

0.1.0 2021 年 8 月 1 日

#878GUI

MIT 许可证

91KB
2K SLoC

Cnx — CI

一个简单的 X11 状态栏,适用于简单的窗口管理器。

Cnx 不依赖于任何特定窗口管理器的功能,而是从 EWMH 中定义的通用属性获取数据。如果你的窗口管理器实现了足够的 EWMH,它应该可以与 Cnx 一起使用。

screenshot of cnx

功能

Cnx 编写为可定制、简单和快速。

在可能的情况下,它更愿意异步等待底层数据源的变化(并使用 tokio 来实现这一点),而不是定期调用外部程序。

目前可用的这些小部件

  • 活动窗口标题 — 显示当前聚焦窗口的标题(EWMH 的 _NET_WM_NAME)。
  • 分页器 — 显示窗口管理器的空间/组,突出显示当前活动的一个。(使用 EWMH 的 _NET_DESKTOP_NAMES_NET_NUMBER_OF_DESKTOPS_NET_CURRENT_DESKTOP)。
  • 时钟 — 显示时间。

cnx-contrib 包含额外的小部件

  • 传感器 — 定期解析并显示系统提供的传感器输出。
  • 音量 - 显示默认输出设备的当前音量和静音状态。
  • 电池 - 显示剩余电池和充电状态。
  • 无线 - 显示当前网络的无线信号强度。
  • CPU - 显示当前 CPU 消耗量
  • 天气 - 显示您位置的天气信息
  • 磁盘使用情况 - 显示已挂载文件系统的当前使用情况
  • LeftWM - 显示 LeftWM 的监视器和标签

SensorsVolumeBattery 小部件需要平台支持。它们目前支持 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-utilxcb-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