Add better exit command (#369)

This commit is contained in:
JT 2021-11-26 21:00:57 +13:00 committed by GitHub
parent f052b3313d
commit 5d88ed6c75
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 12 deletions

View file

@ -1,7 +1,4 @@
use nu_protocol::{
engine::{EngineState, StateWorkingSet},
Signature,
};
use nu_protocol::engine::{EngineState, StateWorkingSet};
use crate::*;
@ -43,6 +40,7 @@ pub fn create_default_context() -> EngineState {
Drop,
Each,
Echo,
Exit,
ExportCommand,
ExportDef,
ExportEnv,
@ -108,6 +106,7 @@ pub fn create_default_context() -> EngineState {
Select,
Shuffle,
Size,
Source,
Split,
SplitChars,
SplitColumn,
@ -150,10 +149,7 @@ pub fn create_default_context() -> EngineState {
bind_command!(OpenDataFrame, ToDataFrame);
// This is a WIP proof of concept
bind_command!(ListGitBranches, Git, GitCheckout, Source);
let sig = Signature::build("exit");
working_set.add_decl(sig.predeclare());
// bind_command!(ListGitBranches, Git, GitCheckout, Source);
working_set.render()
};

View file

@ -9,6 +9,7 @@ mod filesystem;
mod filters;
mod formats;
mod math;
mod shells;
mod strings;
mod system;
mod viewers;
@ -27,6 +28,7 @@ pub use filesystem::*;
pub use filters::*;
pub use formats::*;
pub use math::*;
pub use shells::*;
pub use strings::*;
pub use system::*;
pub use viewers::*;

View file

@ -0,0 +1,33 @@
use nu_protocol::ast::Call;
use nu_protocol::engine::{Command, EngineState, Stack};
use nu_protocol::{Category, PipelineData, ShellError, Signature};
/// Source a file for environment variables.
#[derive(Clone)]
pub struct Exit;
impl Command for Exit {
fn name(&self) -> &str {
"exit"
}
fn signature(&self) -> Signature {
Signature::build("exit").category(Category::Shells)
}
fn usage(&self) -> &str {
"Runs a script file in the current context."
}
fn run(
&self,
_engine_state: &EngineState,
_stack: &mut Stack,
_call: &Call,
_input: PipelineData,
) -> Result<PipelineData, ShellError> {
//TODO: add more shell support
std::process::exit(0);
}
}

View file

@ -0,0 +1,3 @@
mod exit;
pub use exit::Exit;

View file

@ -42,6 +42,7 @@ pub enum Category {
Filters,
Formats,
Math,
Shells,
Strings,
System,
Viewers,
@ -61,6 +62,7 @@ impl std::fmt::Display for Category {
Category::Filters => "filters",
Category::Formats => "formats",
Category::Math => "math",
Category::Shells => "shells",
Category::Strings => "strings",
Category::System => "system",
Category::Viewers => "viewers",

View file

@ -269,10 +269,6 @@ fn main() -> Result<()> {
let input = line_editor.read_line(prompt);
match input {
Ok(Signal::Success(s)) => {
if s.trim() == "exit" {
break;
}
eval_source(
&mut engine_state,
&mut stack,