feat(wm): add per-workspace tiling config + toggle

Added two commands, 'komorebic toggle-tiling' and 'komorebic
workspace-tiling MONITOR_IDX WORKSPACE_IDX on|off' which allow for
tiling on the currently focused workspace to be toggled on and off, and
for the tiling for a specific workspace to be set to on or off (useful
if you want a specific workspace to always have tiling set to off at
startup).

resolve #5
This commit is contained in:
LGUG2Z
2021-08-14 10:17:54 -07:00
parent b8929cbead
commit 820432f9d4
5 changed files with 94 additions and 23 deletions

View File

@@ -47,7 +47,9 @@ enum SubCommand {
ContainerPadding(SizeForMonitorWorkspace),
WorkspacePadding(SizeForMonitorWorkspace),
WorkspaceLayout(LayoutForMonitorWorkspace),
WorkspaceTiling(TilingForMonitorWorkspace),
WorkspaceName(NameForMonitorWorkspace),
ToggleTiling,
ToggleFloat,
TogglePause,
ToggleMonocle,
@@ -91,6 +93,22 @@ struct LayoutForMonitorWorkspace {
layout: Layout,
}
fn on_or_off(s: &str) -> Result<bool, &'static str> {
match s {
"on" => Ok(true),
"off" => Ok(false),
_ => Err("expected `on` or `off`"),
}
}
#[derive(Clap)]
struct TilingForMonitorWorkspace {
monitor: usize,
workspace: usize,
#[clap(parse(try_from_str = on_or_off))]
tile: bool,
}
#[derive(Clap)]
struct Target {
number: usize,
@@ -187,6 +205,9 @@ fn main() -> Result<()> {
.as_bytes()?,
)?;
}
SubCommand::ToggleTiling => {
send_message(&*SocketMessage::ToggleTiling.as_bytes()?)?;
}
SubCommand::ToggleFloat => {
send_message(&*SocketMessage::ToggleFloat.as_bytes()?)?;
}
@@ -199,6 +220,12 @@ fn main() -> Result<()> {
.as_bytes()?,
)?;
}
SubCommand::WorkspaceTiling(layout) => {
send_message(
&*SocketMessage::WorkspaceTiling(layout.monitor, layout.workspace, layout.tile)
.as_bytes()?,
)?;
}
SubCommand::Start => {
let script = r#"Start-Process komorebi -WindowStyle hidden"#;
match powershell_script::run(script, true) {