4 个版本 (1 个稳定版)

1.0.0 2021 年 11 月 13 日
0.2.0 2021 年 7 月 29 日
0.1.1 2020 年 5 月 25 日
0.1.0 2020 年 5 月 24 日

#668 in 文件系统

MIT 许可证

43KB
930

Rust Blocks

用 Rust 编写的轻量级 i3/sway 状态栏。

LICENSE pipeline crate

screenshot

背景

Linux 窗口管理器/合成器,如 i3sway 允许指定生成状态栏的命令。有许多替代方案,但它们往往过于复杂或占用资源过多,所以这是一个既不复杂也不占用资源的实现。

注意:此项目高度针对我的个人设置进行优化。如果您遇到问题,请提出问题!

详情请参阅 i3 协议

安装

  1. 获取 Rust
  2. 克隆此仓库(可选)
  3. 运行 cargo install -- path <repo path> (如果进行了步骤 2)或 cargo install rs-blocks
  4. 使用 rs-blocks! (有关选项,请参阅 rs-blocks-help)

配置

rs-blocks 会查找 $XDG_CONFIG_HOME/rs-blocks/config 下的配置文件。或者,您可以使用 --config-c 参数指定配置文件。

配置文件应采用 TOML 格式。章节标题必须匹配一个可用的块类型,每个章节中剩余的配置将用于配置该块。

基本配置文件看起来像

[memory]

[cpu]

[battery]

[time]

只要指定不同的 name,就可以提供同一块类型的多个条目。例如:

[time]
name = "time1"
format = "%D"

[time]
name = "time2"
format = "%S"

块将按照在配置文件中给出的顺序出现,最顶层的章节将作为状态栏中最左侧的条目显示。

可用的块有

  • 电池
  • 亮度
  • CPU
  • 内存
  • 网络
  • 时间
  • 音量(使用 pulsemixer

有关每个块的更多详细信息,请参阅 src/blocks/ 下的文档。

信号

某些块会监听信号以立即触发更新。例如,当使用键盘快捷键更改亮度时,这将在状态栏中提供即时反馈。当前实现此功能的块有

  • 亮度
  • 音量

在这种情况下,可以使用块配置文件中的 update_signal 值来指定要监听的信号。在窗口管理器/合成器配置中,需要将发送此信号的事件添加到相关事件中。例如,在 sway 中,这看起来可能像

bindsym XF86MonBrightnessUp exec brightness +10 && pkill -SIGUSR1 rs-blocks

以及相应的配置部分

[brightness]
update_signal = 10 # SIGUSR1 is 10 on most Linux system

有关信号的信息可以在 Linux 的 man 页面 中找到。

实现细节

  • 大多数块从内核文件(/proc/*/sys/class/*)读取信息。这可能会影响某些 Linux 发行版。到目前为止,它只在 alpinearch 上进行了测试。
  • 块由线程中的无限循环表示,通过通道发送 (name, text) 元组,并在主线程中接收(然后发布)。
  • 使用 Configure 特性根据配置文件(将 TOML 字符串作为配置参数传递)配置块。必须为所有块实现此特性。
  • 应实现 Sender 特性以创建消息发送函数(有关详细信息,请参阅这些特性)。

依赖项

~6–16MB
~184K SLoC