diff --git a/Cargo.lock b/Cargo.lock index d14f4cef..1a067ff7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -742,13 +742,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9711f33475c22aab363b05564a17d7b789bf3dfec5ebabb586adee56f0e271b5" +checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" dependencies = [ "jobserver", "libc", - "once_cell", ] [[package]] @@ -2325,10 +2324,10 @@ dependencies = [ "crossbeam-utils", "ctrlc", "dirs", + "dunce", "getset", "hex_color", "hotwatch", - "komorebi-core", "lazy_static", "miow", "nanoid", @@ -2340,6 +2339,7 @@ dependencies = [ "schemars", "serde", "serde_json_lenient", + "serde_yaml", "shadow-rs", "strum", "sysinfo", @@ -2362,27 +2362,10 @@ name = "komorebi-client" version = "0.1.29" dependencies = [ "komorebi", - "komorebi-core", "serde_json_lenient", "uds_windows", ] -[[package]] -name = "komorebi-core" -version = "0.1.28" -dependencies = [ - "clap", - "color-eyre", - "dirs", - "dunce", - "schemars", - "serde", - "serde_json_lenient", - "serde_yaml", - "strum", - "windows 0.54.0", -] - [[package]] name = "komorebi-gui" version = "0.1.29" @@ -2406,7 +2389,6 @@ dependencies = [ "dunce", "fs-tail", "komorebi-client", - "komorebi-core", "lazy_static", "miette", "paste", @@ -3216,7 +3198,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "petgraph", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", "thread-id", "windows-targets 0.52.6", @@ -3533,9 +3515,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags 2.6.0", ] diff --git a/Cargo.toml b/Cargo.toml index f7c6f82b..6ae588cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,6 @@ resolver = "2" members = [ "komorebi", "komorebi-client", - "komorebi-core", "komorebi-gui", "komorebic", "komorebic-no-console", @@ -16,6 +15,7 @@ dirs = "5" dunce = "1" serde = { version = "1", features = ["derive"] } serde_json = { package = "serde_json_lenient", version = "0.2" } +serde_yaml = "0.9" sysinfo = "0.30" uds_windows = "1" win32-display-data = { git = "https://github.com/LGUG2Z/win32-display-data", rev = "32a45cebf132c3d651ee22c0c40033a6b7edc945" } diff --git a/README.md b/README.md index 3cd974eb..4c2197fc 100644 --- a/README.md +++ b/README.md @@ -279,7 +279,7 @@ If the named pipe exists, `komorebi` will start pushing JSON data of successfull You may then filter on the `type` key to listen to the events that you are interested in. For a full list of possible notification types, refer to the enum variants of `WindowManagerEvent` in `komorebi` and `SocketMessage` -in `komorebi-core`. +in `komorebi::core`. Below is an example of how you can subscribe to and filter on events using a named pipe in `nodejs`. @@ -414,7 +414,7 @@ A TCP listener can optionally be exposed on a port of your choosing with the `-- provided to `komorebi` or `komorebic start`, no TCP listener will be created. Once created, your client may send -any [SocketMessage](https://github.com/LGUG2Z/komorebi/blob/master/komorebi-core/src/lib.rs#L37) to `komorebi` in the +any [SocketMessage](https://github.com/LGUG2Z/komorebi/blob/master/komorebi/src/core/mod.rs#L37) to `komorebi` in the same way that `komorebic` would. This can be used if you would like to create your own alternative to `komorebic` which incorporates scripting and diff --git a/komorebi-client/Cargo.toml b/komorebi-client/Cargo.toml index 5b6409b9..3575eba1 100644 --- a/komorebi-client/Cargo.toml +++ b/komorebi-client/Cargo.toml @@ -7,6 +7,5 @@ edition = "2021" [dependencies] komorebi = { path = "../komorebi" } -komorebi-core = { path = "../komorebi-core" } uds_windows = "1" serde_json = { workspace = true } diff --git a/komorebi-client/src/lib.rs b/komorebi-client/src/lib.rs index 760349c5..e57e5e0c 100644 --- a/komorebi-client/src/lib.rs +++ b/komorebi-client/src/lib.rs @@ -4,6 +4,31 @@ pub use komorebi::colour::Colour; pub use komorebi::colour::Rgb; pub use komorebi::container::Container; +pub use komorebi::core::config_generation::ApplicationConfigurationGenerator; +pub use komorebi::core::resolve_home_path; +pub use komorebi::core::AnimationStyle; +pub use komorebi::core::ApplicationIdentifier; +pub use komorebi::core::Arrangement; +pub use komorebi::core::Axis; +pub use komorebi::core::BorderImplementation; +pub use komorebi::core::BorderStyle; +pub use komorebi::core::CustomLayout; +pub use komorebi::core::CycleDirection; +pub use komorebi::core::DefaultLayout; +pub use komorebi::core::Direction; +pub use komorebi::core::FocusFollowsMouseImplementation; +pub use komorebi::core::HidingBehaviour; +pub use komorebi::core::Layout; +pub use komorebi::core::MoveBehaviour; +pub use komorebi::core::OperationBehaviour; +pub use komorebi::core::OperationDirection; +pub use komorebi::core::Rect; +pub use komorebi::core::Sizing; +pub use komorebi::core::SocketMessage; +pub use komorebi::core::StackbarLabel; +pub use komorebi::core::StackbarMode; +pub use komorebi::core::StateQuery; +pub use komorebi::core::WindowKind; pub use komorebi::monitor::Monitor; pub use komorebi::ring::Ring; pub use komorebi::window::Window; @@ -18,20 +43,6 @@ pub use komorebi::StackbarConfig; pub use komorebi::State; pub use komorebi::StaticConfig; pub use komorebi::TabsConfig; -pub use komorebi_core::Arrangement; -pub use komorebi_core::Axis; -pub use komorebi_core::BorderStyle; -pub use komorebi_core::CustomLayout; -pub use komorebi_core::CycleDirection; -pub use komorebi_core::DefaultLayout; -pub use komorebi_core::Direction; -pub use komorebi_core::Layout; -pub use komorebi_core::OperationDirection; -pub use komorebi_core::Rect; -pub use komorebi_core::SocketMessage; -pub use komorebi_core::StackbarLabel; -pub use komorebi_core::StackbarMode; -pub use komorebi_core::WindowKind; use komorebi::DATA_DIR; diff --git a/komorebi-core/Cargo.toml b/komorebi-core/Cargo.toml deleted file mode 100644 index 96fad768..00000000 --- a/komorebi-core/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "komorebi-core" -version = "0.1.28" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -clap = { version = "4", features = ["derive"] } -serde = { version = "1", features = ["derive"] } -serde_json = { workspace = true } -serde_yaml = "0.9" -strum = { version = "0.26", features = ["derive"] } -schemars = "0.8" -color-eyre = { workspace = true } -windows = { workspace = true } -dunce = { workspace = true } -dirs = { workspace = true } diff --git a/komorebi/Cargo.toml b/komorebi/Cargo.toml index 309cb886..7e46925e 100644 --- a/komorebi/Cargo.toml +++ b/komorebi/Cargo.toml @@ -11,8 +11,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -komorebi-core = { path = "../komorebi-core" } - bitflags = { version = "2", features = ["serde"] } clap = { version = "4", features = ["derive"] } color-eyre = { workspace = true } @@ -20,6 +18,7 @@ crossbeam-channel = "0.5" crossbeam-utils = "0.8" ctrlc = { version = "3", features = ["termination"] } dirs = { workspace = true } +dunce = { workspace = true } getset = "0.1" hex_color = { version = "3", features = ["serde"] } hotwatch = "0.5" @@ -34,6 +33,7 @@ regex = "1" schemars = "0.8" serde = { version = "1", features = ["derive"] } serde_json = { workspace = true } +serde_yaml = { workspace = true } strum = { version = "0.26", features = ["derive"] } sysinfo = { workspace = true } tracing = "0.1" diff --git a/komorebi/src/animation.rs b/komorebi/src/animation.rs index a9e81207..3ebdd00e 100644 --- a/komorebi/src/animation.rs +++ b/komorebi/src/animation.rs @@ -1,6 +1,6 @@ +use crate::core::AnimationStyle; +use crate::core::Rect; use color_eyre::Result; -use komorebi_core::AnimationStyle; -use komorebi_core::Rect; use schemars::JsonSchema; diff --git a/komorebi/src/border_manager/border.rs b/komorebi/src/border_manager/border.rs index 65feecce..ba07c0bd 100644 --- a/komorebi/src/border_manager/border.rs +++ b/komorebi/src/border_manager/border.rs @@ -8,8 +8,8 @@ use crate::border_manager::Z_ORDER; use crate::WindowsApi; use crate::WINDOWS_11; -use komorebi_core::BorderStyle; -use komorebi_core::Rect; +use crate::core::BorderStyle; +use crate::core::Rect; use std::sync::atomic::Ordering; use std::sync::mpsc; diff --git a/komorebi/src/border_manager/mod.rs b/komorebi/src/border_manager/mod.rs index d1606f0a..f59deebf 100644 --- a/komorebi/src/border_manager/mod.rs +++ b/komorebi/src/border_manager/mod.rs @@ -2,12 +2,12 @@ mod border; +use crate::core::BorderImplementation; +use crate::core::BorderStyle; use crossbeam_channel::Receiver; use crossbeam_channel::Sender; use crossbeam_utils::atomic::AtomicCell; use crossbeam_utils::atomic::AtomicConsume; -use komorebi_core::BorderImplementation; -use komorebi_core::BorderStyle; use lazy_static::lazy_static; use parking_lot::Mutex; use schemars::JsonSchema; @@ -23,6 +23,7 @@ use std::sync::Arc; use std::sync::OnceLock; use windows::Win32::Foundation::HWND; +use crate::core::WindowKind; use crate::ring::Ring; use crate::workspace_reconciliator::ALT_TAB_HWND; use crate::Colour; @@ -31,7 +32,6 @@ use crate::WindowManager; use crate::WindowsApi; use border::border_hwnds; use border::Border; -use komorebi_core::WindowKind; pub static BORDER_WIDTH: AtomicI32 = AtomicI32::new(8); pub static BORDER_OFFSET: AtomicI32 = AtomicI32::new(-1); diff --git a/komorebi-core/src/animation.rs b/komorebi/src/core/animation.rs similarity index 100% rename from komorebi-core/src/animation.rs rename to komorebi/src/core/animation.rs diff --git a/komorebi-core/src/arrangement.rs b/komorebi/src/core/arrangement.rs similarity index 99% rename from komorebi-core/src/arrangement.rs rename to komorebi/src/core/arrangement.rs index 0c3b3b04..150b308a 100644 --- a/komorebi-core/src/arrangement.rs +++ b/komorebi/src/core/arrangement.rs @@ -7,12 +7,12 @@ use serde::Serialize; use strum::Display; use strum::EnumString; -use crate::custom_layout::Column; -use crate::custom_layout::ColumnSplit; -use crate::custom_layout::ColumnSplitWithCapacity; -use crate::CustomLayout; -use crate::DefaultLayout; -use crate::Rect; +use super::custom_layout::Column; +use super::custom_layout::ColumnSplit; +use super::custom_layout::ColumnSplitWithCapacity; +use super::CustomLayout; +use super::DefaultLayout; +use super::Rect; pub trait Arrangement { fn calculate( diff --git a/komorebi-core/src/config_generation.rs b/komorebi/src/core/config_generation.rs similarity index 99% rename from komorebi-core/src/config_generation.rs rename to komorebi/src/core/config_generation.rs index 6a69a53d..71ea8f9d 100644 --- a/komorebi-core/src/config_generation.rs +++ b/komorebi/src/core/config_generation.rs @@ -6,7 +6,7 @@ use serde::Serialize; use strum::Display; use strum::EnumString; -use crate::ApplicationIdentifier; +use super::ApplicationIdentifier; #[derive( Clone, Copy, Debug, Serialize, Deserialize, Display, EnumString, ValueEnum, JsonSchema, diff --git a/komorebi-core/src/custom_layout.rs b/komorebi/src/core/custom_layout.rs similarity index 99% rename from komorebi-core/src/custom_layout.rs rename to komorebi/src/core/custom_layout.rs index 756fd652..45d439f7 100644 --- a/komorebi-core/src/custom_layout.rs +++ b/komorebi/src/core/custom_layout.rs @@ -12,7 +12,7 @@ use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; -use crate::Rect; +use super::Rect; #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)] pub struct CustomLayout(Vec); diff --git a/komorebi-core/src/cycle_direction.rs b/komorebi/src/core/cycle_direction.rs similarity index 100% rename from komorebi-core/src/cycle_direction.rs rename to komorebi/src/core/cycle_direction.rs diff --git a/komorebi-core/src/default_layout.rs b/komorebi/src/core/default_layout.rs similarity index 98% rename from komorebi-core/src/default_layout.rs rename to komorebi/src/core/default_layout.rs index acb2a450..45db31f3 100644 --- a/komorebi-core/src/default_layout.rs +++ b/komorebi/src/core/default_layout.rs @@ -5,9 +5,9 @@ use serde::Serialize; use strum::Display; use strum::EnumString; -use crate::OperationDirection; -use crate::Rect; -use crate::Sizing; +use super::OperationDirection; +use super::Rect; +use super::Sizing; #[derive( Clone, diff --git a/komorebi-core/src/direction.rs b/komorebi/src/core/direction.rs similarity index 98% rename from komorebi-core/src/direction.rs rename to komorebi/src/core/direction.rs index 5a640893..0f55272f 100644 --- a/komorebi-core/src/direction.rs +++ b/komorebi/src/core/direction.rs @@ -1,9 +1,9 @@ -use crate::custom_layout::Column; -use crate::custom_layout::ColumnSplit; -use crate::custom_layout::ColumnSplitWithCapacity; -use crate::custom_layout::CustomLayout; -use crate::DefaultLayout; -use crate::OperationDirection; +use super::custom_layout::Column; +use super::custom_layout::ColumnSplit; +use super::custom_layout::ColumnSplitWithCapacity; +use super::custom_layout::CustomLayout; +use super::DefaultLayout; +use super::OperationDirection; pub trait Direction { fn index_in_direction( diff --git a/komorebi-core/src/layout.rs b/komorebi/src/core/layout.rs similarity index 88% rename from komorebi-core/src/layout.rs rename to komorebi/src/core/layout.rs index f22dd8a4..7c8d70b5 100644 --- a/komorebi-core/src/layout.rs +++ b/komorebi/src/core/layout.rs @@ -2,10 +2,10 @@ use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; -use crate::Arrangement; -use crate::CustomLayout; -use crate::DefaultLayout; -use crate::Direction; +use super::Arrangement; +use super::CustomLayout; +use super::DefaultLayout; +use super::Direction; #[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq)] pub enum Layout { diff --git a/komorebi-core/src/lib.rs b/komorebi/src/core/mod.rs similarity index 100% rename from komorebi-core/src/lib.rs rename to komorebi/src/core/mod.rs diff --git a/komorebi-core/src/operation_direction.rs b/komorebi/src/core/operation_direction.rs similarity index 97% rename from komorebi-core/src/operation_direction.rs rename to komorebi/src/core/operation_direction.rs index 7ef0ae04..2fdda9bc 100644 --- a/komorebi-core/src/operation_direction.rs +++ b/komorebi/src/core/operation_direction.rs @@ -7,8 +7,8 @@ use serde::Serialize; use strum::Display; use strum::EnumString; -use crate::direction::Direction; -use crate::Axis; +use super::direction::Direction; +use super::Axis; #[derive( Clone, Copy, Debug, Serialize, Deserialize, Display, EnumString, ValueEnum, JsonSchema, diff --git a/komorebi-core/src/rect.rs b/komorebi/src/core/rect.rs similarity index 100% rename from komorebi-core/src/rect.rs rename to komorebi/src/core/rect.rs diff --git a/komorebi/src/lib.rs b/komorebi/src/lib.rs index 88d76054..3d15dc56 100644 --- a/komorebi/src/lib.rs +++ b/komorebi/src/lib.rs @@ -8,6 +8,7 @@ pub mod com; pub mod ring; pub mod colour; pub mod container; +pub mod core; pub mod focus_manager; pub mod monitor; pub mod monitor_reconciliator; @@ -48,6 +49,7 @@ use std::sync::Arc; pub use animation::*; pub use animation_manager::*; pub use colour::*; +pub use core::*; pub use process_command::*; pub use process_event::*; pub use static_config::*; @@ -57,15 +59,10 @@ pub use window_manager_event::*; pub use windows_api::WindowsApi; pub use windows_api::*; +use crate::core::config_generation::IdWithIdentifier; +use crate::core::config_generation::MatchingRule; +use crate::core::config_generation::MatchingStrategy; use color_eyre::Result; -use komorebi_core::config_generation::IdWithIdentifier; -use komorebi_core::config_generation::MatchingRule; -use komorebi_core::config_generation::MatchingStrategy; -use komorebi_core::AnimationStyle; -use komorebi_core::ApplicationIdentifier; -use komorebi_core::HidingBehaviour; -use komorebi_core::Rect; -use komorebi_core::SocketMessage; use os_info::Version; use parking_lot::Mutex; use regex::Regex; diff --git a/komorebi/src/monitor.rs b/komorebi/src/monitor.rs index 7ea7c013..2127a7e2 100644 --- a/komorebi/src/monitor.rs +++ b/komorebi/src/monitor.rs @@ -12,7 +12,7 @@ use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; -use komorebi_core::Rect; +use crate::core::Rect; use crate::container::Container; use crate::ring::Ring; diff --git a/komorebi/src/monitor_reconciliator/mod.rs b/komorebi/src/monitor_reconciliator/mod.rs index e854a9f2..06d99926 100644 --- a/komorebi/src/monitor_reconciliator/mod.rs +++ b/komorebi/src/monitor_reconciliator/mod.rs @@ -1,6 +1,7 @@ #![deny(clippy::unwrap_used, clippy::expect_used)] use crate::border_manager; +use crate::core::Rect; use crate::monitor; use crate::monitor::Monitor; use crate::monitor_reconciliator::hidden::Hidden; @@ -10,7 +11,6 @@ use crate::WindowsApi; use crossbeam_channel::Receiver; use crossbeam_channel::Sender; use crossbeam_utils::atomic::AtomicConsume; -use komorebi_core::Rect; use parking_lot::Mutex; use std::collections::HashMap; use std::sync::atomic::AtomicBool; diff --git a/komorebi/src/process_command.rs b/komorebi/src/process_command.rs index d00b3fcb..00e624f3 100644 --- a/komorebi/src/process_command.rs +++ b/komorebi/src/process_command.rs @@ -21,23 +21,23 @@ use schemars::gen::SchemaSettings; use schemars::schema_for; use uds_windows::UnixStream; -use komorebi_core::config_generation::ApplicationConfiguration; -use komorebi_core::config_generation::IdWithIdentifier; -use komorebi_core::config_generation::MatchingRule; -use komorebi_core::config_generation::MatchingStrategy; -use komorebi_core::ApplicationIdentifier; -use komorebi_core::Axis; -use komorebi_core::BorderImplementation; -use komorebi_core::FocusFollowsMouseImplementation; -use komorebi_core::Layout; -use komorebi_core::MoveBehaviour; -use komorebi_core::OperationDirection; -use komorebi_core::Rect; -use komorebi_core::Sizing; -use komorebi_core::SocketMessage; -use komorebi_core::StateQuery; -use komorebi_core::WindowContainerBehaviour; -use komorebi_core::WindowKind; +use crate::core::config_generation::ApplicationConfiguration; +use crate::core::config_generation::IdWithIdentifier; +use crate::core::config_generation::MatchingRule; +use crate::core::config_generation::MatchingStrategy; +use crate::core::ApplicationIdentifier; +use crate::core::Axis; +use crate::core::BorderImplementation; +use crate::core::FocusFollowsMouseImplementation; +use crate::core::Layout; +use crate::core::MoveBehaviour; +use crate::core::OperationDirection; +use crate::core::Rect; +use crate::core::Sizing; +use crate::core::SocketMessage; +use crate::core::StateQuery; +use crate::core::WindowContainerBehaviour; +use crate::core::WindowKind; use crate::border_manager; use crate::border_manager::IMPLEMENTATION; diff --git a/komorebi/src/process_event.rs b/komorebi/src/process_event.rs index bba4a100..cd546b50 100644 --- a/komorebi/src/process_event.rs +++ b/komorebi/src/process_event.rs @@ -9,10 +9,10 @@ use color_eyre::Result; use crossbeam_utils::atomic::AtomicConsume; use parking_lot::Mutex; -use komorebi_core::OperationDirection; -use komorebi_core::Rect; -use komorebi_core::Sizing; -use komorebi_core::WindowContainerBehaviour; +use crate::core::OperationDirection; +use crate::core::Rect; +use crate::core::Sizing; +use crate::core::WindowContainerBehaviour; use crate::border_manager; use crate::border_manager::BORDER_OFFSET; diff --git a/komorebi/src/process_movement.rs b/komorebi/src/process_movement.rs index f5f8d75d..47dceebb 100644 --- a/komorebi/src/process_movement.rs +++ b/komorebi/src/process_movement.rs @@ -5,7 +5,7 @@ use winput::message_loop; use winput::message_loop::Event; use winput::Action; -use komorebi_core::FocusFollowsMouseImplementation; +use crate::core::FocusFollowsMouseImplementation; use crate::window_manager::WindowManager; diff --git a/komorebi/src/stackbar_manager/mod.rs b/komorebi/src/stackbar_manager/mod.rs index 06efd04c..26415041 100644 --- a/komorebi/src/stackbar_manager/mod.rs +++ b/komorebi/src/stackbar_manager/mod.rs @@ -1,6 +1,8 @@ mod stackbar; use crate::container::Container; +use crate::core::StackbarLabel; +use crate::core::StackbarMode; use crate::stackbar_manager::stackbar::Stackbar; use crate::WindowManager; use crate::WindowsApi; @@ -9,8 +11,6 @@ use crossbeam_channel::Receiver; use crossbeam_channel::Sender; use crossbeam_utils::atomic::AtomicCell; use crossbeam_utils::atomic::AtomicConsume; -use komorebi_core::StackbarLabel; -use komorebi_core::StackbarMode; use lazy_static::lazy_static; use parking_lot::Mutex; use std::collections::hash_map::Entry; diff --git a/komorebi/src/stackbar_manager/stackbar.rs b/komorebi/src/stackbar_manager/stackbar.rs index a688d3fb..46e147c8 100644 --- a/komorebi/src/stackbar_manager/stackbar.rs +++ b/komorebi/src/stackbar_manager/stackbar.rs @@ -2,6 +2,9 @@ use crate::border_manager::BORDER_OFFSET; use crate::border_manager::BORDER_WIDTH; use crate::border_manager::STYLE; use crate::container::Container; +use crate::core::BorderStyle; +use crate::core::Rect; +use crate::core::StackbarLabel; use crate::stackbar_manager::STACKBARS_CONTAINERS; use crate::stackbar_manager::STACKBAR_FOCUSED_TEXT_COLOUR; use crate::stackbar_manager::STACKBAR_FONT_FAMILY; @@ -15,9 +18,6 @@ use crate::WindowsApi; use crate::DEFAULT_CONTAINER_PADDING; use crate::WINDOWS_11; use crossbeam_utils::atomic::AtomicConsume; -use komorebi_core::BorderStyle; -use komorebi_core::Rect; -use komorebi_core::StackbarLabel; use std::os::windows::ffi::OsStrExt; use std::sync::atomic::Ordering; use std::sync::mpsc; diff --git a/komorebi/src/static_config.rs b/komorebi/src/static_config.rs index d81f5313..65483aae 100644 --- a/komorebi/src/static_config.rs +++ b/komorebi/src/static_config.rs @@ -4,6 +4,9 @@ use crate::border_manager::IMPLEMENTATION; use crate::border_manager::STYLE; use crate::border_manager::Z_ORDER; use crate::colour::Colour; +use crate::core::BorderImplementation; +use crate::core::StackbarLabel; +use crate::core::StackbarMode; use crate::current_virtual_desktop; use crate::monitor::Monitor; use crate::monitor_reconciliator; @@ -41,33 +44,30 @@ use crate::REGEX_IDENTIFIERS; use crate::TRAY_AND_MULTI_WINDOW_IDENTIFIERS; use crate::WINDOWS_11; use crate::WORKSPACE_RULES; -use komorebi_core::BorderImplementation; -use komorebi_core::StackbarLabel; -use komorebi_core::StackbarMode; +use crate::core::config_generation::ApplicationConfiguration; +use crate::core::config_generation::ApplicationConfigurationGenerator; +use crate::core::config_generation::ApplicationOptions; +use crate::core::config_generation::IdWithIdentifier; +use crate::core::config_generation::MatchingRule; +use crate::core::config_generation::MatchingStrategy; +use crate::core::resolve_home_path; +use crate::core::AnimationStyle; +use crate::core::ApplicationIdentifier; +use crate::core::BorderStyle; +use crate::core::DefaultLayout; +use crate::core::FocusFollowsMouseImplementation; +use crate::core::HidingBehaviour; +use crate::core::Layout; +use crate::core::MoveBehaviour; +use crate::core::OperationBehaviour; +use crate::core::Rect; +use crate::core::SocketMessage; +use crate::core::WindowContainerBehaviour; use color_eyre::Result; use crossbeam_channel::Receiver; use hotwatch::EventKind; use hotwatch::Hotwatch; -use komorebi_core::config_generation::ApplicationConfiguration; -use komorebi_core::config_generation::ApplicationConfigurationGenerator; -use komorebi_core::config_generation::ApplicationOptions; -use komorebi_core::config_generation::IdWithIdentifier; -use komorebi_core::config_generation::MatchingRule; -use komorebi_core::config_generation::MatchingStrategy; -use komorebi_core::resolve_home_path; -use komorebi_core::AnimationStyle; -use komorebi_core::ApplicationIdentifier; -use komorebi_core::BorderStyle; -use komorebi_core::DefaultLayout; -use komorebi_core::FocusFollowsMouseImplementation; -use komorebi_core::HidingBehaviour; -use komorebi_core::Layout; -use komorebi_core::MoveBehaviour; -use komorebi_core::OperationBehaviour; -use komorebi_core::Rect; -use komorebi_core::SocketMessage; -use komorebi_core::WindowContainerBehaviour; use parking_lot::Mutex; use regex::Regex; use schemars::JsonSchema; diff --git a/komorebi/src/window.rs b/komorebi/src/window.rs index 3af98dc2..11da1745 100644 --- a/komorebi/src/window.rs +++ b/komorebi/src/window.rs @@ -15,12 +15,12 @@ use std::sync::atomic::AtomicI32; use std::sync::atomic::Ordering; use std::time::Duration; +use crate::core::config_generation::IdWithIdentifier; +use crate::core::config_generation::MatchingRule; +use crate::core::config_generation::MatchingStrategy; use color_eyre::eyre; use color_eyre::Result; use crossbeam_utils::atomic::AtomicConsume; -use komorebi_core::config_generation::IdWithIdentifier; -use komorebi_core::config_generation::MatchingRule; -use komorebi_core::config_generation::MatchingStrategy; use regex::Regex; use schemars::JsonSchema; use serde::ser::SerializeStruct; @@ -29,9 +29,9 @@ use serde::Serialize; use serde::Serializer; use windows::Win32::Foundation::HWND; -use komorebi_core::ApplicationIdentifier; -use komorebi_core::HidingBehaviour; -use komorebi_core::Rect; +use crate::core::ApplicationIdentifier; +use crate::core::HidingBehaviour; +use crate::core::Rect; use crate::animation::Animation; use crate::styles::ExtendedWindowStyle; diff --git a/komorebi/src/window_manager.rs b/komorebi/src/window_manager.rs index 0386db90..083f7679 100644 --- a/komorebi/src/window_manager.rs +++ b/komorebi/src/window_manager.rs @@ -22,27 +22,28 @@ use serde::Deserialize; use serde::Serialize; use uds_windows::UnixListener; -use komorebi_core::config_generation::MatchingRule; -use komorebi_core::custom_layout::CustomLayout; -use komorebi_core::Arrangement; -use komorebi_core::Axis; -use komorebi_core::BorderStyle; -use komorebi_core::CycleDirection; -use komorebi_core::DefaultLayout; -use komorebi_core::FocusFollowsMouseImplementation; -use komorebi_core::HidingBehaviour; -use komorebi_core::Layout; -use komorebi_core::MoveBehaviour; -use komorebi_core::OperationBehaviour; -use komorebi_core::OperationDirection; -use komorebi_core::Rect; -use komorebi_core::Sizing; -use komorebi_core::StackbarLabel; -use komorebi_core::WindowContainerBehaviour; +use crate::core::config_generation::MatchingRule; +use crate::core::custom_layout::CustomLayout; +use crate::core::Arrangement; +use crate::core::Axis; +use crate::core::BorderStyle; +use crate::core::CycleDirection; +use crate::core::DefaultLayout; +use crate::core::FocusFollowsMouseImplementation; +use crate::core::HidingBehaviour; +use crate::core::Layout; +use crate::core::MoveBehaviour; +use crate::core::OperationBehaviour; +use crate::core::OperationDirection; +use crate::core::Rect; +use crate::core::Sizing; +use crate::core::StackbarLabel; +use crate::core::WindowContainerBehaviour; use crate::border_manager; use crate::border_manager::STYLE; use crate::container::Container; +use crate::core::StackbarMode; use crate::current_virtual_desktop; use crate::load_configuration; use crate::monitor::Monitor; @@ -80,7 +81,6 @@ use crate::OBJECT_NAME_CHANGE_ON_LAUNCH; use crate::REMOVE_TITLEBARS; use crate::TRAY_AND_MULTI_WINDOW_IDENTIFIERS; use crate::WORKSPACE_RULES; -use komorebi_core::StackbarMode; #[derive(Debug)] pub struct WindowManager { diff --git a/komorebi/src/windows_api.rs b/komorebi/src/windows_api.rs index 937eeabe..2ebe6a2a 100644 --- a/komorebi/src/windows_api.rs +++ b/komorebi/src/windows_api.rs @@ -134,7 +134,7 @@ use windows::Win32::UI::WindowsAndMessaging::WS_EX_TOPMOST; use windows::Win32::UI::WindowsAndMessaging::WS_POPUP; use windows::Win32::UI::WindowsAndMessaging::WS_SYSMENU; -use komorebi_core::Rect; +use crate::core::Rect; use crate::container::Container; use crate::monitor; diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index d543700a..54752863 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -12,13 +12,13 @@ use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; -use komorebi_core::Axis; -use komorebi_core::CustomLayout; -use komorebi_core::CycleDirection; -use komorebi_core::DefaultLayout; -use komorebi_core::Layout; -use komorebi_core::OperationDirection; -use komorebi_core::Rect; +use crate::core::Axis; +use crate::core::CustomLayout; +use crate::core::CycleDirection; +use crate::core::DefaultLayout; +use crate::core::Layout; +use crate::core::OperationDirection; +use crate::core::Rect; use crate::border_manager::BORDER_OFFSET; use crate::border_manager::BORDER_WIDTH; diff --git a/komorebic/Cargo.toml b/komorebic/Cargo.toml index 3c49ae22..6130e262 100644 --- a/komorebic/Cargo.toml +++ b/komorebic/Cargo.toml @@ -11,7 +11,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -komorebi-core = { path = "../komorebi-core" } komorebi-client = { path = "../komorebi-client" } clap = { version = "4", features = ["derive", "wrap_help"] } diff --git a/komorebic/src/main.rs b/komorebic/src/main.rs index f07319ba..6a924dbb 100644 --- a/komorebic/src/main.rs +++ b/komorebic/src/main.rs @@ -6,9 +6,7 @@ use std::fs::File; use std::fs::OpenOptions; use std::io::BufRead; use std::io::BufReader; -use std::io::Read; use std::io::Write; -use std::net::Shutdown; use std::path::Path; use std::path::PathBuf; use std::process::Command; @@ -24,36 +22,37 @@ use color_eyre::eyre::bail; use color_eyre::Result; use dirs::data_local_dir; use fs_tail::TailedFile; -use komorebi_core::resolve_home_path; +use komorebi_client::resolve_home_path; +use komorebi_client::send_message; +use komorebi_client::send_query; use lazy_static::lazy_static; use miette::NamedSource; use miette::Report; use miette::SourceOffset; use miette::SourceSpan; use paste::paste; -use uds_windows::UnixStream; use which::which; use windows::Win32::Foundation::HWND; use windows::Win32::UI::WindowsAndMessaging::ShowWindow; use windows::Win32::UI::WindowsAndMessaging::SHOW_WINDOW_CMD; use windows::Win32::UI::WindowsAndMessaging::SW_RESTORE; +use komorebi_client::ApplicationConfigurationGenerator; +use komorebi_client::ApplicationIdentifier; +use komorebi_client::Axis; +use komorebi_client::CycleDirection; +use komorebi_client::DefaultLayout; +use komorebi_client::FocusFollowsMouseImplementation; +use komorebi_client::HidingBehaviour; +use komorebi_client::MoveBehaviour; +use komorebi_client::OperationBehaviour; +use komorebi_client::OperationDirection; +use komorebi_client::Rect; +use komorebi_client::Sizing; +use komorebi_client::SocketMessage; +use komorebi_client::StateQuery; use komorebi_client::StaticConfig; -use komorebi_core::config_generation::ApplicationConfigurationGenerator; -use komorebi_core::ApplicationIdentifier; -use komorebi_core::Axis; -use komorebi_core::CycleDirection; -use komorebi_core::DefaultLayout; -use komorebi_core::FocusFollowsMouseImplementation; -use komorebi_core::HidingBehaviour; -use komorebi_core::MoveBehaviour; -use komorebi_core::OperationBehaviour; -use komorebi_core::OperationDirection; -use komorebi_core::Rect; -use komorebi_core::Sizing; -use komorebi_core::SocketMessage; -use komorebi_core::StateQuery; -use komorebi_core::WindowKind; +use komorebi_client::WindowKind; lazy_static! { static ref HAS_CUSTOM_CONFIG_HOME: AtomicBool = AtomicBool::new(false); @@ -704,14 +703,14 @@ struct BorderOffset { struct BorderStyle { /// Desired border style #[clap(value_enum)] - style: komorebi_core::BorderStyle, + style: komorebi_client::BorderStyle, } #[derive(Parser)] struct BorderImplementation { /// Desired border implementation #[clap(value_enum)] - style: komorebi_core::BorderImplementation, + style: komorebi_client::BorderImplementation, } #[derive(Parser)] @@ -736,7 +735,7 @@ struct AnimationFps { struct AnimationStyle { /// Desired ease function for animation #[clap(value_enum, short, long, default_value = "linear")] - style: komorebi_core::AnimationStyle, + style: komorebi_client::AnimationStyle, } #[derive(Parser)] @@ -1305,32 +1304,10 @@ enum SubCommand { DisableAutostart, } -pub fn send_message(bytes: &[u8]) -> Result<()> { - let socket = DATA_DIR.join("komorebi.sock"); - - let mut stream = UnixStream::connect(socket)?; - stream.write_all(bytes)?; - Ok(stream.shutdown(Shutdown::Write)?) -} - -pub fn send_query(bytes: &[u8]) -> Result { - let socket = DATA_DIR.join("komorebi.sock"); - - let mut stream = UnixStream::connect(socket)?; - stream.write_all(bytes)?; - stream.shutdown(Shutdown::Write)?; - - let mut reader = BufReader::new(stream); - let mut response = String::new(); - reader.read_to_string(&mut response)?; - - Ok(response) -} - // print_query is a helper that queries komorebi and prints the response. // panics on error. -fn print_query(bytes: &[u8]) { - match send_query(bytes) { +fn print_query(message: &SocketMessage) { + match send_query(message) { Ok(response) => println!("{response}"), Err(error) => panic!("{}", error), } @@ -1571,290 +1548,267 @@ fn main() -> Result<()> { } } SubCommand::Focus(arg) => { - send_message(&SocketMessage::FocusWindow(arg.operation_direction).as_bytes()?)?; + send_message(&SocketMessage::FocusWindow(arg.operation_direction))?; } SubCommand::ForceFocus => { - send_message(&SocketMessage::ForceFocus.as_bytes()?)?; + send_message(&SocketMessage::ForceFocus)?; } SubCommand::Close => { - send_message(&SocketMessage::Close.as_bytes()?)?; + send_message(&SocketMessage::Close)?; } SubCommand::Minimize => { - send_message(&SocketMessage::Minimize.as_bytes()?)?; + send_message(&SocketMessage::Minimize)?; } SubCommand::Promote => { - send_message(&SocketMessage::Promote.as_bytes()?)?; + send_message(&SocketMessage::Promote)?; } SubCommand::PromoteFocus => { - send_message(&SocketMessage::PromoteFocus.as_bytes()?)?; + send_message(&SocketMessage::PromoteFocus)?; } SubCommand::PromoteWindow(arg) => { - send_message(&SocketMessage::PromoteWindow(arg.operation_direction).as_bytes()?)?; + send_message(&SocketMessage::PromoteWindow(arg.operation_direction))?; } SubCommand::TogglePause => { - send_message(&SocketMessage::TogglePause.as_bytes()?)?; + send_message(&SocketMessage::TogglePause)?; } SubCommand::Retile => { - send_message(&SocketMessage::Retile.as_bytes()?)?; + send_message(&SocketMessage::Retile)?; } SubCommand::Move(arg) => { - send_message(&SocketMessage::MoveWindow(arg.operation_direction).as_bytes()?)?; + send_message(&SocketMessage::MoveWindow(arg.operation_direction))?; } SubCommand::CycleFocus(arg) => { - send_message(&SocketMessage::CycleFocusWindow(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleFocusWindow(arg.cycle_direction))?; } SubCommand::CycleMove(arg) => { - send_message(&SocketMessage::CycleMoveWindow(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleMoveWindow(arg.cycle_direction))?; } SubCommand::MoveToMonitor(arg) => { - send_message(&SocketMessage::MoveContainerToMonitorNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::MoveContainerToMonitorNumber(arg.target))?; } SubCommand::CycleMoveToMonitor(arg) => { - send_message( - &SocketMessage::CycleMoveContainerToMonitor(arg.cycle_direction).as_bytes()?, - )?; + send_message(&SocketMessage::CycleMoveContainerToMonitor( + arg.cycle_direction, + ))?; } SubCommand::MoveToWorkspace(arg) => { - send_message(&SocketMessage::MoveContainerToWorkspaceNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::MoveContainerToWorkspaceNumber(arg.target))?; } SubCommand::MoveToNamedWorkspace(arg) => { - send_message(&SocketMessage::MoveContainerToNamedWorkspace(arg.workspace).as_bytes()?)?; + send_message(&SocketMessage::MoveContainerToNamedWorkspace(arg.workspace))?; } SubCommand::CycleMoveToWorkspace(arg) => { - send_message( - &SocketMessage::CycleMoveContainerToWorkspace(arg.cycle_direction).as_bytes()?, - )?; + send_message(&SocketMessage::CycleMoveContainerToWorkspace( + arg.cycle_direction, + ))?; } SubCommand::SendToMonitor(arg) => { - send_message(&SocketMessage::SendContainerToMonitorNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::SendContainerToMonitorNumber(arg.target))?; } SubCommand::CycleSendToMonitor(arg) => { - send_message( - &SocketMessage::CycleSendContainerToMonitor(arg.cycle_direction).as_bytes()?, - )?; + send_message(&SocketMessage::CycleSendContainerToMonitor( + arg.cycle_direction, + ))?; } SubCommand::SendToWorkspace(arg) => { - send_message(&SocketMessage::SendContainerToWorkspaceNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::SendContainerToWorkspaceNumber(arg.target))?; } SubCommand::SendToNamedWorkspace(arg) => { - send_message(&SocketMessage::SendContainerToNamedWorkspace(arg.workspace).as_bytes()?)?; + send_message(&SocketMessage::SendContainerToNamedWorkspace(arg.workspace))?; } SubCommand::CycleSendToWorkspace(arg) => { - send_message( - &SocketMessage::CycleSendContainerToWorkspace(arg.cycle_direction).as_bytes()?, - )?; + send_message(&SocketMessage::CycleSendContainerToWorkspace( + arg.cycle_direction, + ))?; } SubCommand::SendToMonitorWorkspace(arg) => { - send_message( - &SocketMessage::SendContainerToMonitorWorkspaceNumber( - arg.target_monitor, - arg.target_workspace, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::SendContainerToMonitorWorkspaceNumber( + arg.target_monitor, + arg.target_workspace, + ))?; } SubCommand::MoveToMonitorWorkspace(arg) => { - send_message( - &SocketMessage::MoveContainerToMonitorWorkspaceNumber( - arg.target_monitor, - arg.target_workspace, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::MoveContainerToMonitorWorkspaceNumber( + arg.target_monitor, + arg.target_workspace, + ))?; } SubCommand::MoveWorkspaceToMonitor(arg) => { - send_message(&SocketMessage::MoveWorkspaceToMonitorNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::MoveWorkspaceToMonitorNumber(arg.target))?; } SubCommand::CycleMoveWorkspaceToMonitor(arg) => { - send_message( - &SocketMessage::CycleMoveWorkspaceToMonitor(arg.cycle_direction).as_bytes()?, - )?; + send_message(&SocketMessage::CycleMoveWorkspaceToMonitor( + arg.cycle_direction, + ))?; } SubCommand::SwapWorkspacesWithMonitor(arg) => { - send_message(&SocketMessage::SwapWorkspacesToMonitorNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::SwapWorkspacesToMonitorNumber(arg.target))?; } SubCommand::InvisibleBorders(arg) => { - send_message( - &SocketMessage::InvisibleBorders(Rect { - left: arg.left, - top: arg.top, - right: arg.right, - bottom: arg.bottom, - }) - .as_bytes()?, - )?; + send_message(&SocketMessage::InvisibleBorders(Rect { + left: arg.left, + top: arg.top, + right: arg.right, + bottom: arg.bottom, + }))?; } SubCommand::MonitorWorkAreaOffset(arg) => { - send_message( - &SocketMessage::MonitorWorkAreaOffset( - arg.monitor, - Rect { - left: arg.left, - top: arg.top, - right: arg.right, - bottom: arg.bottom, - }, - ) - .as_bytes()?, - )?; - } - SubCommand::GlobalWorkAreaOffset(arg) => { - send_message( - &SocketMessage::WorkAreaOffset(Rect { + send_message(&SocketMessage::MonitorWorkAreaOffset( + arg.monitor, + Rect { left: arg.left, top: arg.top, right: arg.right, bottom: arg.bottom, - }) - .as_bytes()?, - )?; + }, + ))?; + } + SubCommand::GlobalWorkAreaOffset(arg) => { + send_message(&SocketMessage::WorkAreaOffset(Rect { + left: arg.left, + top: arg.top, + right: arg.right, + bottom: arg.bottom, + }))?; } SubCommand::ContainerPadding(arg) => { - send_message( - &SocketMessage::ContainerPadding(arg.monitor, arg.workspace, arg.size) - .as_bytes()?, - )?; + send_message(&SocketMessage::ContainerPadding( + arg.monitor, + arg.workspace, + arg.size, + ))?; } SubCommand::NamedWorkspaceContainerPadding(arg) => { - send_message( - &SocketMessage::NamedWorkspaceContainerPadding(arg.workspace, arg.size) - .as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceContainerPadding( + arg.workspace, + arg.size, + ))?; } SubCommand::WorkspacePadding(arg) => { - send_message( - &SocketMessage::WorkspacePadding(arg.monitor, arg.workspace, arg.size) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspacePadding( + arg.monitor, + arg.workspace, + arg.size, + ))?; } SubCommand::NamedWorkspacePadding(arg) => { - send_message( - &SocketMessage::NamedWorkspacePadding(arg.workspace, arg.size).as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspacePadding( + arg.workspace, + arg.size, + ))?; } SubCommand::FocusedWorkspacePadding(arg) => { - send_message(&SocketMessage::FocusedWorkspacePadding(arg.size).as_bytes()?)?; + send_message(&SocketMessage::FocusedWorkspacePadding(arg.size))?; } SubCommand::FocusedWorkspaceContainerPadding(arg) => { - send_message(&SocketMessage::FocusedWorkspaceContainerPadding(arg.size).as_bytes()?)?; + send_message(&SocketMessage::FocusedWorkspaceContainerPadding(arg.size))?; } SubCommand::AdjustWorkspacePadding(arg) => { - send_message( - &SocketMessage::AdjustWorkspacePadding(arg.sizing, arg.adjustment).as_bytes()?, - )?; + send_message(&SocketMessage::AdjustWorkspacePadding( + arg.sizing, + arg.adjustment, + ))?; } SubCommand::AdjustContainerPadding(arg) => { - send_message( - &SocketMessage::AdjustContainerPadding(arg.sizing, arg.adjustment).as_bytes()?, - )?; + send_message(&SocketMessage::AdjustContainerPadding( + arg.sizing, + arg.adjustment, + ))?; } SubCommand::ToggleFocusFollowsMouse(arg) => { - send_message(&SocketMessage::ToggleFocusFollowsMouse(arg.implementation).as_bytes()?)?; + send_message(&SocketMessage::ToggleFocusFollowsMouse(arg.implementation))?; } SubCommand::ToggleTiling => { - send_message(&SocketMessage::ToggleTiling.as_bytes()?)?; + send_message(&SocketMessage::ToggleTiling)?; } SubCommand::ToggleFloat => { - send_message(&SocketMessage::ToggleFloat.as_bytes()?)?; + send_message(&SocketMessage::ToggleFloat)?; } SubCommand::ToggleMonocle => { - send_message(&SocketMessage::ToggleMonocle.as_bytes()?)?; + send_message(&SocketMessage::ToggleMonocle)?; } SubCommand::ToggleMaximize => { - send_message(&SocketMessage::ToggleMaximize.as_bytes()?)?; + send_message(&SocketMessage::ToggleMaximize)?; } SubCommand::WorkspaceLayout(arg) => { - send_message( - &SocketMessage::WorkspaceLayout(arg.monitor, arg.workspace, arg.value) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceLayout( + arg.monitor, + arg.workspace, + arg.value, + ))?; } SubCommand::NamedWorkspaceLayout(arg) => { - send_message( - &SocketMessage::NamedWorkspaceLayout(arg.workspace, arg.value).as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceLayout( + arg.workspace, + arg.value, + ))?; } SubCommand::WorkspaceCustomLayout(arg) => { - send_message( - &SocketMessage::WorkspaceLayoutCustom( - arg.monitor, - arg.workspace, - resolve_home_path(arg.path)?, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceLayoutCustom( + arg.monitor, + arg.workspace, + resolve_home_path(arg.path)?, + ))?; } SubCommand::NamedWorkspaceCustomLayout(arg) => { - send_message( - &SocketMessage::NamedWorkspaceLayoutCustom( - arg.workspace, - resolve_home_path(arg.path)?, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceLayoutCustom( + arg.workspace, + resolve_home_path(arg.path)?, + ))?; } SubCommand::WorkspaceLayoutRule(arg) => { - send_message( - &SocketMessage::WorkspaceLayoutRule( - arg.monitor, - arg.workspace, - arg.at_container_count, - arg.layout, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceLayoutRule( + arg.monitor, + arg.workspace, + arg.at_container_count, + arg.layout, + ))?; } SubCommand::NamedWorkspaceLayoutRule(arg) => { - send_message( - &SocketMessage::NamedWorkspaceLayoutRule( - arg.workspace, - arg.at_container_count, - arg.layout, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceLayoutRule( + arg.workspace, + arg.at_container_count, + arg.layout, + ))?; } SubCommand::WorkspaceCustomLayoutRule(arg) => { - send_message( - &SocketMessage::WorkspaceLayoutCustomRule( - arg.monitor, - arg.workspace, - arg.at_container_count, - resolve_home_path(arg.path)?, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceLayoutCustomRule( + arg.monitor, + arg.workspace, + arg.at_container_count, + resolve_home_path(arg.path)?, + ))?; } SubCommand::NamedWorkspaceCustomLayoutRule(arg) => { - send_message( - &SocketMessage::NamedWorkspaceLayoutCustomRule( - arg.workspace, - arg.at_container_count, - resolve_home_path(arg.path)?, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceLayoutCustomRule( + arg.workspace, + arg.at_container_count, + resolve_home_path(arg.path)?, + ))?; } SubCommand::ClearWorkspaceLayoutRules(arg) => { - send_message( - &SocketMessage::ClearWorkspaceLayoutRules(arg.monitor, arg.workspace).as_bytes()?, - )?; + send_message(&SocketMessage::ClearWorkspaceLayoutRules( + arg.monitor, + arg.workspace, + ))?; } SubCommand::ClearNamedWorkspaceLayoutRules(arg) => { - send_message( - &SocketMessage::ClearNamedWorkspaceLayoutRules(arg.workspace).as_bytes()?, - )?; + send_message(&SocketMessage::ClearNamedWorkspaceLayoutRules( + arg.workspace, + ))?; } SubCommand::WorkspaceTiling(arg) => { - send_message( - &SocketMessage::WorkspaceTiling(arg.monitor, arg.workspace, arg.value.into()) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceTiling( + arg.monitor, + arg.workspace, + arg.value.into(), + ))?; } SubCommand::NamedWorkspaceTiling(arg) => { - send_message( - &SocketMessage::NamedWorkspaceTiling(arg.workspace, arg.value.into()).as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceTiling( + arg.workspace, + arg.value.into(), + ))?; } SubCommand::Start(arg) => { let mut ahk: String = String::from("autohotkey.exe"); @@ -2057,7 +2011,7 @@ Stop-Process -Name:whkd -ErrorAction SilentlyContinue } } - send_message(&SocketMessage::Stop.as_bytes()?)?; + send_message(&SocketMessage::Stop)?; let mut system = sysinfo::System::new_all(); system.refresh_processes(); @@ -2088,165 +2042,163 @@ Stop-Process -Name:komorebi -ErrorAction SilentlyContinue } } SubCommand::FloatRule(arg) => { - send_message(&SocketMessage::FloatRule(arg.identifier, arg.id).as_bytes()?)?; + send_message(&SocketMessage::FloatRule(arg.identifier, arg.id))?; } SubCommand::ManageRule(arg) => { - send_message(&SocketMessage::ManageRule(arg.identifier, arg.id).as_bytes()?)?; + send_message(&SocketMessage::ManageRule(arg.identifier, arg.id))?; } SubCommand::InitialWorkspaceRule(arg) => { - send_message( - &SocketMessage::InitialWorkspaceRule( - arg.identifier, - arg.id, - arg.monitor, - arg.workspace, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::InitialWorkspaceRule( + arg.identifier, + arg.id, + arg.monitor, + arg.workspace, + ))?; } SubCommand::InitialNamedWorkspaceRule(arg) => { - send_message( - &SocketMessage::InitialNamedWorkspaceRule(arg.identifier, arg.id, arg.workspace) - .as_bytes()?, - )?; + send_message(&SocketMessage::InitialNamedWorkspaceRule( + arg.identifier, + arg.id, + arg.workspace, + ))?; } SubCommand::WorkspaceRule(arg) => { - send_message( - &SocketMessage::WorkspaceRule(arg.identifier, arg.id, arg.monitor, arg.workspace) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceRule( + arg.identifier, + arg.id, + arg.monitor, + arg.workspace, + ))?; } SubCommand::NamedWorkspaceRule(arg) => { - send_message( - &SocketMessage::NamedWorkspaceRule(arg.identifier, arg.id, arg.workspace) - .as_bytes()?, - )?; + send_message(&SocketMessage::NamedWorkspaceRule( + arg.identifier, + arg.id, + arg.workspace, + ))?; } SubCommand::ClearWorkspaceRules(arg) => { - send_message( - &SocketMessage::ClearWorkspaceRules(arg.monitor, arg.workspace).as_bytes()?, - )?; + send_message(&SocketMessage::ClearWorkspaceRules( + arg.monitor, + arg.workspace, + ))?; } SubCommand::ClearNamedWorkspaceRules(arg) => { - send_message(&SocketMessage::ClearNamedWorkspaceRules(arg.workspace).as_bytes()?)?; + send_message(&SocketMessage::ClearNamedWorkspaceRules(arg.workspace))?; } SubCommand::ClearAllWorkspaceRules => { - send_message(&SocketMessage::ClearAllWorkspaceRules.as_bytes()?)?; + send_message(&SocketMessage::ClearAllWorkspaceRules)?; } SubCommand::Stack(arg) => { - send_message(&SocketMessage::StackWindow(arg.operation_direction).as_bytes()?)?; + send_message(&SocketMessage::StackWindow(arg.operation_direction))?; } SubCommand::StackAll => { - send_message(&SocketMessage::StackAll.as_bytes()?)?; + send_message(&SocketMessage::StackAll)?; } SubCommand::Unstack => { - send_message(&SocketMessage::UnstackWindow.as_bytes()?)?; + send_message(&SocketMessage::UnstackWindow)?; } SubCommand::UnstackAll => { - send_message(&SocketMessage::UnstackAll.as_bytes()?)?; + send_message(&SocketMessage::UnstackAll)?; } SubCommand::CycleStack(arg) => { - send_message(&SocketMessage::CycleStack(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleStack(arg.cycle_direction))?; } SubCommand::ChangeLayout(arg) => { - send_message(&SocketMessage::ChangeLayout(arg.default_layout).as_bytes()?)?; + send_message(&SocketMessage::ChangeLayout(arg.default_layout))?; } SubCommand::CycleLayout(arg) => { - send_message(&SocketMessage::CycleLayout(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleLayout(arg.cycle_direction))?; } SubCommand::LoadCustomLayout(arg) => { - send_message( - &SocketMessage::ChangeLayoutCustom(resolve_home_path(arg.path)?).as_bytes()?, - )?; + send_message(&SocketMessage::ChangeLayoutCustom(resolve_home_path( + arg.path, + )?))?; } SubCommand::FlipLayout(arg) => { - send_message(&SocketMessage::FlipLayout(arg.axis).as_bytes()?)?; + send_message(&SocketMessage::FlipLayout(arg.axis))?; } SubCommand::FocusMonitor(arg) => { - send_message(&SocketMessage::FocusMonitorNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::FocusMonitorNumber(arg.target))?; } SubCommand::FocusLastWorkspace => { - send_message(&SocketMessage::FocusLastWorkspace.as_bytes()?)?; + send_message(&SocketMessage::FocusLastWorkspace)?; } SubCommand::FocusWorkspace(arg) => { - send_message(&SocketMessage::FocusWorkspaceNumber(arg.target).as_bytes()?)?; + send_message(&SocketMessage::FocusWorkspaceNumber(arg.target))?; } SubCommand::FocusWorkspaces(arg) => { - send_message(&SocketMessage::FocusWorkspaceNumbers(arg.target).as_bytes()?)?; + send_message(&SocketMessage::FocusWorkspaceNumbers(arg.target))?; } SubCommand::FocusMonitorWorkspace(arg) => { - send_message( - &SocketMessage::FocusMonitorWorkspaceNumber( - arg.target_monitor, - arg.target_workspace, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::FocusMonitorWorkspaceNumber( + arg.target_monitor, + arg.target_workspace, + ))?; } SubCommand::FocusNamedWorkspace(arg) => { - send_message(&SocketMessage::FocusNamedWorkspace(arg.workspace).as_bytes()?)?; + send_message(&SocketMessage::FocusNamedWorkspace(arg.workspace))?; } SubCommand::CycleMonitor(arg) => { - send_message(&SocketMessage::CycleFocusMonitor(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleFocusMonitor(arg.cycle_direction))?; } SubCommand::CycleWorkspace(arg) => { - send_message(&SocketMessage::CycleFocusWorkspace(arg.cycle_direction).as_bytes()?)?; + send_message(&SocketMessage::CycleFocusWorkspace(arg.cycle_direction))?; } SubCommand::NewWorkspace => { - send_message(&SocketMessage::NewWorkspace.as_bytes()?)?; + send_message(&SocketMessage::NewWorkspace)?; } SubCommand::WorkspaceName(name) => { - send_message( - &SocketMessage::WorkspaceName(name.monitor, name.workspace, name.value) - .as_bytes()?, - )?; + send_message(&SocketMessage::WorkspaceName( + name.monitor, + name.workspace, + name.value, + ))?; } SubCommand::MonitorIndexPreference(arg) => { - send_message( - &SocketMessage::MonitorIndexPreference( - arg.index_preference, - arg.left, - arg.top, - arg.right, - arg.bottom, - ) - .as_bytes()?, - )?; + send_message(&SocketMessage::MonitorIndexPreference( + arg.index_preference, + arg.left, + arg.top, + arg.right, + arg.bottom, + ))?; } SubCommand::DisplayIndexPreference(arg) => { - send_message( - &SocketMessage::DisplayIndexPreference(arg.index_preference, arg.display) - .as_bytes()?, - )?; + send_message(&SocketMessage::DisplayIndexPreference( + arg.index_preference, + arg.display, + ))?; } SubCommand::EnsureWorkspaces(workspaces) => { - send_message( - &SocketMessage::EnsureWorkspaces(workspaces.monitor, workspaces.workspace_count) - .as_bytes()?, - )?; + send_message(&SocketMessage::EnsureWorkspaces( + workspaces.monitor, + workspaces.workspace_count, + ))?; } SubCommand::EnsureNamedWorkspaces(arg) => { - send_message( - &SocketMessage::EnsureNamedWorkspaces(arg.monitor, arg.names).as_bytes()?, - )?; + send_message(&SocketMessage::EnsureNamedWorkspaces( + arg.monitor, + arg.names, + ))?; } SubCommand::State => { - print_query(&SocketMessage::State.as_bytes()?); + print_query(&SocketMessage::State); } SubCommand::GlobalState => { - print_query(&SocketMessage::GlobalState.as_bytes()?); + print_query(&SocketMessage::GlobalState); } SubCommand::Gui => { Command::new("komorebi-gui").spawn()?; } SubCommand::VisibleWindows => { - print_query(&SocketMessage::VisibleWindows.as_bytes()?); + print_query(&SocketMessage::VisibleWindows); } SubCommand::MonitorInformation => { - print_query(&SocketMessage::MonitorInformation.as_bytes()?); + print_query(&SocketMessage::MonitorInformation); } SubCommand::Query(arg) => { - print_query(&SocketMessage::Query(arg.state_query).as_bytes()?); + print_query(&SocketMessage::Query(arg.state_query)); } SubCommand::RestoreWindows => { let hwnd_json = DATA_DIR.join("komorebi.hwnd.json"); @@ -2260,42 +2212,43 @@ Stop-Process -Name:komorebi -ErrorAction SilentlyContinue } } SubCommand::ResizeEdge(resize) => { - send_message(&SocketMessage::ResizeWindowEdge(resize.edge, resize.sizing).as_bytes()?)?; + send_message(&SocketMessage::ResizeWindowEdge(resize.edge, resize.sizing))?; } SubCommand::ResizeAxis(arg) => { - send_message(&SocketMessage::ResizeWindowAxis(arg.axis, arg.sizing).as_bytes()?)?; + send_message(&SocketMessage::ResizeWindowAxis(arg.axis, arg.sizing))?; } SubCommand::FocusFollowsMouse(arg) => { - send_message( - &SocketMessage::FocusFollowsMouse(arg.implementation, arg.boolean_state.into()) - .as_bytes()?, - )?; + send_message(&SocketMessage::FocusFollowsMouse( + arg.implementation, + arg.boolean_state.into(), + ))?; } SubCommand::ReloadConfiguration => { - send_message(&SocketMessage::ReloadConfiguration.as_bytes()?)?; + send_message(&SocketMessage::ReloadConfiguration)?; } SubCommand::WatchConfiguration(arg) => { - send_message(&SocketMessage::WatchConfiguration(arg.boolean_state.into()).as_bytes()?)?; + send_message(&SocketMessage::WatchConfiguration(arg.boolean_state.into()))?; } SubCommand::CompleteConfiguration => { - send_message(&SocketMessage::CompleteConfiguration.as_bytes()?)?; + send_message(&SocketMessage::CompleteConfiguration)?; } SubCommand::IdentifyObjectNameChangeApplication(target) => { - send_message( - &SocketMessage::IdentifyObjectNameChangeApplication(target.identifier, target.id) - .as_bytes()?, - )?; + send_message(&SocketMessage::IdentifyObjectNameChangeApplication( + target.identifier, + target.id, + ))?; } SubCommand::IdentifyTrayApplication(target) => { - send_message( - &SocketMessage::IdentifyTrayApplication(target.identifier, target.id).as_bytes()?, - )?; + send_message(&SocketMessage::IdentifyTrayApplication( + target.identifier, + target.id, + ))?; } SubCommand::IdentifyLayeredApplication(target) => { - send_message( - &SocketMessage::IdentifyLayeredApplication(target.identifier, target.id) - .as_bytes()?, - )?; + send_message(&SocketMessage::IdentifyLayeredApplication( + target.identifier, + target.id, + ))?; } SubCommand::RemoveTitleBar(target) => { match target.identifier { @@ -2305,108 +2258,110 @@ Stop-Process -Name:komorebi -ErrorAction SilentlyContinue } } - send_message(&SocketMessage::RemoveTitleBar(target.identifier, target.id).as_bytes()?)?; + send_message(&SocketMessage::RemoveTitleBar(target.identifier, target.id))?; } SubCommand::ToggleTitleBars => { - send_message(&SocketMessage::ToggleTitleBars.as_bytes()?)?; + send_message(&SocketMessage::ToggleTitleBars)?; } SubCommand::Manage => { - send_message(&SocketMessage::ManageFocusedWindow.as_bytes()?)?; + send_message(&SocketMessage::ManageFocusedWindow)?; } SubCommand::Unmanage => { - send_message(&SocketMessage::UnmanageFocusedWindow.as_bytes()?)?; + send_message(&SocketMessage::UnmanageFocusedWindow)?; } SubCommand::QuickSaveResize => { - send_message(&SocketMessage::QuickSave.as_bytes()?)?; + send_message(&SocketMessage::QuickSave)?; } SubCommand::QuickLoadResize => { - send_message(&SocketMessage::QuickLoad.as_bytes()?)?; + send_message(&SocketMessage::QuickLoad)?; } SubCommand::SaveResize(arg) => { - send_message(&SocketMessage::Save(resolve_home_path(arg.path)?).as_bytes()?)?; + send_message(&SocketMessage::Save(resolve_home_path(arg.path)?))?; } SubCommand::LoadResize(arg) => { - send_message(&SocketMessage::Load(resolve_home_path(arg.path)?).as_bytes()?)?; + send_message(&SocketMessage::Load(resolve_home_path(arg.path)?))?; } SubCommand::SubscribeSocket(arg) => { - send_message(&SocketMessage::AddSubscriberSocket(arg.socket).as_bytes()?)?; + send_message(&SocketMessage::AddSubscriberSocket(arg.socket))?; } SubCommand::UnsubscribeSocket(arg) => { - send_message(&SocketMessage::RemoveSubscriberSocket(arg.socket).as_bytes()?)?; + send_message(&SocketMessage::RemoveSubscriberSocket(arg.socket))?; } SubCommand::SubscribePipe(arg) => { - send_message(&SocketMessage::AddSubscriberPipe(arg.named_pipe).as_bytes()?)?; + send_message(&SocketMessage::AddSubscriberPipe(arg.named_pipe))?; } SubCommand::UnsubscribePipe(arg) => { - send_message(&SocketMessage::RemoveSubscriberPipe(arg.named_pipe).as_bytes()?)?; + send_message(&SocketMessage::RemoveSubscriberPipe(arg.named_pipe))?; } SubCommand::ToggleMouseFollowsFocus => { - send_message(&SocketMessage::ToggleMouseFollowsFocus.as_bytes()?)?; + send_message(&SocketMessage::ToggleMouseFollowsFocus)?; } SubCommand::MouseFollowsFocus(arg) => { - send_message(&SocketMessage::MouseFollowsFocus(arg.boolean_state.into()).as_bytes()?)?; + send_message(&SocketMessage::MouseFollowsFocus(arg.boolean_state.into()))?; } SubCommand::Border(arg) => { - send_message(&SocketMessage::Border(arg.boolean_state.into()).as_bytes()?)?; + send_message(&SocketMessage::Border(arg.boolean_state.into()))?; } SubCommand::BorderColour(arg) => { - send_message( - &SocketMessage::BorderColour(arg.window_kind, arg.r, arg.g, arg.b).as_bytes()?, - )?; + send_message(&SocketMessage::BorderColour( + arg.window_kind, + arg.r, + arg.g, + arg.b, + ))?; } SubCommand::BorderWidth(arg) => { - send_message(&SocketMessage::BorderWidth(arg.width).as_bytes()?)?; + send_message(&SocketMessage::BorderWidth(arg.width))?; } SubCommand::BorderOffset(arg) => { - send_message(&SocketMessage::BorderOffset(arg.offset).as_bytes()?)?; + send_message(&SocketMessage::BorderOffset(arg.offset))?; } SubCommand::BorderStyle(arg) => { - send_message(&SocketMessage::BorderStyle(arg.style).as_bytes()?)?; + send_message(&SocketMessage::BorderStyle(arg.style))?; } SubCommand::BorderImplementation(arg) => { - send_message(&SocketMessage::BorderImplementation(arg.style).as_bytes()?)?; + send_message(&SocketMessage::BorderImplementation(arg.style))?; } SubCommand::Transparency(arg) => { - send_message(&SocketMessage::Transparency(arg.boolean_state.into()).as_bytes()?)?; + send_message(&SocketMessage::Transparency(arg.boolean_state.into()))?; } SubCommand::TransparencyAlpha(arg) => { - send_message(&SocketMessage::TransparencyAlpha(arg.alpha).as_bytes()?)?; + send_message(&SocketMessage::TransparencyAlpha(arg.alpha))?; } SubCommand::Animation(arg) => { - send_message(&SocketMessage::Animation(arg.boolean_state.into()).as_bytes()?)?; + send_message(&SocketMessage::Animation(arg.boolean_state.into()))?; } SubCommand::AnimationDuration(arg) => { - send_message(&SocketMessage::AnimationDuration(arg.duration).as_bytes()?)?; + send_message(&SocketMessage::AnimationDuration(arg.duration))?; } SubCommand::AnimationFps(arg) => { - send_message(&SocketMessage::AnimationFps(arg.fps).as_bytes()?)?; + send_message(&SocketMessage::AnimationFps(arg.fps))?; } SubCommand::AnimationStyle(arg) => { - send_message(&SocketMessage::AnimationStyle(arg.style).as_bytes()?)?; + send_message(&SocketMessage::AnimationStyle(arg.style))?; } SubCommand::ResizeDelta(arg) => { - send_message(&SocketMessage::ResizeDelta(arg.pixels).as_bytes()?)?; + send_message(&SocketMessage::ResizeDelta(arg.pixels))?; } SubCommand::ToggleWindowContainerBehaviour => { - send_message(&SocketMessage::ToggleWindowContainerBehaviour.as_bytes()?)?; + send_message(&SocketMessage::ToggleWindowContainerBehaviour)?; } SubCommand::WindowHidingBehaviour(arg) => { - send_message(&SocketMessage::WindowHidingBehaviour(arg.hiding_behaviour).as_bytes()?)?; + send_message(&SocketMessage::WindowHidingBehaviour(arg.hiding_behaviour))?; } SubCommand::CrossMonitorMoveBehaviour(arg) => { - send_message( - &SocketMessage::CrossMonitorMoveBehaviour(arg.move_behaviour).as_bytes()?, - )?; + send_message(&SocketMessage::CrossMonitorMoveBehaviour( + arg.move_behaviour, + ))?; } SubCommand::ToggleCrossMonitorMoveBehaviour => { - send_message(&SocketMessage::ToggleCrossMonitorMoveBehaviour.as_bytes()?)?; + send_message(&SocketMessage::ToggleCrossMonitorMoveBehaviour)?; } SubCommand::UnmanagedWindowOperationBehaviour(arg) => { - send_message( - &SocketMessage::UnmanagedWindowOperationBehaviour(arg.operation_behaviour) - .as_bytes()?, - )?; + send_message(&SocketMessage::UnmanagedWindowOperationBehaviour( + arg.operation_behaviour, + ))?; } SubCommand::AhkAppSpecificConfiguration(arg) => { let content = std::fs::read_to_string(resolve_home_path(arg.path)?)?; @@ -2498,19 +2453,19 @@ Stop-Process -Name:komorebi -ErrorAction SilentlyContinue ); } SubCommand::ApplicationSpecificConfigurationSchema => { - print_query(&SocketMessage::ApplicationSpecificConfigurationSchema.as_bytes()?); + print_query(&SocketMessage::ApplicationSpecificConfigurationSchema); } SubCommand::NotificationSchema => { - print_query(&SocketMessage::NotificationSchema.as_bytes()?); + print_query(&SocketMessage::NotificationSchema); } SubCommand::SocketSchema => { - print_query(&SocketMessage::SocketSchema.as_bytes()?); + print_query(&SocketMessage::SocketSchema); } SubCommand::StaticConfigSchema => { - print_query(&SocketMessage::StaticConfigSchema.as_bytes()?); + print_query(&SocketMessage::StaticConfigSchema); } SubCommand::GenerateStaticConfig => { - print_query(&SocketMessage::GenerateStaticConfig.as_bytes()?); + print_query(&SocketMessage::GenerateStaticConfig); } // Deprecated SubCommand::AltFocusHack(_) | SubCommand::IdentifyBorderOverflowApplication(_) => {