Add helper method to check whether ctrl+c was pressed, adopt it (#7482)

I've been working on streaming and pipeline interruption lately. It was
bothering me that checking ctrl+c (something we want to do often) always
requires a bunch of boilerplate like:
```rust
use std::sync::atomic::Ordering;

if let Some(ctrlc) = &engine_state.ctrlc {
     if ctrlc.load(Ordering::SeqCst) {
          ...
```
I added a helper method to cut that down to:

```rust
if nu_utils::ctrl_c::was_pressed(&engine_state.ctrlc) {
    ...
```
This commit is contained in:
Reilly Wood
2022-12-15 09:39:24 -08:00
committed by GitHub
parent 33aea56ccd
commit e215fbbd08
16 changed files with 69 additions and 137 deletions

View File

@ -1,5 +1,3 @@
use std::sync::atomic::Ordering;
use nu_engine::{eval_block, CallExt};
use nu_protocol::ast::Call;
use nu_protocol::engine::{Block, Command, EngineState, Stack};
@ -44,10 +42,8 @@ impl Command for Loop {
let block: Block = call.req(engine_state, stack, 0)?;
loop {
if let Some(ctrlc) = &engine_state.ctrlc {
if ctrlc.load(Ordering::SeqCst) {
break;
}
if nu_utils::ctrl_c::was_pressed(&engine_state.ctrlc) {
break;
}
let block = engine_state.get_block(block.block_id);

View File

@ -1,5 +1,3 @@
use std::sync::atomic::Ordering;
use nu_engine::{eval_block, eval_expression, CallExt};
use nu_protocol::ast::Call;
use nu_protocol::engine::{Block, Command, EngineState, Stack};
@ -48,10 +46,8 @@ impl Command for While {
let block: Block = call.req(engine_state, stack, 1)?;
loop {
if let Some(ctrlc) = &engine_state.ctrlc {
if ctrlc.load(Ordering::SeqCst) {
break;
}
if nu_utils::ctrl_c::was_pressed(&engine_state.ctrlc) {
break;
}
let result = eval_expression(engine_state, stack, cond)?;