3个版本
0.1.2 | 2019年1月12日 |
---|---|
0.1.1 | 2019年1月11日 |
0.1.0 | 2019年1月11日 |
#1003 in GUI
每月45次下载
45KB
800 行
i3monkit - i3状态栏监视工具包
概述
这是一个为i3堆叠窗口管理器构建自定义状态栏程序的工具包。i3有一个默认的状态栏程序,称为i3status
,但它有些限制,扩展和定制比较困难。这个crate为您提供了快速重新实现i3状态栏程序的能力。
它还包含一系列内置小部件,例如,CPU使用率条形图、网络速度计等。
如何构建状态栏程序
您只需用几行Rust代码就可以创建自己的状态栏。
首先,您需要创建一个crate并导入这个crate
[dependencies]
i3monkit = "*"
然后,配置您定制的i3状态栏
use i3monkit::*;
use i3monkit::widgets::*;
fn main() {
let mut bar = WidgetCollection::new();
//Add realtime stock prices, for example: Microsoft, AMD and Facebook
let stock_client = StockClient::new("your-alphavantage-API-key");
bar.push(StockClient::create_widget(&stock_client, "MSFT"));
bar.push(StockClient::create_widget(&stock_client, "AMD"));
bar.push(StockClient::create_widget(&stock_client, "FB"));
//Realtime upload/download rate for a interface
bar.push(NetworkSpeedWidget::new("wlp58s0"));
//Display all the cpu usage for each core
for i in 0..4 {
bar.push(CpuWidget::new(i));
}
//Volume widget
bar.push(VolumeWidget::new("default", "Master", 0));
//Battery status
bar.push(BatteryWidget::new(0));
//Time
bar.push(DateTimeWidget::new());
// Then start updating the satus bar
bar.update_loop(I3Protocol::new(Header::new(1), std::io::stdout()));
}
最后,您可以将~/.config/i3/config
更改,以便i3wm使用您的状态栏程序
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command path/to/your/customized/status/program
tray_output primary
colors {
background #222222
statusline #00ee22
separator #666666
# border backgr. text
focused_workspace #4c7899 #285577 #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
}
}
编写您自己的小部件
您还可以通过实现Widget
特质将您定制的组件添加到框架中。
use i3monkit::{Block, Widget, WidgetUpdate};
struct Greeter(&'static str);
impl Widget for Greeter {
fn update(&mut self) -> Option<WidgetUpdate> {
Some(WidgetUpdate{
refresh_interval: std::time::Duration::new(3600,0),
data: Some(Block::new().append_full_text(self.0).clone())
})
}
}
fn main() {
let bar = WidgetCollection::new();
bar.push(Greeter("hello world"));
.....
}
依赖项
~17–26MB
~406K SLoC