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