Added a rearrange workspaces feature

This commit is contained in:
Nabos 2022-08-03 15:59:41 +02:00
parent 90e1e46fb2
commit b39b51ad58

View file

@ -46,6 +46,9 @@ enum Command {
#[clap(about = "Move the focused container to the previous output")]
PrevOutput,
#[clap(about = "Rearrange already opened workspaces")]
RearrangeWorkspaces,
}
#[derive(Args, Debug)]
@ -151,7 +154,7 @@ fn check_success(stream: &UnixStream) {
};
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct Output {
name: String,
#[serde(default)]
@ -170,7 +173,7 @@ fn get_outputs(stream: &UnixStream) -> Vec<Output> {
outputs
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, Debug)]
struct Workspace {
num: u32,
output: String,
@ -292,11 +295,30 @@ fn init_workspaces(stream: &UnixStream, workspace_name: &String) {
for output in outputs.iter().filter(|x| x.active).rev() {
let mut cmd = cmd_prefix.clone();
cmd.push_str(output.name.as_str());
println!("{:?}", cmd.clone());
send_command(stream, &cmd);
focus_to_workspace(stream, workspace_name);
}
}
fn rearrange_workspaces(stream: &UnixStream) {
let outputs = get_outputs(stream);
let workspaces = get_workspaces(stream);
let focus_cmd_prefix: String = "workspace number ".to_string();
let move_cmd_prefix: String = "move workspace to ".to_string();
for workspace in workspaces.iter() {
let mut focus_cmd = focus_cmd_prefix.clone();
focus_cmd.push_str(&workspace.num.to_string());
send_command(stream, &focus_cmd);
let output_index = (workspace.num / 10) as usize;
let mut move_cmd = move_cmd_prefix.clone();
move_cmd.push_str(&outputs[output_index].name);
send_command(stream, &move_cmd);
}
}
fn main() {
let cli = Cli::parse();
let stream = get_stream();
@ -320,5 +342,8 @@ fn main() {
Command::PrevOutput => {
move_container_to_prev_output(&stream);
}
Command::RearrangeWorkspaces => {
rearrange_workspaces(&stream);
}
}
}