5 个版本
0.0.51 | 2024年6月11日 |
---|---|
0.0.50 | 2024年6月11日 |
0.0.45 | 2022年3月31日 |
0.0.40 | 2021年12月18日 |
0.0.39 | 2021年12月18日 |
在 GUI 中排名 94
每月下载量 228
用于 wmctl
120KB
2K SLoC
libwmctl
Rust X11 自动化
libwmctl
实现了 扩展窗口管理器提示 (EWMH) 规范,作为与 EWMH 兼容的窗口管理器协同工作的方式。 libwmctl
提供了精确定义窗口形状和放置的能力,并为缺少某些形状或放置功能的窗口管理器填补了空白。 libwmctl
以简单可消费的方式公开了 X11 详细信息,为超出您最喜欢的 EWMH 窗口管理器提供的窗口操作打开了大门。
快速链接
用法
此最小 rustc 要求是由 tracing_subscriber 要求驱动的
形状窗口
使用预定义的 Shape::Small
形状(屏幕的四分之一)来调整活动窗口的形状。
use libwmctl::prelude::*;
fn main() {
active().shape(Shape::Small).place().unwrap();
}
移动窗口
使用预定义的 Position::BottomLeft
位置将活动窗口移动到屏幕的左下角。
use libwmctl::prelude::*;
fn main() {
active().pos(Position::BottomLeft).place().unwrap();
}
放置窗口
通过放置窗口将形状和移动合并为单个命令。首先使用预定义的 Shap::Small
形状调整窗口,然后使用预定义的 Position:BottomLeft
位置在单个操作中将其移动到左下角。
use libwmctl::prelude::*;
fn main() {
active().shape(Shape::Small).pos(Position::BottomLeft).place().unwrap();
}
窗口管理器信息
use libwmctl::prelude::*;
use prettytable::{format, Cell, Row, Table};
fn main() {
let wm = info().unwrap();
let win = active();
println!("Window Manager Information");
println!("-----------------------------------------------------------------------");
println!("Window Manager: {}", wm.name);
println!("Compositing: {}", wm.compositing);
println!("Root Window: {}", wm.root_win_id);
println!("Work area: {}x{}", wm.work_area.0, wm.work_area.1);
println!("Screen Size: {}x{}", wm.screen_size.0, wm.screen_size.1);
println!("Desktops: {}", wm.desktops);
println!("Active Window: {}", win.id);
println!();
println!("Window Manager Supported Functions:");
let mut table = Table::new();
table.set_format(
format::FormatBuilder::new()
.separator(format::LinePosition::Top, format::LineSeparator::new('-', '+', '+', '+'))
.separator(format::LinePosition::Title, format::LineSeparator::new('=', '+', '+', '+'))
.padding(1, 1)
.build(),
);
table.set_titles(Row::new(vec![Cell::new("NAME"), Cell::new("ID")]));
// Sort atoms by name
let mut atoms = wm.supported.iter().collect::<Vec<_>>();
atoms.sort_by(|a, b| a.1.cmp(b.1));
for atom in atoms.iter() {
table.add_row(Row::new(vec![Cell::new(&atom.1), Cell::new(&atom.0.to_string())]));
}
table.printstd();
}
贡献
欢迎提交 pull request。然而,请理解,它们将纯粹根据这些更改是否符合我对项目的目标/理想进行评估。
许可
该项目受以下任一许可证的许可
- MIT 许可证 LICENSE-MIT 或 http://opensource.org/licenses/MIT
- Apache 许可证,版本 2.0 LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0
贡献
除非您明确声明,否则根据Apache-2.0许可协议定义,您有意向提交到本项目的任何贡献,都应作为上述双许可,不附加任何额外条款或条件。
待办事项
变更日志
依赖项
~8–20MB
~261K SLoC