commit 0745b69d81d1c17aa967fadd035af4971d1dd924 Author: stephen Date: Wed Aug 23 00:53:41 2023 +0000 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..00b53d4 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "swayout" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +json = "0.12.4" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..e3d878a --- /dev/null +++ b/src/main.rs @@ -0,0 +1,49 @@ +use std::process::Command; +use std::str; +use json; +use json::JsonValue; + +enum SwayOutput { + Disabled(String), + Enabled(String,i32,i32), +} +fn main() { + let output = Command::new("swaymsg") + .arg("-t") + .arg("get_outputs") + .output() + .expect("Failed to execute command"); + let s = str::from_utf8(&output.stdout).unwrap(); + + let mut outputs: Vec = Vec::new(); + + let json = json::parse(s).unwrap(); + let json_outputs = match json { + JsonValue::Array(vec) => vec, + _ => panic!("json was not an array") + }; + let size = json_outputs.len(); + println!("output count: {}", size); + if size == 1 { + println!("one output, use it"); + let json_output = &json_outputs[0]; + //println!("output:{:#}", output); + let name = &json_output["name"]; + let mode = &json_output["modes"][0]; + //println!("mode:{:#}",mode); + println!("swaymsg output {} mode {}x{}", name, mode["width"], mode["height"]); + outputs.push(SwayOutput::Enabled(name.to_string(), 1, 1)); + } + + for output in &outputs { + match output { + SwayOutput::Disabled(name) => { + println!("swaymsg output {} disabled", name); + }, + SwayOutput::Enabled(name,w,h) => { + println!("swaymsg output {} mode {}x{}", name, w, h); + } + } + } + +}