From 6ef8ec0cdbb4315fae90fd84fad187f50a74e44c Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Thu, 10 Oct 2019 18:36:24 +0200 Subject: [PATCH] Add portable mode. Fix #81 --- src/context/mod.rs | 23 ++++++++++++++++------- src/main.rs | 1 - 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/context/mod.rs b/src/context/mod.rs index fdce4c8..c338de7 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -63,6 +63,18 @@ pub fn get_data_dir() -> PathBuf { } pub fn get_config_dir() -> PathBuf { + // Portable mode check + // Get the espanso executable path + let espanso_exe_path = std::env::current_exe().expect("Could not get espanso executable path"); + let exe_dir = espanso_exe_path.parent(); + if let Some(parent) = exe_dir { + let config_dir = parent.join(".espanso"); + if config_dir.exists() { + println!("PORTABLE MODE, using config folder: '{}'", config_dir.to_string_lossy()); + return config_dir; + } + } + // For compatibility purposes, check if the $HOME/.espanso directory is available let home_dir = dirs::home_dir().expect("Can't obtain the user home directory, terminating."); let legacy_espanso_dir = home_dir.join(".espanso"); @@ -86,13 +98,10 @@ const PACKAGES_FOLDER_NAME : &str = "packages"; pub fn get_package_dir() -> PathBuf { // Deprecated $HOME/.espanso/packages directory compatibility check - let home_dir = dirs::home_dir().expect("Can't obtain the user home directory, terminating."); - let legacy_espanso_dir = home_dir.join(".espanso"); - if legacy_espanso_dir.exists() { - let legacy_package_dir = legacy_espanso_dir.join(PACKAGES_FOLDER_NAME); - if legacy_package_dir.exists() { - return legacy_package_dir; - } + let config_dir = get_config_dir(); + let legacy_package_dir = config_dir.join(PACKAGES_FOLDER_NAME); + if legacy_package_dir.exists() { + return legacy_package_dir; } // New package location, starting from version v0.3.0 diff --git a/src/main.rs b/src/main.rs index e7ea97f..1ffb485 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,6 @@ extern crate lazy_static; use std::thread; use std::fs::{File, OpenOptions}; -use std::path::Path; use std::process::exit; use std::sync::mpsc; use std::sync::mpsc::Receiver;