diff --git a/src/cmd_line.rs b/src/cmd_line.rs index 94b94fb..ab6814f 100644 --- a/src/cmd_line.rs +++ b/src/cmd_line.rs @@ -22,6 +22,8 @@ pub struct CmdLineSettings { pub neovim_bin: Option, pub wayland_app_id: String, pub x11_wm_class: String, + // Disable open multiple files as tabs + pub no_tabs: bool, } impl Default for CmdLineSettings { @@ -45,6 +47,8 @@ impl Default for CmdLineSettings { neovim_bin: None, wayland_app_id: String::new(), x11_wm_class: String::new(), + // Disable open multiple files as tabs + no_tabs: false, } } } @@ -85,6 +89,11 @@ pub fn handle_command_line_arguments(args: Vec) -> Result<(), String> { .long("nofork") .help("Do not detach process from terminal"), ) + .arg( + Arg::new("no_tabs") + .long("notabs") + .help("Disable open multiple files as tabs"), + ) .arg( Arg::new("remote_tcp") .long("remote-tcp") @@ -148,12 +157,20 @@ pub fn handle_command_line_arguments(args: Vec) -> Result<(), String> { .values_of("neovim_args") .map(|opt| opt.map(|v| v.to_owned()).collect()) .unwrap_or_default(); - neovim_args.extend::>( - matches - .values_of("files_to_open") - .map(|opt| opt.map(|v| v.to_owned()).collect()) - .unwrap_or_default(), - ); + + let files_to_open: Vec = matches + .values_of("files_to_open") + .map(|opt| opt.map(|v| v.to_owned()).collect()) + .unwrap_or_default(); + + if files_to_open.len() > 1 + && !neovim_args.contains(&String::from("-p")) + && !matches.is_present("no_tabs") + { + neovim_args.push("-p".to_owned()); + } + + neovim_args.extend::>(files_to_open); /* * Integrate Environment Variables as Defaults to the command-line ones. @@ -197,6 +214,8 @@ pub fn handle_command_line_arguments(args: Vec) -> Result<(), String> { .map(|v| v.to_owned()) .or_else(|| std::env::var("NEOVIDE_X11_WM_CLASS").ok()) .unwrap_or_else(|| "neovide".to_owned()), + // Disable open multiple files as tabs + no_tabs: matches.is_present("no_tabs") || std::env::var("NEOVIDE_NO_TABS").is_ok(), }); Ok(()) }