pub struct Dispatch;Expand description
The struct that provides all dispatching methods
Implementations§
Source§impl Dispatch
impl Dispatch
Sourcepub fn call(dispatch_type: DispatchType<'_>) -> Result<()>
pub fn call(dispatch_type: DispatchType<'_>) -> Result<()>
This function calls a specified dispatcher (blocking)
use hyprland::dispatch::{DispatchType,Dispatch};
// This is an example of just one dispatcher, there are many more!
Dispatch::call(DispatchType::Exec("kitty"))Examples found in repository?
examples/almost_everything.rs (line 17)
8fn main() -> hyprland::Result<()> {
9 // We can call dispatchers with the dispatch macro, and struct!
10 // You can decide what you want to use, below are some examples of their usage
11
12 // Here we are telling hyprland to open kitty using the dispatch macro!
13 hyprland::dispatch!(Exec, "kitty")?;
14
15 // Here we are moving the cursor to the top left corner! We can also just use the Dispatch
16 // struct!
17 Dispatch::call(DispatchType::MoveCursorToCorner(Corner::TopLeft))?;
18
19 // Here we are adding a keybinding to Hyprland using the bind macro!
20 hyprland::bind!(SUPER, Key, "i" => ToggleFloating, None)?;
21
22 // Here we are getting the border size
23 let border_size = match Keyword::get("general:border_size")?.value {
24 OptionValue::Int(i) => i,
25 _ => panic!("border size can only be a int"),
26 };
27 println!("{border_size}");
28
29 // Here we change a keyword, in this case we are doubling the border size we got above
30 Keyword::set("general:border_size", border_size * 2)?;
31
32 // get all monitors
33 let monitors = Monitors::get()?;
34
35 // and the active window
36 let win = Client::get_active()?;
37
38 // and all open windows
39 let clients = Clients::get()?;
40
41 // and the active workspace
42 let work = Workspace::get_active()?;
43
44 // and printing them all out!
45 println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace: {work:#?}");
46
47 // Create a event listener
48 let mut event_listener = EventListener::new();
49
50 // Shows when active window changes
51 event_listener.add_active_window_change_handler(|data, _| {
52 println!("{data:#?}");
53 });
54
55 // This changes the workspace to 5 if the workspace is switched to 9
56 // this is a performance and mutable state test
57 event_listener.add_workspace_change_handler(|id, state| {
58 if id == WorkspaceType::Regular('9'.to_string()) {
59 state.active_workspace = WorkspaceType::Regular('2'.to_string());
60 }
61 });
62 // This makes it so you can't turn on fullscreen lol
63 event_listener.add_fullscreen_state_change_handler(|fstate, state| {
64 if fstate {
65 state.fullscreen_state = false;
66 }
67 });
68 // Makes a monitor unfocusable
69 event_listener.add_active_monitor_change_handler(|data, state| {
70 let hyprland::event_listener::MonitorEventData { monitor_name, .. } = data;
71
72 if monitor_name == *"DP-1".to_string() {
73 state.active_monitor = "eDP-1".to_string()
74 }
75 });
76
77 // add event, yes functions and closures both work!
78 event_listener.add_workspace_change_handler(|id, _| println!("workspace changed to {id:#?}"));
79
80 // and execute the function
81 // here we are using the blocking variant
82 // but there is a async version too
83 event_listener.start_listener()
84}Sourcepub async fn call_async(dispatch_type: DispatchType<'_>) -> Result<()>
pub async fn call_async(dispatch_type: DispatchType<'_>) -> Result<()>
This function calls a specified dispatcher (async)
use hyprland::dispatch::{DispatchType,Dispatch};
// This is an example of just one dispatcher, there are many more!
Dispatch::call_async(DispatchType::Exec("kitty")).await?;Examples found in repository?
examples/almost_everything_async.rs (line 20)
9async fn main() -> hyprland::Result<()> {
10 // We can call dispatchers with the dispatch function!
11
12 // Here we are telling hyprland to open kitty using the dispatch macro!
13 hyprland::dispatch!(async; Exec, "kitty").await?;
14
15 // Here we are adding a keybinding to Hyprland using the bind macro!
16 hyprland::bind!(async; SUPER, Key, "i" => ToggleFloating, None).await?;
17
18 // Here we are moving the cursor to the top left corner! We can also just use the Dispatch
19 // struct!
20 Dispatch::call_async(DispatchType::MoveCursorToCorner(Corner::TopLeft)).await?;
21
22 let border_size = match Keyword::get_async("general:border_size").await?.value {
23 OptionValue::Int(i) => i,
24 _ => panic!("border size can only be a int"),
25 };
26 println!("{border_size}");
27
28 // Here we change a keyword, yes its a dispatcher don't complain
29 Keyword::set_async("general:border_size", border_size * 2).await?;
30 // get all monitors
31 let monitors = Monitors::get_async().await?;
32 // and the active window
33 let win = Client::get_active_async().await?;
34 // and all open windows
35 let clients = Clients::get_async().await?;
36 // and the active workspace
37 let work = Workspace::get_active_async().await?;
38 // and printing them all out!
39 println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace:{work:#?}");
40 let animations = Animations::get_async().await?;
41 println!("{animations:#?}");
42 // Create a event listener
43 let mut event_listener = AsyncEventListener::new();
44
45 //This changes the workspace to 5 if the workspace is switched to 9
46 //this is a performance and mutable state test
47 // event_listener.add_workspace_change_handler(async_closure! {|id, state| {
48 // if id == WorkspaceType::Regular('9'.to_string()) {
49 // *state.workspace = '2'.to_string();
50 // }
51 // }});
52 /*
53 event_listener.add_workspace_change_handler(|id, state| {
54 Box::pin(async move {
55 if id == WorkspaceType::Regular('9'.to_string()) {
56 *state.workspace = '2'.to_string();
57 }
58 })
59 });
60
61 // This makes it so you can't turn on fullscreen lol
62 event_listener.add_fullscreen_state_change_handler(async_closure! {|fstate, state| {
63 if fstate {
64 *state.fullscreen = false;
65 }
66 }});
67 // Makes a monitor unfocusable
68 event_listener.add_active_monitor_change_handler(async_closure! {|data, state| {
69 let hyprland::event_listener::MonitorEventData{ monitor_name, .. } = data;
70
71 if monitor_name == *"DP-1".to_string() {
72 *state.monitor = "eDP-1".to_string()
73 }
74 }});
75 */
76 // add event, yes functions and closures both work!
77
78 event_listener.add_workspace_change_handler(
79 async_closure! { move |id| println!("workspace changed to {id:#?}")},
80 );
81 event_listener.add_active_window_change_handler(
82 async_closure! { move |data| println!("window changed to {data:#?}")},
83 );
84 // Waybar example
85 // event_listener.add_active_window_change_handler(|data| {
86 // use hyprland::event_listener::WindowEventData;
87 // let string = match data {
88 // Some(WindowEventData(class, title)) => format!("{class}: {title}"),
89 // None => "".to_string()
90 // };
91 // println!(r#"{{"text": "{string}", class: "what is this?"}}"#);
92 // });
93
94 // and execute the function
95 // here we are using the blocking variant
96 // but there is a async version too
97 event_listener.start_listener_async().await
98}Auto Trait Implementations§
impl Freeze for Dispatch
impl RefUnwindSafe for Dispatch
impl Send for Dispatch
impl Sync for Dispatch
impl Unpin for Dispatch
impl UnsafeUnpin for Dispatch
impl UnwindSafe for Dispatch
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more