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日 |
#904 在 GUI
40 每月下载量
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