diff --git a/crates/nu-command/src/commands/open.rs b/crates/nu-command/src/commands/open.rs index 27e3d8dcbb..62b3c7f080 100644 --- a/crates/nu-command/src/commands/open.rs +++ b/crates/nu-command/src/commands/open.rs @@ -74,6 +74,11 @@ documentation link at https://docs.rs/encoding_rs/0.8.28/encoding_rs/#statics"# example: "open file.csv --encoding iso-8859-1 | from csv", result: None, }, + Example { + description: "Lists the contents of a directory (identical to `ls ../projectB`)", + example: "open ../projectB", + result: None, + }, ] } } @@ -99,6 +104,8 @@ async fn open(args: CommandArgs) -> Result { let scope = args.scope.clone(); let cwd = PathBuf::from(args.shell_manager.path()); let shell_manager = args.shell_manager.clone(); + let name = args.call_info.name_tag.clone(); + let ctrl_c = args.ctrl_c.clone(); let ( OpenArgs { @@ -109,6 +116,17 @@ async fn open(args: CommandArgs) -> Result { _, ) = args.process().await?; + if path.is_dir() { + let args = nu_engine::shell::LsArgs { + path: Some(path), + all: false, + long: false, + short_names: false, + du: false, + }; + return shell_manager.ls(args, name, ctrl_c); + } + // TODO: Remove once Streams are supported everywhere! // As a short term workaround for getting AutoConvert and Bat functionality (Those don't currently support Streams) diff --git a/crates/nu-command/tests/commands/open.rs b/crates/nu-command/tests/commands/open.rs index 6f39b0772f..7c95a8005f 100644 --- a/crates/nu-command/tests/commands/open.rs +++ b/crates/nu-command/tests/commands/open.rs @@ -1,3 +1,4 @@ +use nu_test_support::fs::Stub::EmptyFile; use nu_test_support::fs::Stub::FileWithContentToBeTrimmed; use nu_test_support::playground::Playground; use nu_test_support::{nu, pipeline}; @@ -230,3 +231,24 @@ fn errors_if_file_not_found() { expected ); } + +#[test] +fn open_dir_is_ls() { + Playground::setup("open_dir", |dirs, sandbox| { + sandbox.with_files(vec![ + EmptyFile("yehuda.txt"), + EmptyFile("jonathan.txt"), + EmptyFile("andres.txt"), + ]); + + let actual = nu!( + cwd: dirs.test(), pipeline( + r#" + open . + | count + "# + )); + + assert_eq!(actual.out, "3"); + }) +}