feat: support copy CMD & PowerShell proxy env

This commit is contained in:
keiko233 2023-11-09 09:58:17 +08:00
parent bef553c9ae
commit 6e9798d596
2 changed files with 27 additions and 6 deletions

View File

@ -52,8 +52,16 @@ impl Tray {
))
.add_item(CustomMenuItem::new("tun_mode", t!("TUN Mode", "Tun 模式")))
.add_item(CustomMenuItem::new(
"copy_env",
t!("Copy Env", "复制环境变量"),
"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)"),
))
.add_submenu(SystemTraySubmenu::new(
t!("Open Dir", "打开目录"),
@ -149,7 +157,11 @@ impl Tray {
"open_window" => resolve::create_window(app_handle),
"system_proxy" => feat::toggle_system_proxy(),
"tun_mode" => feat::toggle_tun_mode(),
"copy_env" => feat::copy_clash_env(),
"copy_env_sh" => feat::copy_clash_env("sh"),
#[cfg(target_os = "windows")]
"copy_env_cmd" => feat::copy_clash_env("cmd"),
#[cfg(target_os = "windows")]
"copy_env_ps" => feat::copy_clash_env("ps"),
"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()),

View File

@ -332,10 +332,19 @@ async fn update_core_config() -> Result<()> {
}
/// copy env variable
pub fn copy_clash_env() {
pub fn copy_clash_env(option: &str) {
let port = { Config::clash().data().get_client_info().port };
let text = format!("export https_proxy=http://127.0.0.1:{port} http_proxy=http://127.0.0.1:{port} all_proxy=socks5://127.0.0.1:{port}");
let sh = format!("export https_proxy=http://127.0.0.1:{port} http_proxy=http://127.0.0.1:{port} all_proxy=socks5://127.0.0.1:{port}");
let cmd: String = format!("set http_proxy=http://127.0.0.1:{port} \n set https_proxy=http://127.0.0.1:{port}");
let ps: String = format!("$env:HTTP_PROXY=\"http://127.0.0.1:{port}\"; $env:HTTPS_PROXY=\"http://127.0.0.1:{port}\"");
let mut cliboard = Clipboard::new();
cliboard.write_text(text);
match option {
"sh" => cliboard.write_text(sh),
"cmd" => cliboard.write_text(cmd),
"ps" => cliboard.write_text(ps),
_ => log::error!(target: "app", "copy_clash_env: Invalid option! {option}"),
}
}