forked from extern/nushell
Abbreviate ls by default, add --full flag
This commit is contained in:
parent
9c41f581a9
commit
2bb03d9813
@ -8,6 +8,7 @@ pub struct LS;
|
||||
#[derive(Deserialize)]
|
||||
pub struct LsArgs {
|
||||
path: Option<Tagged<PathBuf>>,
|
||||
full: bool,
|
||||
}
|
||||
|
||||
impl WholeStreamCommand for LS {
|
||||
@ -16,11 +17,13 @@ impl WholeStreamCommand for LS {
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("ls").optional(
|
||||
"path",
|
||||
SyntaxShape::Pattern,
|
||||
"a path to get the directory contents from",
|
||||
)
|
||||
Signature::build("ls")
|
||||
.optional(
|
||||
"path",
|
||||
SyntaxShape::Pattern,
|
||||
"a path to get the directory contents from",
|
||||
)
|
||||
.switch("full", "list all available columns for each entry")
|
||||
}
|
||||
|
||||
fn usage(&self) -> &str {
|
||||
@ -37,6 +40,6 @@ impl WholeStreamCommand for LS {
|
||||
}
|
||||
}
|
||||
|
||||
fn ls(LsArgs { path }: LsArgs, context: RunnableContext) -> Result<OutputStream, ShellError> {
|
||||
context.shell_manager.ls(path, &context)
|
||||
fn ls(LsArgs { path, full }: LsArgs, context: RunnableContext) -> Result<OutputStream, ShellError> {
|
||||
context.shell_manager.ls(path, &context, full)
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ pub(crate) fn dir_entry_dict(
|
||||
filename: &std::path::Path,
|
||||
metadata: &std::fs::Metadata,
|
||||
tag: impl Into<Tag>,
|
||||
full: bool,
|
||||
) -> Result<Tagged<Value>, ShellError> {
|
||||
let mut dict = TaggedDictBuilder::new(tag);
|
||||
dict.insert("name", Value::string(filename.to_string_lossy()));
|
||||
@ -26,10 +27,19 @@ pub(crate) fn dir_entry_dict(
|
||||
};
|
||||
|
||||
dict.insert("type", Value::string(format!("{:?}", kind)));
|
||||
dict.insert(
|
||||
"readonly",
|
||||
Value::boolean(metadata.permissions().readonly()),
|
||||
);
|
||||
|
||||
if full {
|
||||
dict.insert(
|
||||
"readonly",
|
||||
Value::boolean(metadata.permissions().readonly()),
|
||||
);
|
||||
|
||||
#[cfg(unix)]
|
||||
{
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
dict.insert("mode", Value::int(metadata.permissions().mode()));
|
||||
}
|
||||
}
|
||||
|
||||
dict.insert("size", Value::bytes(metadata.len() as u64));
|
||||
|
||||
|
@ -86,6 +86,7 @@ impl Shell for FilesystemShell {
|
||||
&self,
|
||||
pattern: Option<Tagged<PathBuf>>,
|
||||
context: &RunnableContext,
|
||||
full: bool,
|
||||
) -> Result<OutputStream, ShellError> {
|
||||
let cwd = self.path();
|
||||
let mut full_path = PathBuf::from(self.path());
|
||||
@ -136,7 +137,7 @@ impl Shell for FilesystemShell {
|
||||
Path::new(&filepath)
|
||||
};
|
||||
|
||||
let value = dir_entry_dict(filename, &metadata, &name_tag)?;
|
||||
let value = dir_entry_dict(filename, &metadata, &name_tag, full)?;
|
||||
yield ReturnSuccess::value(value);
|
||||
}
|
||||
}
|
||||
@ -175,7 +176,7 @@ impl Shell for FilesystemShell {
|
||||
Path::new(&entry)
|
||||
};
|
||||
|
||||
if let Ok(value) = dir_entry_dict(filename, &metadata, &name_tag) {
|
||||
if let Ok(value) = dir_entry_dict(filename, &metadata, &name_tag, full) {
|
||||
yield ReturnSuccess::value(value);
|
||||
}
|
||||
}
|
||||
|
@ -129,6 +129,7 @@ impl Shell for HelpShell {
|
||||
&self,
|
||||
_pattern: Option<Tagged<PathBuf>>,
|
||||
_context: &RunnableContext,
|
||||
_full: bool,
|
||||
) -> Result<OutputStream, ShellError> {
|
||||
Ok(self
|
||||
.commands()
|
||||
|
@ -16,6 +16,7 @@ pub trait Shell: std::fmt::Debug {
|
||||
&self,
|
||||
pattern: Option<Tagged<PathBuf>>,
|
||||
context: &RunnableContext,
|
||||
full: bool,
|
||||
) -> Result<OutputStream, ShellError>;
|
||||
fn cd(&self, args: EvaluatedWholeStreamCommandArgs) -> Result<OutputStream, ShellError>;
|
||||
fn cp(&self, args: CopyArgs, name: Tag, path: &str) -> Result<OutputStream, ShellError>;
|
||||
|
@ -127,10 +127,11 @@ impl ShellManager {
|
||||
&self,
|
||||
path: Option<Tagged<PathBuf>>,
|
||||
context: &RunnableContext,
|
||||
full: bool,
|
||||
) -> Result<OutputStream, ShellError> {
|
||||
let env = self.shells.lock().unwrap();
|
||||
|
||||
env[self.current_shell()].ls(path, context)
|
||||
env[self.current_shell()].ls(path, context, full)
|
||||
}
|
||||
|
||||
pub fn cd(&self, args: EvaluatedWholeStreamCommandArgs) -> Result<OutputStream, ShellError> {
|
||||
|
@ -90,6 +90,7 @@ impl Shell for ValueShell {
|
||||
&self,
|
||||
target: Option<Tagged<PathBuf>>,
|
||||
context: &RunnableContext,
|
||||
_full: bool,
|
||||
) -> Result<OutputStream, ShellError> {
|
||||
let mut full_path = PathBuf::from(self.path());
|
||||
let name_tag = context.name.clone();
|
||||
|
Loading…
Reference in New Issue
Block a user