diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 10a00e8a..0c7efaaf 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -26,6 +26,9 @@ pub struct IVerge { /// tray click event pub tray_event: Option, + /// copy env type + pub env_type: Option, + /// enable traffic graph default is true pub traffic_graph: Option, @@ -133,6 +136,10 @@ impl IVerge { clash_core: Some("clash-meta".into()), language: Some("zh".into()), theme_mode: Some("system".into()), + #[cfg(not(target_os = "windows"))] + env_type: Some("bash".into()), + #[cfg(target_os = "windows")] + env_type: Some("powershell".into()), theme_blur: Some(false), traffic_graph: Some(true), enable_memory_usage: Some(true), @@ -172,6 +179,7 @@ impl IVerge { patch!(theme_mode); patch!(theme_blur); patch!(tray_event); + patch!(env_type); patch!(traffic_graph); patch!(enable_memory_usage); diff --git a/src-tauri/src/core/tray.rs b/src-tauri/src/core/tray.rs index 6838a3d2..456c1234 100644 --- a/src-tauri/src/core/tray.rs +++ b/src-tauri/src/core/tray.rs @@ -52,16 +52,8 @@ impl Tray { )) .add_item(CustomMenuItem::new("tun_mode", t!("TUN Mode", "Tun 模式"))) .add_item(CustomMenuItem::new( - "copy_env_sh", - t!("Copy Env (sh)", "复制环境变量(sh)"), - )) - .add_item(CustomMenuItem::new( - "copy_env_cmd", - t!("Copy Env (CMD)", "复制环境变量(CMD)"), - )) - .add_item(CustomMenuItem::new( - "copy_env_ps", - t!("Copy Env (PS)", "复制环境变量(PS)"), + "copy_env", + t!("Copy Env", "复制环境变量"), )) .add_submenu(SystemTraySubmenu::new( t!("Open Dir", "打开目录"), @@ -204,11 +196,7 @@ impl Tray { "open_window" => resolve::create_window(app_handle), "system_proxy" => feat::toggle_system_proxy(), "tun_mode" => feat::toggle_tun_mode(), - "copy_env_sh" => feat::copy_clash_env(app_handle, "sh"), - #[cfg(target_os = "windows")] - "copy_env_cmd" => feat::copy_clash_env(app_handle, "cmd"), - #[cfg(target_os = "windows")] - "copy_env_ps" => feat::copy_clash_env(app_handle, "ps"), + "copy_env" => feat::copy_clash_env(app_handle), "open_app_dir" => crate::log_err!(cmds::open_app_dir()), "open_core_dir" => crate::log_err!(cmds::open_core_dir()), "open_logs_dir" => crate::log_err!(cmds::open_logs_dir()), diff --git a/src-tauri/src/feat.rs b/src-tauri/src/feat.rs index 1ff8d15c..78bdac77 100644 --- a/src-tauri/src/feat.rs +++ b/src-tauri/src/feat.rs @@ -337,7 +337,7 @@ async fn update_core_config() -> Result<()> { } /// copy env variable -pub fn copy_clash_env(app_handle: &AppHandle, option: &str) { +pub fn copy_clash_env(app_handle: &AppHandle) { let port = { Config::verge().latest().verge_mixed_port.unwrap_or(7897) }; let http_proxy = format!("http://127.0.0.1:{}", port); let socks5_proxy = format!("socks5://127.0.0.1:{}", port); @@ -346,12 +346,25 @@ pub fn copy_clash_env(app_handle: &AppHandle, option: &str) { format!("export https_proxy={http_proxy} http_proxy={http_proxy} all_proxy={socks5_proxy}"); let cmd: String = format!("set http_proxy={http_proxy} \n set https_proxy={http_proxy}"); let ps: String = format!("$env:HTTP_PROXY=\"{http_proxy}\"; $env:HTTPS_PROXY=\"{http_proxy}\""); + let mut cliboard = app_handle.clipboard_manager(); - match option { - "sh" => cliboard.write_text(sh).unwrap_or_default(), + let env_type = { Config::verge().latest().env_type.clone() }; + let env_type = match env_type { + Some(env_type) => env_type, + None => { + #[cfg(not(target_os = "windows"))] + let default = "bash"; + #[cfg(target_os = "windows")] + let default = "powershell"; + + default.to_string() + } + }; + match env_type.as_str() { + "bash" => cliboard.write_text(sh).unwrap_or_default(), "cmd" => cliboard.write_text(cmd).unwrap_or_default(), - "ps" => cliboard.write_text(ps).unwrap_or_default(), - _ => log::error!(target: "app", "copy_clash_env: Invalid option! {option}"), + "powershell" => cliboard.write_text(ps).unwrap_or_default(), + _ => log::error!(target: "app", "copy_clash_env: Invalid env type! {env_type}"), }; } diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx index 11e367c8..b529e066 100644 --- a/src/components/setting/setting-verge.tsx +++ b/src/components/setting/setting-verge.tsx @@ -29,7 +29,7 @@ const SettingVerge = ({ onError }: Props) => { const { t } = useTranslation(); const { verge, patchVerge, mutateVerge } = useVerge(); - const { theme_mode, language, tray_event } = verge ?? {}; + const { theme_mode, language, tray_event, env_type } = verge ?? {}; const configRef = useRef(null); const hotkeyRef = useRef(null); const miscRef = useRef(null); @@ -109,6 +109,22 @@ const SettingVerge = ({ onError }: Props) => { )} + + e.target.value} + onChange={(e) => onChangeData({ env_type: e })} + onGuard={(e) => patchVerge({ env_type: e })} + > + + + +