diff --git a/src/app.rs b/src/app.rs index f36c325..ab1d7ce 100644 --- a/src/app.rs +++ b/src/app.rs @@ -50,7 +50,8 @@ use slotmap::Key as SlotMapKey; use std::{ any::TypeId, collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque}, - env, fmt, fs, io, + env, + fmt, fs, io, num::NonZeroU16, path::{Path, PathBuf}, process, @@ -3487,15 +3488,39 @@ impl Application for App { } // Open the selected path in a new cosmic-files window. - NavMenuAction::OpenInNewWindow(entity) => { - if let Some(Location::Path(path)) = self.nav_model.data::(entity) { + NavMenuAction::OpenInNewWindow(entity) => 'open_in_new_window: { + if let Some(location) = self.nav_model.data::(entity) { match env::current_exe() { - Ok(exe) => match process::Command::new(&exe).arg(path).spawn() { - Ok(_child) => {} - Err(err) => { - log::error!("failed to execute {:?}: {}", exe, err); - } - }, + Ok(exe) => { + let mut command = process::Command::new(&exe); + match location { + Location::Path(path) => { + command.arg(path); + } + Location::Trash => { + command.arg("--trash"); + } + Location::Network(..) => { + command.arg("--network"); + } + Location::Recents => { + command.arg("--recents"); + } + _ => { + log::error!( + "unsupported location for open in new window: {:?}", + location + ); + break 'open_in_new_window; + } + }; + match command.spawn() { + Ok(_child) => {} + Err(err) => { + log::error!("failed to execute {:?}: {}", exe, err); + } + }; + } Err(err) => { log::error!("failed to get current executable path: {}", err); } diff --git a/src/lib.rs b/src/lib.rs index 093221b..aaa87d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,6 +97,10 @@ pub fn main() -> Result<(), Box> { continue; } else if &arg == "--trash" { Location::Trash + } else if &arg == "--recents" { + Location::Recents + } else if &arg == "--network" { + Location::Network("network:///".to_string(), fl!("networks")) } else { //TODO: support more URLs let path = match url::Url::parse(&arg) {