Improve modulo app bundle generation. Fix #430
This commit is contained in:
parent
e94567b37b
commit
fbfafe3564
|
@ -10,7 +10,7 @@ edition = "2018"
|
||||||
build="build.rs"
|
build="build.rs"
|
||||||
|
|
||||||
[modulo]
|
[modulo]
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
widestring = "0.4.0"
|
widestring = "0.4.0"
|
||||||
|
|
|
@ -1,10 +1,25 @@
|
||||||
use log::info;
|
use log::info;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::os::unix::fs::symlink;
|
use std::os::unix::fs::symlink;
|
||||||
|
|
||||||
const MODULO_APP_BUNDLE_NAME: &str = "Modulo.app";
|
const MODULO_APP_BUNDLE_NAME: &str = "Modulo.app";
|
||||||
const MODULO_APP_BUNDLE_PLIST_CONTENT: &'static str = include_str!("../../res/mac/modulo.plist");
|
const MODULO_APP_BUNDLE_PLIST_CONTENT: &'static str = include_str!("../../res/mac/modulo.plist");
|
||||||
|
|
||||||
pub fn generate_modulo_app_bundle(modulo_path: &str) -> Result<PathBuf, std::io::Error> {
|
pub fn generate_modulo_app_bundle(modulo_path: &str) -> Result<PathBuf, std::io::Error> {
|
||||||
|
let modulo_pathbuf = PathBuf::from(modulo_path);
|
||||||
|
let modulo_path: String = if !modulo_pathbuf.exists() {
|
||||||
|
// If modulo was taken from the PATH, we need to calculate the absolute path
|
||||||
|
// To do so, we use the `which` command
|
||||||
|
let output = std::process::Command::new("which").arg("modulo").output().expect("unable to call 'which' command to determine modulo's full path");
|
||||||
|
let path = String::from_utf8_lossy(output.stdout.as_slice());
|
||||||
|
let path = path.trim();
|
||||||
|
|
||||||
|
info!("Detected modulo's full path: {:?}", &path);
|
||||||
|
path.to_string()
|
||||||
|
}else{
|
||||||
|
modulo_path.to_owned()
|
||||||
|
};
|
||||||
|
|
||||||
let data_dir = crate::context::get_data_dir();
|
let data_dir = crate::context::get_data_dir();
|
||||||
|
|
||||||
let modulo_app_dir = data_dir.join(MODULO_APP_BUNDLE_NAME);
|
let modulo_app_dir = data_dir.join(MODULO_APP_BUNDLE_NAME);
|
||||||
|
@ -24,7 +39,7 @@ pub fn generate_modulo_app_bundle(modulo_path: &str) -> Result<PathBuf, std::io:
|
||||||
std::fs::create_dir(&macos_dir)?;
|
std::fs::create_dir(&macos_dir)?;
|
||||||
|
|
||||||
// Generate the Plist file
|
// Generate the Plist file
|
||||||
let plist_content = MODULO_APP_BUNDLE_PLIST_CONTENT.replace("{{{modulo_path}}}", modulo_path);
|
let plist_content = MODULO_APP_BUNDLE_PLIST_CONTENT.replace("{{{modulo_path}}}", &modulo_path);
|
||||||
let plist_file = contents_dir.join("Info.plist");
|
let plist_file = contents_dir.join("Info.plist");
|
||||||
std::fs::write(plist_file, plist_content)?;
|
std::fs::write(plist_file, plist_content)?;
|
||||||
|
|
||||||
|
|
|
@ -44,16 +44,19 @@ impl ModuloManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: explain why
|
if let Some(ref path) = modulo_path {
|
||||||
#[cfg(target_os = "macos")]
|
info!("Using modulo at {:?}", path);
|
||||||
{
|
|
||||||
modulo_path = generate_modulo_app_bundle(&modulo_path).expect("unable to generate modulo app stub")
|
|
||||||
.to_string_lossy().to_string();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if let Some(ref modulo_path) = modulo_path {
|
// MacOS specific remark
|
||||||
info!("Using modulo at {:?}", modulo_path);
|
// In order to give modulo the focus when spawning a form, modulo has to be
|
||||||
|
// wrapped inside an application bundle. Therefore, we generate a bundle
|
||||||
|
// at startup.
|
||||||
|
// See issue: https://github.com/federico-terzi/espanso/issues/430
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
{
|
||||||
|
modulo_path = Some(mac::generate_modulo_app_bundle(path).expect("unable to generate modulo app stub")
|
||||||
|
.to_string_lossy().to_string());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Self { modulo_path }
|
Self { modulo_path }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user