bspc_rs/lib.rs
1/*!
2
3This library provides an implementation of
4[`bspc`](https://github.com/baskerville/bspwm) in rust programming language.
5
6## Example
7
8```rust, no_run
9# #[allow(clippy::needless_doctest_main)]
10use bspc_rs::events::{self, Subscription, Event, NodeEvent};
11
12fn main() {
13 let subscriptions = vec![
14 Subscription::NodeAdd,
15 Subscription::NodeFocus,
16 Subscription::NodeFlag,
17 Subscription::NodeState,
18 Subscription::NodeRemove,
19 ];
20
21 let mut subscriber = events::subscribe(false, None, &subscriptions).unwrap();
22
23 for event in subscriber.events() {
24 match event.unwrap() {
25 Event::NodeEvent(event) => match event {
26 NodeEvent::NodeFocus(node_info) => {
27 println!("Window with id {} is focused!", node_info.node_id);
28 }
29 NodeEvent::NodeRemove(node_info) => {
30 println!("Window with id {} was removed!", node_info.node_id);
31 }
32 _ => {}
33 },
34 _ => {}
35 }
36 }
37}
38```
39
40*/
41
42#[cfg(doctest)]
43#[macro_use]
44extern crate doc_comment;
45
46#[cfg(doctest)]
47doc_comment::doctest!("../README.md");
48
49pub mod errors;
50pub mod events;
51pub mod properties;
52pub mod query;
53pub mod selectors;
54pub mod settings;
55pub mod tree;
56
57mod parser;
58mod socket;
59
60pub type Id = u32;
61
62// #[doc(inline)]
63// pub use crate::events::subscribe;
64
65// #[doc(inline)]
66// pub use crate::query::{
67// query_desktops, query_monitors, query_nodes, query_tree,
68// };
69
70// #[doc(inline)]
71// pub use crate::tree::{
72// from_id_to_desktop, from_id_to_monitor, from_id_to_node,
73// };
74
75#[cfg(test)]
76mod test {
77 use super::*;
78 use crate::events::*;
79
80 // #[test]
81 // fn test_subscribe() {
82 // let subscriptions =
83 // vec![Subscription::All, Subscription::MonitorGeometry];
84 // Bspc::subscribe(&subscriptions, false, None).unwrap();
85 // }
86
87 #[test]
88 #[ignore]
89 fn test_iterator() {
90 let subscriptions = vec![
91 Subscription::NodeAdd,
92 Subscription::NodeFocus,
93 Subscription::NodeFlag,
94 Subscription::NodeState,
95 Subscription::NodeRemove,
96 ];
97
98 let mut subscribers = subscribe(false, None, &subscriptions).unwrap();
99
100 for event in subscribers.events() {
101 match event.unwrap() {
102 Event::NodeEvent(event) => match event {
103 NodeEvent::NodeFocus(_) => {
104 println!("focus!");
105 }
106 NodeEvent::NodeFlag(_) => {
107 println!("flag!");
108 }
109 NodeEvent::NodeRemove(_) => break,
110 _ => {}
111 },
112 _ => {}
113 }
114 }
115
116 for event in subscribers.events() {
117 match event.unwrap() {
118 Event::NodeEvent(event) => match event {
119 NodeEvent::NodeFocus(_) => {
120 println!("focus!");
121 }
122 NodeEvent::NodeFlag(_) => {
123 println!("flag!");
124 }
125 _ => {}
126 },
127 _ => {}
128 }
129 }
130 }
131}