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

Download history 2/week @ 2024-05-19 1/week @ 2024-06-02 246/week @ 2024-06-09 41/week @ 2024-06-16 2/week @ 2024-06-23

每月下载量 228
用于 wmctl

MIT/Apache 许可

120KB
2K SLoC

libwmctl

license-badge crates.io Minimum rustc

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。然而,请理解,它们将纯粹根据这些更改是否符合我对项目的目标/理想进行评估。

许可

该项目受以下任一许可证的许可

贡献

除非您明确声明,否则根据Apache-2.0许可协议定义,您有意向提交到本项目的任何贡献,都应作为上述双许可,不附加任何额外条款或条件。


待办事项

变更日志

依赖项

~8–20MB
~261K SLoC