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}