From 0d1595e5436b9e18936da20ca2a4fdece7afec0c Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Thu, 16 Nov 2023 15:05:04 -0800 Subject: [PATCH] feat(cli): add focused ws padding cmds This commit adds dedicated komorebic commands for setting the padding values of the focused workspace and containers. re #570 --- komorebi-core/src/lib.rs | 2 ++ komorebi/src/process_command.rs | 22 ++++++++++++++++++++++ komorebic/src/main.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/komorebi-core/src/lib.rs b/komorebi-core/src/lib.rs index ef59e9b7..9f03c921 100644 --- a/komorebi-core/src/lib.rs +++ b/komorebi-core/src/lib.rs @@ -102,8 +102,10 @@ pub enum SocketMessage { FocusNamedWorkspace(String), ContainerPadding(usize, usize, i32), NamedWorkspaceContainerPadding(String, i32), + FocusedWorkspaceContainerPadding(i32), WorkspacePadding(usize, usize, i32), NamedWorkspacePadding(String, i32), + FocusedWorkspacePadding(i32), WorkspaceTiling(usize, usize, bool), NamedWorkspaceTiling(String, bool), WorkspaceName(usize, usize, String), diff --git a/komorebi/src/process_command.rs b/komorebi/src/process_command.rs index 7588650d..1cec2314 100644 --- a/komorebi/src/process_command.rs +++ b/komorebi/src/process_command.rs @@ -322,6 +322,28 @@ impl WindowManager { monitor.update_focused_workspace(offset, &invisible_borders)?; } } + SocketMessage::FocusedWorkspaceContainerPadding(adjustment) => { + let focused_monitor_idx = self.focused_monitor_idx(); + + let focused_monitor = self + .focused_monitor() + .ok_or_else(|| anyhow!("there is no monitor"))?; + + let focused_workspace_idx = focused_monitor.focused_workspace_idx(); + + self.set_container_padding(focused_monitor_idx, focused_workspace_idx, adjustment)?; + } + SocketMessage::FocusedWorkspacePadding(adjustment) => { + let focused_monitor_idx = self.focused_monitor_idx(); + + let focused_monitor = self + .focused_monitor() + .ok_or_else(|| anyhow!("there is no monitor"))?; + + let focused_workspace_idx = focused_monitor.focused_workspace_idx(); + + self.set_workspace_padding(focused_monitor_idx, focused_workspace_idx, adjustment)?; + } SocketMessage::AdjustContainerPadding(sizing, adjustment) => { self.adjust_container_padding(sizing, adjustment)?; } diff --git a/komorebic/src/main.rs b/komorebic/src/main.rs index 0268207f..1a337d27 100644 --- a/komorebic/src/main.rs +++ b/komorebic/src/main.rs @@ -431,6 +431,24 @@ pub struct SendToMonitorWorkspace { target_workspace: usize, } +macro_rules! gen_focused_workspace_padding_subcommand_args { + // SubCommand Pattern + ( $( $name:ident ),+ $(,)? ) => { + $( + #[derive(clap::Parser, derive_ahk::AhkFunction)] + pub struct $name { + /// Pixels size to set as an integer + size: i32, + } + )+ + }; +} + +gen_focused_workspace_padding_subcommand_args! { + FocusedWorkspaceContainerPadding, + FocusedWorkspacePadding, +} + macro_rules! gen_padding_subcommand_args { // SubCommand Pattern ( $( $name:ident ),+ $(,)? ) => { @@ -857,6 +875,12 @@ enum SubCommand { /// Set offsets for a monitor to exclude parts of the work area from tiling #[clap(arg_required_else_help = true)] MonitorWorkAreaOffset(MonitorWorkAreaOffset), + /// Set container padding on the focused workspace + #[clap(arg_required_else_help = true)] + FocusedWorkspaceContainerPadding(FocusedWorkspaceContainerPadding), + /// Set workspace padding on the focused workspace + #[clap(arg_required_else_help = true)] + FocusedWorkspacePadding(FocusedWorkspacePadding), /// Adjust container padding on the focused workspace #[clap(arg_required_else_help = true)] AdjustContainerPadding(AdjustContainerPadding), @@ -1358,6 +1382,12 @@ fn main() -> Result<()> { &SocketMessage::NamedWorkspacePadding(arg.workspace, arg.size).as_bytes()?, )?; } + SubCommand::FocusedWorkspacePadding(arg) => { + send_message(&SocketMessage::FocusedWorkspacePadding(arg.size).as_bytes()?)?; + } + SubCommand::FocusedWorkspaceContainerPadding(arg) => { + send_message(&SocketMessage::FocusedWorkspaceContainerPadding(arg.size).as_bytes()?)?; + } SubCommand::AdjustWorkspacePadding(arg) => { send_message( &SocketMessage::AdjustWorkspacePadding(arg.sizing, arg.adjustment).as_bytes()?,