associate app ids with workspaces
This commit is contained in:
parent
31a53cd759
commit
f0c7df3167
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1154,7 +1154,7 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sway-flash-indicator"
|
name = "sway-flash-indicator"
|
||||||
version = "0.6.6"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"directories",
|
"directories",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "sway-flash-indicator"
|
name = "sway-flash-indicator"
|
||||||
version = "0.6.6"
|
version = "0.7.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
@ -14,6 +15,7 @@ pub struct Config {
|
||||||
pub force_stacking: Vec<String>,
|
pub force_stacking: Vec<String>,
|
||||||
pub force_tabbed: Vec<String>,
|
pub force_tabbed: Vec<String>,
|
||||||
pub output_blocklist: Vec<String>,
|
pub output_blocklist: Vec<String>,
|
||||||
|
pub associate_id_to_workspace: HashMap<String, String>,
|
||||||
#[serde(default = "default_log_dir")]
|
#[serde(default = "default_log_dir")]
|
||||||
pub log_dir: std::path::PathBuf,
|
pub log_dir: std::path::PathBuf,
|
||||||
}
|
}
|
||||||
|
@ -134,6 +136,7 @@ impl Default for Config {
|
||||||
force_stacking: Vec::new(),
|
force_stacking: Vec::new(),
|
||||||
force_tabbed: Vec::new(),
|
force_tabbed: Vec::new(),
|
||||||
output_blocklist: Vec::new(),
|
output_blocklist: Vec::new(),
|
||||||
|
associate_id_to_workspace: HashMap::new(),
|
||||||
log_dir: std::path::PathBuf::new(),
|
log_dir: std::path::PathBuf::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
27
src/main.rs
27
src/main.rs
|
@ -120,6 +120,33 @@ async fn main() -> Res<()> {
|
||||||
command_connection.run_command("layout stacking").await?;
|
command_connection.run_command("layout stacking").await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if let Some(workspace) = node
|
||||||
|
.app_id
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|id| config.associate_id_to_workspace.get(id))
|
||||||
|
{
|
||||||
|
// TODO: case-insensitive app_id match?
|
||||||
|
|
||||||
|
let mut last_node = &node;
|
||||||
|
let v = 'ws: loop {
|
||||||
|
// find the workspace containing this node
|
||||||
|
let Some(parent) =
|
||||||
|
tree.find_as_ref(|n| n.focus.contains(&last_node.id))
|
||||||
|
else {
|
||||||
|
break 'ws None;
|
||||||
|
};
|
||||||
|
if parent.node_type == swayipc_async::NodeType::Workspace {
|
||||||
|
break 'ws parent.name.clone();
|
||||||
|
}
|
||||||
|
last_node = &parent;
|
||||||
|
};
|
||||||
|
|
||||||
|
if !v.is_some_and(|w| w.eq_ignore_ascii_case(&workspace)) {
|
||||||
|
// only run the command if we're on a different workspace
|
||||||
|
command_connection
|
||||||
|
.run_command(format!("move container to workspace {workspace}"))
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if node
|
if node
|
||||||
|
|
Loading…
Reference in a new issue