#窗口管理器 #xcb #x11 #窗口 #ewmh #icccm

xcb-wm

Rust 对 xcb-wm - icccm 和 ewmh 扩展的实现

10 个不稳定版本 (3 个破坏性更新)

0.4.0 2022年8月25日
0.3.6 2022年6月6日
0.2.1 2022年5月29日
0.1.0 2022年5月21日

#904GUI

40 每月下载量

MIT 许可证

120KB
2.5K SLoC

xcb-wm

这是 X Window System 协议的 icccm 和 ewmh 扩展在 Rust 中的实现。

xcb-wm 提供了类型安全和 Rust 原生的抽象。它简化了 X11 窗口管理器扩展的使用。

xcb-wm 位于 rust-xcb 之上,类似于 libxcb-wm 位于 libxcb 之上。如果你已经在使用 rust-xcb,你也将熟悉 xcb-wm。公共 API 和一般使用方式有意保持接近。

xcb-wm 与 rust-xcb 1.x 及更高版本兼容。

使用方法

将以下内容添加到你的 Cargo.toml 中

[dependencies]
xcb-wm = "0.4.0"

每个请求都是一个 Get*、一个 Set* 或一个 Send* 结构体。可以使用 Get* 结构体来获取 ewmh 或 iccm 属性。可以使用 Set* 结构体来设置属性。可以使用 Send* 结构体来发送客户端消息。你可以阅读协议定义以获取更多详细信息,但通常每个属性都有一个相应的 Get* 请求。大多数情况下,Set* 请求在窗口映射之前很有用。Send* 请求用于其他所有情况。

每个请求都可以以已检查或未检查的方式发送。这是通过为每个请求特殊的 cookies 来保证类型安全的。你可以通过调用 send_request/send_request_unchecked 获取请求 cookie。

你可以通过在 cookie 上调用 wait_for_reply/wait_for_reply_unchecked 来检索回复,并将其包装成高级且有意义的 Rust 结构体。对于没有回复的请求(即 Set*Send* 请求),你可以使用 check_request 来检查错误。

示例

获取可用桌面的名称

use xcb;
use xcb_wm::ewmh;

// Create a `rust-xcb` connection
let xcb_con = xcb::Connection::connect(Option::None).unwrap().0;

// Wrap the connection in an `xcb-wm::ewmh` connection for ewmh extensions.
// 
// Note that this does not take ownership of the `rust-xcb` connection
// so you can continue to use other xcb functionality with the same
// connection.
let ewmh_con = ewmh::Connection::connect(&xcb_con);

// Create a request for the _NET_DESKTOP_NAMES property
let request = ewmh::proto::GetDesktopNames;
let cookie = ewmh_con.send_request(&request);

// Get a `GetDesktopNamesReply` reply
//
// Replies are automatically de-serialized into meaningful Rust structs. You
// take full ownership of the reply struct.
let reply = ewmh_con.wait_for_reply(cookie).unwrap();

// All replies implement `Debug` so you can also print them
println!("{:?}", reply);

依赖项

~0.6–0.9MB
~19K SLoC