First draft of edit-command on windows

This commit is contained in:
Federico Terzi 2020-02-26 21:24:02 +01:00
parent 0ee8ffbcef
commit a89438f3ba
2 changed files with 72 additions and 0 deletions

61
src/edit.rs Normal file
View File

@ -0,0 +1,61 @@
/*
* This file is part of espanso.
*
* Copyright (C) 2020 Federico Terzi
*
* espanso is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* espanso is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
*/
use crate::config::ConfigSet;
#[cfg(target_os = "linux")]
pub fn open_editor(config: &ConfigSet) -> bool {
// TODO
}
#[cfg(target_os = "macos")]
pub fn open_editor(config: &ConfigSet) -> bool {
// TODO
}
#[cfg(target_os = "windows")]
pub fn open_editor(config: &ConfigSet) -> bool {
use std::process::Command;
// Get the configuration file path
let file_path = crate::context::get_config_dir().join(crate::config::DEFAULT_CONFIG_FILE_NAME);
// Start the editor and wait for its termination
let status = Command::new("cmd")
.arg("/C")
.arg("start")
.arg("/wait")
.arg("C:\\Windows\\System32\\notepad.exe")
.arg(file_path)
.spawn();
if let Ok(mut child) = status {
// Wait for the user to edit the configuration
child.wait();
// TODO: instead of waiting, a file watcher should be started to detect file changes and
// after each of them a reload should be issued
println!("Ok");
true
}else{
println!("Error: could not start editor.");
false
}
}

View File

@ -46,6 +46,7 @@ use crate::package::default::DefaultPackageManager;
use crate::package::{PackageManager, InstallResult, UpdateResult, RemoveResult}; use crate::package::{PackageManager, InstallResult, UpdateResult, RemoveResult};
mod ui; mod ui;
mod edit;
mod event; mod event;
mod check; mod check;
mod utils; mod utils;
@ -96,6 +97,8 @@ fn main() {
.subcommand(SubCommand::with_name("toggle") .subcommand(SubCommand::with_name("toggle")
.about("Toggle the status of the espanso replacement engine.")) .about("Toggle the status of the espanso replacement engine."))
) )
.subcommand(SubCommand::with_name("edit")
.about("Open the default text editor to edit config files and reload them automatically when exiting"))
.subcommand(SubCommand::with_name("dump") .subcommand(SubCommand::with_name("dump")
.about("Prints all current configuration options.")) .about("Prints all current configuration options."))
.subcommand(SubCommand::with_name("detect") .subcommand(SubCommand::with_name("detect")
@ -163,6 +166,11 @@ fn main() {
return; return;
} }
if matches.subcommand_matches("edit").is_some() {
edit_main(config_set);
return;
}
if matches.subcommand_matches("dump").is_some() { if matches.subcommand_matches("dump").is_some() {
println!("{:#?}", config_set); println!("{:#?}", config_set);
return; return;
@ -873,6 +881,9 @@ fn path_main(_config_set: ConfigSet, matches: &ArgMatches) {
} }
} }
fn edit_main(config_set: ConfigSet) {
crate::edit::open_editor(&config_set);
}
fn acquire_lock() -> Option<File> { fn acquire_lock() -> Option<File> {
let espanso_dir = context::get_data_dir(); let espanso_dir = context::get_data_dir();