mirror of
https://github.com/nushell/nushell.git
synced 2025-05-01 00:24:29 +02:00
commit
758fce8ae3
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -499,6 +499,7 @@ dependencies = [
|
|||||||
"glob",
|
"glob",
|
||||||
"nu-engine",
|
"nu-engine",
|
||||||
"nu-json",
|
"nu-json",
|
||||||
|
"nu-path",
|
||||||
"nu-protocol",
|
"nu-protocol",
|
||||||
"nu-table",
|
"nu-table",
|
||||||
"sysinfo",
|
"sysinfo",
|
||||||
|
@ -8,6 +8,7 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
nu-engine = { path = "../nu-engine" }
|
nu-engine = { path = "../nu-engine" }
|
||||||
nu-json = { path = "../nu-json" }
|
nu-json = { path = "../nu-json" }
|
||||||
|
nu-path = { path = "../nu-path" }
|
||||||
nu-protocol = { path = "../nu-protocol" }
|
nu-protocol = { path = "../nu-protocol" }
|
||||||
nu-table = { path = "../nu-table" }
|
nu-table = { path = "../nu-table" }
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ pub fn create_default_context() -> Rc<RefCell<EngineState>> {
|
|||||||
working_set.add_decl(Box::new(Alias));
|
working_set.add_decl(Box::new(Alias));
|
||||||
working_set.add_decl(Box::new(Benchmark));
|
working_set.add_decl(Box::new(Benchmark));
|
||||||
working_set.add_decl(Box::new(BuildString));
|
working_set.add_decl(Box::new(BuildString));
|
||||||
|
working_set.add_decl(Box::new(Cd));
|
||||||
working_set.add_decl(Box::new(Def));
|
working_set.add_decl(Box::new(Def));
|
||||||
working_set.add_decl(Box::new(Do));
|
working_set.add_decl(Box::new(Do));
|
||||||
working_set.add_decl(Box::new(Each));
|
working_set.add_decl(Box::new(Each));
|
||||||
|
46
crates/nu-command/src/filesystem/cd.rs
Normal file
46
crates/nu-command/src/filesystem/cd.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
use nu_engine::CallExt;
|
||||||
|
use nu_protocol::ast::Call;
|
||||||
|
use nu_protocol::engine::{Command, EvaluationContext};
|
||||||
|
use nu_protocol::{Signature, SyntaxShape, Value};
|
||||||
|
|
||||||
|
pub struct Cd;
|
||||||
|
|
||||||
|
impl Command for Cd {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"cd"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Change directory."
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> nu_protocol::Signature {
|
||||||
|
Signature::build("cd").optional("path", SyntaxShape::FilePath, "the path to change to")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
&self,
|
||||||
|
context: &EvaluationContext,
|
||||||
|
call: &Call,
|
||||||
|
_input: Value,
|
||||||
|
) -> Result<nu_protocol::Value, nu_protocol::ShellError> {
|
||||||
|
let path: Option<String> = call.opt(context, 0)?;
|
||||||
|
|
||||||
|
let path = match path {
|
||||||
|
Some(path) => {
|
||||||
|
let path = nu_path::expand_tilde(path);
|
||||||
|
path.to_string_lossy().to_string()
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
let path = nu_path::expand_tilde("~");
|
||||||
|
path.to_string_lossy().to_string()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let _ = std::env::set_current_dir(&path);
|
||||||
|
|
||||||
|
//FIXME: this only changes the current scope, but instead this environment variable
|
||||||
|
//should probably be a block that loads the information from the state in the overlay
|
||||||
|
context.add_env_var("PWD".into(), path);
|
||||||
|
Ok(Value::Nothing { span: call.head })
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
mod cd;
|
||||||
mod ls;
|
mod ls;
|
||||||
|
|
||||||
|
pub use cd::Cd;
|
||||||
pub use ls::Ls;
|
pub use ls::Ls;
|
||||||
|
@ -86,7 +86,7 @@ impl SyntaxShape {
|
|||||||
SyntaxShape::Custom(custom, _) => custom.to_type(),
|
SyntaxShape::Custom(custom, _) => custom.to_type(),
|
||||||
SyntaxShape::Duration => Type::Duration,
|
SyntaxShape::Duration => Type::Duration,
|
||||||
SyntaxShape::Expression => Type::Unknown,
|
SyntaxShape::Expression => Type::Unknown,
|
||||||
SyntaxShape::FilePath => Type::FilePath,
|
SyntaxShape::FilePath => Type::String,
|
||||||
SyntaxShape::Filesize => Type::Filesize,
|
SyntaxShape::Filesize => Type::Filesize,
|
||||||
SyntaxShape::FullCellPath => Type::Unknown,
|
SyntaxShape::FullCellPath => Type::Unknown,
|
||||||
SyntaxShape::GlobPattern => Type::String,
|
SyntaxShape::GlobPattern => Type::String,
|
||||||
|
Loading…
Reference in New Issue
Block a user