diff --git a/Cargo.lock b/Cargo.lock index 64452ee9..05fa1739 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,9 +84,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "3.2.4" +version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d20de3739b4fb45a17837824f40aa1769cc7655d7a83e68739a77fe7b30c87a" +checksum = "d53da17d37dba964b9b3ecb5c5a1f193a2762c700e6829201e645b9381c99dc7" dependencies = [ "atty", "bitflags", @@ -102,9 +102,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.4" +version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026baf08b89ffbd332836002ec9378ef0e69648cbfadd68af7cd398ca5bf98f7" +checksum = "c11d40217d16aee8508cc8e5fde8b4ff24639758608e5374e731b53f85749fb9" dependencies = [ "heck", "proc-macro-error", @@ -157,9 +157,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -178,26 +178,26 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" +checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a" [[package]] name = "either" @@ -363,9 +363,9 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "heck" @@ -400,9 +400,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" +checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3" dependencies = [ "autocfg", "hashbrown", @@ -858,9 +858,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "f53dc8cf16a769a6f677e09e7ff2cd4be1ea0f48754aac39520536962011de0d" dependencies = [ "proc-macro2", ] @@ -1121,9 +1121,9 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.24.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9550962e7cf70d9980392878dfaf1dcc3ece024f4cf3bf3c46b978d0bad61d6c" +checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" dependencies = [ "heck", "proc-macro2", @@ -1134,9 +1134,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.96" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", diff --git a/README.md b/README.md index 26913ae7..d1c40ccb 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,26 @@ the `AutoHotKey64.exe` executable for AutoHotKey v2 is in your `Path`. If both ` exist in your home directory, only `komorebi.ahk` will be loaded. An example of an AutoHotKey v2 configuration file for _komorebi_ can be found [here](https://gist.github.com/crosstyan/dafacc0778dabf693ce9236c57b201cd). +#### Using Different AHK Executables + +The preferred way to install AutoHotKey for use with `komorebi` is to install it via `scoop`: + +```powershell +scoop install autohotkey +``` + +If you install AutoHotKey using a different method, the name of the executable file may differ from the name given by +`scoop`, and thus what is expected by default in `komorebi`. + +You may override the executables that `komorebi` looks for to launch and reload `komorebi.ahk` configuration files using +by setting one of the following two environment variables depending on which version of AutoHotKey you wish to use: + +- `$Env:KOMOREBI_AHK_V1_EXE` +- `$Env:KOMOREBI_AHK_V2_EXE` + +Please keep in mind that even when setting a custom executable name using these environment variables, the executables +are still required to be in your `Path`. + ### Common First-Time Tips #### Generating Common Application-Specific Configurations diff --git a/komorebi/src/main.rs b/komorebi/src/main.rs index db30eb79..0664b276 100644 --- a/komorebi/src/main.rs +++ b/komorebi/src/main.rs @@ -118,6 +118,28 @@ lazy_static! { dirs::home_dir().expect("there is no home directory") } }; + static ref AHK_V1_EXE: String = { + let mut ahk_v1: String = String::from("autohotkey.exe"); + + if let Ok(komorebi_ahk_v1_exe) = std::env::var("KOMOREBI_AHK_V1_EXE") { + if which(&komorebi_ahk_v1_exe).is_ok() { + ahk_v1 = komorebi_ahk_v1_exe; + } + } + + ahk_v1 + }; + static ref AHK_V2_EXE: String = { + let mut ahk_v2: String = String::from("AutoHotkey64.exe"); + + if let Ok(komorebi_ahk_v2_exe) = std::env::var("KOMOREBI_AHK_V2_EXE") { + if which(&komorebi_ahk_v2_exe).is_ok() { + ahk_v2 = komorebi_ahk_v2_exe; + } + } + + ahk_v2 + }; } pub static CUSTOM_FFM: AtomicBool = AtomicBool::new(false); @@ -196,7 +218,7 @@ pub fn load_configuration() -> Result<()> { let mut config_v2 = home; config_v2.push("komorebi.ahk2"); - if config_v1.exists() && which("autohotkey.exe").is_ok() { + if config_v1.exists() && which(&*AHK_V1_EXE).is_ok() { tracing::info!( "loading configuration file: {}", config_v1 @@ -208,7 +230,7 @@ pub fn load_configuration() -> Result<()> { Command::new("autohotkey.exe") .arg(config_v1.as_os_str()) .output()?; - } else if config_v2.exists() && which("AutoHotkey64.exe").is_ok() { + } else if config_v2.exists() && which(&*AHK_V2_EXE).is_ok() { tracing::info!( "loading configuration file: {}", config_v2