mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-03-11 21:11:40 +01:00
Compare commits
1 Commits
feature/st
...
feature/ko
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a63490e88a |
10
Cargo.lock
generated
10
Cargo.lock
generated
@@ -841,6 +841,16 @@ dependencies = [
|
|||||||
"winreg 0.52.0",
|
"winreg 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "komorebi-client"
|
||||||
|
version = "0.1.22-dev.0"
|
||||||
|
dependencies = [
|
||||||
|
"komorebi",
|
||||||
|
"komorebi-core",
|
||||||
|
"serde_json",
|
||||||
|
"uds_windows",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "komorebi-core"
|
name = "komorebi-core"
|
||||||
version = "0.1.22-dev.0"
|
version = "0.1.22-dev.0"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ resolver = "2"
|
|||||||
members = [
|
members = [
|
||||||
"derive-ahk",
|
"derive-ahk",
|
||||||
"komorebi",
|
"komorebi",
|
||||||
|
"komorebi-client",
|
||||||
"komorebi-core",
|
"komorebi-core",
|
||||||
"komorebic",
|
"komorebic",
|
||||||
"komorebic-no-console",
|
"komorebic-no-console",
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ if you want to test them together or create a build with everything integrated.
|
|||||||
|
|
||||||
## Refactors to the codebase must have prior approval
|
## Refactors to the codebase must have prior approval
|
||||||
|
|
||||||
`komorebi` is mature codebase with an internal consistency and structure that has developed organically over close to
|
`komorebi` is a mature codebase with an internal consistency and structure that has developed organically over close to
|
||||||
half a decade.
|
half a decade.
|
||||||
|
|
||||||
There are [countless hours of live coding videos](https://youtube.com/@LGUG2Z) demonstrating work on this project and
|
There are [countless hours of live coding videos](https://youtube.com/@LGUG2Z) demonstrating work on this project and
|
||||||
@@ -138,8 +138,8 @@ distinguishing monitors by manufacturer hardware identifiers and video card port
|
|||||||
|
|
||||||
Refactors to the structure of the codebase are not taken lightly and require prior discussion and approval.
|
Refactors to the structure of the codebase are not taken lightly and require prior discussion and approval.
|
||||||
|
|
||||||
Please do not start refactoring the codebase with the expectation of having your changes integrated into the codebase
|
Please do not start refactoring the codebase with the expectation of having your changes integrated until you receive an
|
||||||
until you receive an explicit approval or a request to do so.
|
explicit approval or a request to do so.
|
||||||
|
|
||||||
Similarly, when implementing features and bug fixes, please stick to the structure of the codebase as much as possible
|
Similarly, when implementing features and bug fixes, please stick to the structure of the codebase as much as possible
|
||||||
and do not take this as an opportunity to do some "refactoring along the way".
|
and do not take this as an opportunity to do some "refactoring along the way".
|
||||||
|
|||||||
12
komorebi-client/Cargo.toml
Normal file
12
komorebi-client/Cargo.toml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "komorebi-client"
|
||||||
|
version = "0.1.22-dev.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
komorebi = { path = "../komorebi" }
|
||||||
|
komorebi-core = { path = "../komorebi-core" }
|
||||||
|
uds_windows = "1"
|
||||||
|
serde_json = "1"
|
||||||
79
komorebi-client/src/lib.rs
Normal file
79
komorebi-client/src/lib.rs
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#![warn(clippy::all, clippy::nursery, clippy::pedantic)]
|
||||||
|
#![allow(clippy::missing_errors_doc)]
|
||||||
|
|
||||||
|
pub use komorebi::container::Container;
|
||||||
|
pub use komorebi::monitor::Monitor;
|
||||||
|
pub use komorebi::ring::Ring;
|
||||||
|
pub use komorebi::window::Window;
|
||||||
|
pub use komorebi::window_manager_event::WindowManagerEvent;
|
||||||
|
pub use komorebi::workspace::Workspace;
|
||||||
|
pub use komorebi::Notification;
|
||||||
|
pub use komorebi::NotificationEvent;
|
||||||
|
pub use komorebi::State;
|
||||||
|
pub use komorebi_core::Arrangement;
|
||||||
|
pub use komorebi_core::Axis;
|
||||||
|
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;
|
||||||
|
|
||||||
|
use komorebi::DATA_DIR;
|
||||||
|
|
||||||
|
use std::io::BufReader;
|
||||||
|
use std::io::Read;
|
||||||
|
use std::io::Write;
|
||||||
|
use std::net::Shutdown;
|
||||||
|
pub use uds_windows::UnixListener;
|
||||||
|
use uds_windows::UnixStream;
|
||||||
|
|
||||||
|
const KOMOREBI: &str = "komorebi.sock";
|
||||||
|
|
||||||
|
pub fn send_message(message: &SocketMessage) -> std::io::Result<()> {
|
||||||
|
let socket = DATA_DIR.join(KOMOREBI);
|
||||||
|
let mut connected = false;
|
||||||
|
while !connected {
|
||||||
|
if let Ok(mut stream) = UnixStream::connect(&socket) {
|
||||||
|
connected = true;
|
||||||
|
stream.write_all(serde_json::to_string(message)?.as_bytes())?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
pub fn send_query(message: &SocketMessage) -> std::io::Result<String> {
|
||||||
|
let socket = DATA_DIR.join(KOMOREBI);
|
||||||
|
|
||||||
|
let mut stream = UnixStream::connect(socket)?;
|
||||||
|
stream.write_all(serde_json::to_string(message)?.as_bytes())?;
|
||||||
|
stream.shutdown(Shutdown::Write)?;
|
||||||
|
|
||||||
|
let mut reader = BufReader::new(stream);
|
||||||
|
let mut response = String::new();
|
||||||
|
reader.read_to_string(&mut response)?;
|
||||||
|
|
||||||
|
Ok(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn subscribe(name: &str) -> std::io::Result<UnixListener> {
|
||||||
|
let socket = DATA_DIR.join(name);
|
||||||
|
|
||||||
|
match std::fs::remove_file(&socket) {
|
||||||
|
Ok(()) => {}
|
||||||
|
Err(error) => match error.kind() {
|
||||||
|
std::io::ErrorKind::NotFound => {}
|
||||||
|
_ => {
|
||||||
|
return Err(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let listener = UnixListener::bind(&socket)?;
|
||||||
|
|
||||||
|
send_message(&SocketMessage::AddSubscriberSocket(name.to_string()))?;
|
||||||
|
|
||||||
|
Ok(listener)
|
||||||
|
}
|
||||||
@@ -170,7 +170,7 @@ lazy_static! {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
static ref DATA_DIR: PathBuf = dirs::data_local_dir().expect("there is no local data directory").join("komorebi");
|
pub static ref DATA_DIR: PathBuf = dirs::data_local_dir().expect("there is no local data directory").join("komorebi");
|
||||||
pub static ref AHK_EXE: String = {
|
pub static ref AHK_EXE: String = {
|
||||||
let mut ahk: String = String::from("autohotkey.exe");
|
let mut ahk: String = String::from("autohotkey.exe");
|
||||||
|
|
||||||
|
|||||||
@@ -227,7 +227,9 @@ impl TryFrom<u32> for WinEvent {
|
|||||||
EVENT_OBJECT_SELECTIONWITHIN => Ok(Self::ObjectSelectionWithin),
|
EVENT_OBJECT_SELECTIONWITHIN => Ok(Self::ObjectSelectionWithin),
|
||||||
EVENT_OBJECT_SHOW => Ok(Self::ObjectShow),
|
EVENT_OBJECT_SHOW => Ok(Self::ObjectShow),
|
||||||
EVENT_OBJECT_STATECHANGE => Ok(Self::ObjectStateChange),
|
EVENT_OBJECT_STATECHANGE => Ok(Self::ObjectStateChange),
|
||||||
EVENT_OBJECT_TEXTEDIT_CONVERSIONTARGETCHANGED => Ok(Self::ObjectTextEditConversionTargetChanged),
|
EVENT_OBJECT_TEXTEDIT_CONVERSIONTARGETCHANGED => {
|
||||||
|
Ok(Self::ObjectTextEditConversionTargetChanged)
|
||||||
|
}
|
||||||
EVENT_OBJECT_TEXTSELECTIONCHANGED => Ok(Self::ObjectTextSelectionChanged),
|
EVENT_OBJECT_TEXTSELECTIONCHANGED => Ok(Self::ObjectTextSelectionChanged),
|
||||||
EVENT_OBJECT_UNCLOAKED => Ok(Self::ObjectUncloaked),
|
EVENT_OBJECT_UNCLOAKED => Ok(Self::ObjectUncloaked),
|
||||||
EVENT_OBJECT_VALUECHANGE => Ok(Self::ObjectValueChange),
|
EVENT_OBJECT_VALUECHANGE => Ok(Self::ObjectValueChange),
|
||||||
@@ -272,4 +274,4 @@ impl TryFrom<u32> for WinEvent {
|
|||||||
_ => Err(()),
|
_ => Err(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user