Make opening a directory list its contents (#3118)

* Make opening a directory enter it.

Not sure if this change is wanted, but I'm not sure what else opening a directory could mean.
And I find myself accidentally using `open <dir>` to mean `enter <dir>`

* Add example to open directory

* Open dir should list it's contents

* Update example description and fix style
This commit is contained in:
Kenneth Cochran 2021-03-13 15:47:31 -06:00 committed by GitHub
parent c13fe83784
commit 2ace20fade
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 0 deletions

View File

@ -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<OutputStream, ShellError> {
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<OutputStream, ShellError> {
_,
) = 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)

View File

@ -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");
})
}