fix: open file with vscode

This commit is contained in:
GyDi 2023-04-02 11:19:48 +08:00
parent 728756289b
commit 0a33bb861e
No known key found for this signature in database
GPG Key ID: B28E790B95193457

View File

@ -2,7 +2,7 @@ use anyhow::{anyhow, bail, Context, Result};
use nanoid::nanoid; use nanoid::nanoid;
use serde::{de::DeserializeOwned, Serialize}; use serde::{de::DeserializeOwned, Serialize};
use serde_yaml::{Mapping, Value}; use serde_yaml::{Mapping, Value};
use std::{fs, path::PathBuf, process::Command, str::FromStr}; use std::{fs, path::PathBuf, str::FromStr};
/// read data from yaml as struct T /// read data from yaml as struct T
pub fn read_yaml<T: DeserializeOwned>(path: &PathBuf) -> Result<T> { pub fn read_yaml<T: DeserializeOwned>(path: &PathBuf) -> Result<T> {
@ -82,29 +82,18 @@ pub fn parse_str<T: FromStr>(target: &str, key: &str) -> Option<T> {
/// open file /// open file
/// use vscode by default /// use vscode by default
pub fn open_file(path: PathBuf) -> Result<()> { pub fn open_file(path: PathBuf) -> Result<()> {
#[cfg(target_os = "macos")]
let code = "Visual Studio Code";
#[cfg(not(target_os = "macos"))]
let code = "code";
// use vscode first // use vscode first
if let Ok(code) = which::which("code") { if let Err(err) = open::with(&path, code) {
let mut command = Command::new(&code); log::error!(target: "app", "failed to open file with VScode `{err}`");
// default open
#[cfg(target_os = "windows")]
{
use std::os::windows::process::CommandExt;
if let Err(err) = command.creation_flags(0x08000000).arg(&path).spawn() {
log::error!(target: "app", "failed to open with VScode `{err}`");
open::that(path)?;
}
}
#[cfg(not(target_os = "windows"))]
if let Err(err) = command.arg(&path).spawn() {
log::error!(target: "app", "failed to open with VScode `{err}`");
open::that(path)?; open::that(path)?;
} }
return Ok(());
}
open::that(path)?;
Ok(()) Ok(())
} }