38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
pub mod client;
|
|
pub mod monitor;
|
|
pub mod option;
|
|
pub mod workspace;
|
|
|
|
use std::env;
|
|
use std::io::prelude::*;
|
|
use std::os::unix::net::UnixStream;
|
|
|
|
extern crate serde_json;
|
|
|
|
fn send_message(action: &str, args: Vec<&str>) -> String {
|
|
let env_var_name = "HYPRLAND_INSTANCE_SIGNATURE";
|
|
|
|
let hyprland_instance_sig = match env::var(env_var_name) {
|
|
Ok(v) => v,
|
|
Err(e) => panic!("${} is not set ({})", env_var_name, e),
|
|
};
|
|
|
|
let socket_path = format!("/tmp/hypr/{}/.socket.sock", hyprland_instance_sig);
|
|
let mut stream = match UnixStream::connect(socket_path) {
|
|
Err(_) => panic!("server is not running"),
|
|
Ok(stream) => stream,
|
|
};
|
|
|
|
let mut message = format!("j/{}", action);
|
|
args.into_iter()
|
|
.for_each(|a| message.push_str(&format!(" {}", a)));
|
|
|
|
// TODO: stop being stinky and manage errors
|
|
let _ = stream.write_all(message.as_bytes());
|
|
let mut response = String::new();
|
|
|
|
// TODO: stop being stinky and manage errors
|
|
let _ = stream.read_to_string(&mut response);
|
|
response
|
|
}
|