Add initial ctrl-c support

This commit is contained in:
JT
2021-10-28 17:13:10 +13:00
parent 1308eb45d5
commit bac8b8a450
32 changed files with 318 additions and 144 deletions

View File

@ -24,12 +24,12 @@ impl Command for Size {
fn run(
&self,
_engine_state: &EngineState,
engine_state: &EngineState,
_stack: &mut Stack,
call: &Call,
input: PipelineData,
) -> Result<PipelineData, ShellError> {
size(call, input)
size(engine_state, call, input)
}
fn examples(&self) -> Vec<Example> {
@ -100,18 +100,25 @@ impl Command for Size {
}
}
fn size(call: &Call, input: PipelineData) -> Result<PipelineData, ShellError> {
fn size(
engine_state: &EngineState,
call: &Call,
input: PipelineData,
) -> Result<PipelineData, ShellError> {
let span = call.head;
input.map(move |v| match v.as_string() {
Ok(s) => count(&s, span),
Err(_) => Value::Error {
error: ShellError::PipelineMismatch {
expected: Type::String,
expected_span: span,
origin: span,
input.map(
move |v| match v.as_string() {
Ok(s) => count(&s, span),
Err(_) => Value::Error {
error: ShellError::PipelineMismatch {
expected: Type::String,
expected_span: span,
origin: span,
},
},
},
})
engine_state.ctrlc.clone(),
)
}
fn count(contents: &str, span: Span) -> Value {

View File

@ -39,22 +39,26 @@ impl Command for SubCommand {
fn run(
&self,
_engine_state: &EngineState,
engine_state: &EngineState,
_stack: &mut Stack,
call: &Call,
input: PipelineData,
) -> Result<nu_protocol::PipelineData, nu_protocol::ShellError> {
split_chars(call, input)
split_chars(engine_state, call, input)
}
}
fn split_chars(
engine_state: &EngineState,
call: &Call,
input: PipelineData,
) -> Result<nu_protocol::PipelineData, nu_protocol::ShellError> {
let span = call.head;
input.flat_map(move |x| split_chars_helper(&x, span))
input.flat_map(
move |x| split_chars_helper(&x, span),
engine_state.ctrlc.clone(),
)
}
fn split_chars_helper(v: &Value, name: Span) -> Vec<Value> {

View File

@ -54,7 +54,10 @@ fn split_column(
let rest: Vec<Spanned<String>> = call.rest(engine_state, stack, 1)?;
let collapse_empty = call.has_flag("collapse-empty");
input.flat_map(move |x| split_column_helper(&x, &separator, &rest, collapse_empty, name_span))
input.flat_map(
move |x| split_column_helper(&x, &separator, &rest, collapse_empty, name_span),
engine_state.ctrlc.clone(),
)
}
fn split_column_helper(

View File

@ -45,7 +45,10 @@ fn split_row(
let name_span = call.head;
let separator: Spanned<String> = call.req(engine_state, stack, 0)?;
input.flat_map(move |x| split_row_helper(&x, &separator, name_span))
input.flat_map(
move |x| split_row_helper(&x, &separator, name_span),
engine_state.ctrlc.clone(),
)
}
fn split_row_helper(v: &Value, separator: &Spanned<String>, name: Span) -> Vec<Value> {