initial commit

This commit is contained in:
Valerie Wolfe 2023-05-02 17:36:42 -04:00
commit 5a4a2b7f09
3 changed files with 77 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/target
Cargo.lock

10
Cargo.toml Normal file
View file

@ -0,0 +1,10 @@
[package]
name = "i3-sec"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
i3ipc = "0.10.1"

64
src/main.rs Normal file
View file

@ -0,0 +1,64 @@
use std::process::{
Command,
exit
};
use i3ipc::{
I3Connection,
I3EventListener,
Subscription,
event::{Event, ModeEventInfo}
};
pub fn build_widget(connection: &mut I3Connection) {
let base = "(box :class \"workspace\" :orientation \"h\" :spacing 2 :space-evenly false ";
let mut output = base.to_string();
let reply = connection.get_workspaces();
if reply.is_err() {
exit(1);
}
let workspaces = reply.ok().unwrap();
for ws in workspaces.workspaces {
let mut element = String::from("(button :vexpand true :class \"");
let mut classes = String::from("ws-btn ");
if ws.focused {
classes += "focused ";
}
if ws.urgent {
classes += "urgent ";
}
element += &(classes + "\" :onclick \"i3-msg workspace ");
element += &(ws.num.to_string() + "\" \"");
element += &(ws.num.to_string() + "\")");
output += &element;
}
println!("{})", output);
}
pub fn set_mode(e: ModeEventInfo) {
let mut cmd = Command::new("eww");
let mode_str = String::from("WM_MODE=") + &e.change;
cmd.args(["update", &mode_str]);
cmd.output().ok();
}
fn main() {
let mut connection = I3Connection::connect().unwrap();
build_widget(&mut connection);
let mut listener = I3EventListener::connect().unwrap();
let subs = [Subscription::Workspace, Subscription::Mode];
listener.subscribe(&subs).unwrap();
for event in listener.listen() {
match event.unwrap() {
Event::WorkspaceEvent(_) => build_widget(&mut connection),
Event::ModeEvent(e) => set_mode(e),
_ => unreachable!()
}
}
}