3 个不稳定版本
0.2.1 | 2018 年 9 月 3 日 |
---|---|
0.2.0 | 2018 年 9 月 3 日 |
0.1.0 | 2018 年 9 月 2 日 |
#5 in #dock
33KB
458 行
Bar Config
用于轻松创建系统栏/面板/托盘的包。
本包的目标是在 Linux 上尽可能简单地创建复杂的栏/面板/托盘,而不必担心任何与渲染无关的事情。
要开始使用本包,需要创建一个新的栏。这通过在 Bar
中使用 load
方法来完成。一旦获取到这个对象,recv
、try_recv
和 lock
方法就可以用来接收事件和渲染栏。
示例
use std::io::Cursor;
use bar_config::Bar;
fn main() {
let input = Cursor::new(String::from(
"\
height: 30\n\
monitors:\n\
- { name: \"DVI-1\" }\n\
left:\n\
- { text: \"Hello, World!\" }\n\
center:\n\
- { name: \"clock\" }\n\
right:\n\
- { text: \"VOLUME\" }",
));
let mut bar = Bar::load(input).unwrap();
print_bar(&bar);
loop {
let _ = bar.recv();
print_bar(&bar);
}
}
fn print_bar(bar: &Bar) {
let config = bar.lock();
for comp in config
.left
.iter()
.chain(&config.center)
.chain(&config.right)
{
if let Some(text) = comp.text() {
print!("{}\t", text);
}
}
println!("");
}
Bar 配置语法
这是用户配置的语法。它旨在映射到如 YAML 或 JSON 这样的数据格式,但同时也应允许在 Rust 中轻松表示。
# Legend
# ! Field is required
# ? Field is optional
# Root element of the bar
Bar
# General configuration options
!height: u8
?position: Position
?background: Background
!monitors: [Monitor]
# Default fallback values for components
?defaults: ComponentSettings
# Component containers
?left: [Component]
?center: [Component]
?right: [Component]
# A single component/block/module in the bar
Component
# Name used to identify which component should be loaded
?name: String
# Text which will be displayed inside the component
?text: String
# Options available for every component
?settings: ComponentSettings
# Extra options are passed to the component
?_: T
# Default options available for every component
ComponentSettings
?foreground: (r: u8, g: u8, b: u8, a: u8)
?background: Background
?width: u8
?padding: u8
?offset_x: i8
?offset_y: i8
?fonts: [Font]
?border: Border
# Background of a component or the bar
Background
!Image(path: String) | Color(r: u8, g: u8, b: u8, a: u8)
# Dinstinct identification for a font
Font
!description: String
!size: u8
# Distinct identification for a monitor
Monitor
!name: String
?fallback_names: [String]
# Border separating the bar from the rest of the WM
Border
!height: u8
!color: (r: u8, g: u8, b: u8, a: u8)
# Available positions for the bar
Position
!Top | Bottom
依赖关系
~7MB
~116K SLoC