#状态栏 #小部件 #i3 #窗口管理器 #工具包 #定制 #CPU

i3monkit

构建定制i3status替代品的工具包

3个版本

0.1.2 2019年1月12日
0.1.1 2019年1月11日
0.1.0 2019年1月11日

#1003 in GUI

每月45次下载

MIT许可证

45KB
800

i3monkit - i3状态栏监视工具包

Latest Version

概述

这是一个为i3堆叠窗口管理器构建自定义状态栏程序的工具包。i3有一个默认的状态栏程序,称为i3status,但它有些限制,扩展和定制比较困难。这个crate为您提供了快速重新实现i3状态栏程序的能力。

Screen Shot

它还包含一系列内置小部件,例如,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