mirror of
https://github.com/nushell/nushell
synced 2024-12-28 14:03:09 +00:00
Some code refactor for shells related commands (#6226)
This commit is contained in:
parent
3b809b38e8
commit
606547ecb4
7 changed files with 40 additions and 83 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
use super::{get_current_shell, get_shells};
|
||||||
use nu_engine::{current_dir, CallExt};
|
use nu_engine::{current_dir, CallExt};
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -62,21 +63,8 @@ impl Command for Enter {
|
||||||
span: call.head,
|
span: call.head,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let mut shells = get_shells(engine_state, stack, cwd);
|
||||||
let mut shells = if let Some(v) = shells {
|
let mut current_shell = get_current_shell(engine_state, stack);
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
|
||||||
let mut current_shell = if let Some(v) = current_shell {
|
|
||||||
v.as_integer().unwrap_or_default() as usize
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
if current_shell + 1 > shells.len() {
|
if current_shell + 1 > shells.len() {
|
||||||
shells.push(new_path.clone());
|
shells.push(new_path.clone());
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use super::{get_current_shell, get_shells};
|
||||||
use nu_engine::{current_dir, CallExt};
|
use nu_engine::{current_dir, CallExt};
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -57,21 +58,8 @@ impl Command for Exit {
|
||||||
span: call.head,
|
span: call.head,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let mut shells = get_shells(engine_state, stack, cwd);
|
||||||
let mut shells = if let Some(v) = shells {
|
let mut current_shell = get_current_shell(engine_state, stack);
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
|
||||||
let mut current_shell = if let Some(v) = current_shell {
|
|
||||||
v.as_integer().unwrap_or_default() as usize
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
shells.remove(current_shell);
|
shells.remove(current_shell);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use super::get_shells;
|
||||||
use nu_engine::{current_dir, CallExt};
|
use nu_engine::{current_dir, CallExt};
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -43,14 +44,7 @@ impl Command for GotoShell {
|
||||||
span: call.head,
|
span: call.head,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let shells = get_shells(engine_state, stack, cwd);
|
||||||
let shells = if let Some(v) = shells {
|
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let new_path = if let Some(v) = shells.get(new_shell.item as usize) {
|
let new_path = if let Some(v) = shells.get(new_shell.item as usize) {
|
||||||
v.clone()
|
v.clone()
|
||||||
|
|
|
@ -9,5 +9,28 @@ pub use enter::Enter;
|
||||||
pub use exit::Exit;
|
pub use exit::Exit;
|
||||||
pub use g::GotoShell;
|
pub use g::GotoShell;
|
||||||
pub use n::NextShell;
|
pub use n::NextShell;
|
||||||
|
use nu_protocol::engine::{EngineState, Stack};
|
||||||
|
use nu_protocol::Value;
|
||||||
pub use p::PrevShell;
|
pub use p::PrevShell;
|
||||||
pub use shells_::Shells;
|
pub use shells_::Shells;
|
||||||
|
|
||||||
|
fn get_shells(engine_state: &EngineState, stack: &mut Stack, cwd: Value) -> Vec<Value> {
|
||||||
|
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
||||||
|
let shells = if let Some(v) = shells {
|
||||||
|
v.as_list()
|
||||||
|
.map(|x| x.to_vec())
|
||||||
|
.unwrap_or_else(|_| vec![cwd])
|
||||||
|
} else {
|
||||||
|
vec![cwd]
|
||||||
|
};
|
||||||
|
shells
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_current_shell(engine_state: &EngineState, stack: &mut Stack) -> usize {
|
||||||
|
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
||||||
|
if let Some(v) = current_shell {
|
||||||
|
v.as_integer().unwrap_or_default() as usize
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use super::{get_current_shell, get_shells};
|
||||||
use nu_engine::current_dir;
|
use nu_engine::current_dir;
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -33,21 +34,8 @@ impl Command for NextShell {
|
||||||
span: call.head,
|
span: call.head,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let shells = get_shells(engine_state, stack, cwd);
|
||||||
let shells = if let Some(v) = shells {
|
let mut current_shell = get_current_shell(engine_state, stack);
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
|
||||||
let mut current_shell = if let Some(v) = current_shell {
|
|
||||||
v.as_integer().unwrap_or_default() as usize
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
current_shell += 1;
|
current_shell += 1;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use super::{get_current_shell, get_shells};
|
||||||
use nu_engine::current_dir;
|
use nu_engine::current_dir;
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -33,21 +34,8 @@ impl Command for PrevShell {
|
||||||
span: call.head,
|
span: call.head,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let shells = get_shells(engine_state, stack, cwd);
|
||||||
let shells = if let Some(v) = shells {
|
let mut current_shell = get_current_shell(engine_state, stack);
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
|
||||||
let mut current_shell = if let Some(v) = current_shell {
|
|
||||||
v.as_integer().unwrap_or_default() as usize
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
if current_shell == 0 {
|
if current_shell == 0 {
|
||||||
current_shell = shells.len() - 1;
|
current_shell = shells.len() - 1;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use super::{get_current_shell, get_shells};
|
||||||
use nu_engine::current_dir;
|
use nu_engine::current_dir;
|
||||||
use nu_protocol::ast::Call;
|
use nu_protocol::ast::Call;
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack};
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
||||||
|
@ -36,21 +37,8 @@ impl Command for Shells {
|
||||||
span,
|
span,
|
||||||
};
|
};
|
||||||
|
|
||||||
let shells = stack.get_env_var(engine_state, "NUSHELL_SHELLS");
|
let shells = get_shells(engine_state, stack, cwd);
|
||||||
let shells = if let Some(v) = shells {
|
let current_shell = get_current_shell(engine_state, stack);
|
||||||
v.as_list()
|
|
||||||
.map(|x| x.to_vec())
|
|
||||||
.unwrap_or_else(|_| vec![cwd])
|
|
||||||
} else {
|
|
||||||
vec![cwd]
|
|
||||||
};
|
|
||||||
|
|
||||||
let current_shell = stack.get_env_var(engine_state, "NUSHELL_CURRENT_SHELL");
|
|
||||||
let current_shell = if let Some(v) = current_shell {
|
|
||||||
v.as_integer().unwrap_or_default() as usize
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
let output = shells
|
let output = shells
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|
Loading…
Reference in a new issue