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"
|
||||
|
||||
[modulo]
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
|
||||
[dependencies]
|
||||
widestring = "0.4.0"
|
||||
|
|
|
@ -1,10 +1,25 @@
|
|||
use log::info;
|
||||
use std::path::PathBuf;
|
||||
use std::os::unix::fs::symlink;
|
||||
|
||||
const MODULO_APP_BUNDLE_NAME: &str = "Modulo.app";
|
||||
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> {
|
||||
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 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)?;
|
||||
|
||||
// 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");
|
||||
std::fs::write(plist_file, plist_content)?;
|
||||
|
||||
|
|
|
@ -44,16 +44,19 @@ impl ModuloManager {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: explain why
|
||||
#[cfg(target_os = "macos")]
|
||||
{
|
||||
modulo_path = generate_modulo_app_bundle(&modulo_path).expect("unable to generate modulo app stub")
|
||||
.to_string_lossy().to_string();
|
||||
}
|
||||
|
||||
if let Some(ref path) = modulo_path {
|
||||
info!("Using modulo at {:?}", path);
|
||||
|
||||
if let Some(ref modulo_path) = modulo_path {
|
||||
info!("Using modulo at {:?}", modulo_path);
|
||||
// MacOS specific remark
|
||||
// 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 }
|
||||
|
|
Loading…
Reference in New Issue
Block a user