From 7d17c2eb5ef9c4d97e1eca5afaabc89998a17c68 Mon Sep 17 00:00:00 2001 From: Wind Date: Fri, 7 Mar 2025 00:20:58 +0800 Subject: [PATCH] add a helpful msg to indicate a job has been frozen (#15206) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description As stated in the title, when pressing ctrl-z, I sometimes feel confused because I return to the REPL without any message. I don't know if the process has been killed or suspended. This PR aims to add a message to notify the user that the process has been frozen. # User-Facing Changes After pressing `ctrl-z`. A message will be printed in repl. ![图片](https://github.com/user-attachments/assets/5fe502eb-439e-4022-889f-64ba52cc2825) # Tests + Formatting NaN # After Submitting NaN --- crates/nu-command/src/experimental/job_unfreeze.rs | 3 +++ crates/nu-command/src/system/run_external.rs | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/nu-command/src/experimental/job_unfreeze.rs b/crates/nu-command/src/experimental/job_unfreeze.rs index d0da0150c9..46ee5b46f5 100644 --- a/crates/nu-command/src/experimental/job_unfreeze.rs +++ b/crates/nu-command/src/experimental/job_unfreeze.rs @@ -144,6 +144,9 @@ fn unfreeze_job( jobs.add_job_with_id(old_id, Job::Frozen(FrozenJob { unfreeze: handle })) .expect("job was supposed to be removed"); + if state.is_interactive { + println!("\nJob {} is re-frozen", old_id.get()); + } Ok(()) } diff --git a/crates/nu-command/src/system/run_external.rs b/crates/nu-command/src/system/run_external.rs index b5299979f7..38b9fb165e 100644 --- a/crates/nu-command/src/system/run_external.rs +++ b/crates/nu-command/src/system/run_external.rs @@ -313,6 +313,7 @@ impl Command for External { let jobs = engine_state.jobs.clone(); let this_job = engine_state.current_thread_job.clone(); + let is_interactive = engine_state.is_interactive; let child_pid = child.pid(); // Wrap the output into a `PipelineData::ByteStream`. @@ -330,7 +331,10 @@ impl Command for External { if let ForegroundWaitStatus::Frozen(unfreeze) = status { let mut jobs = jobs.lock().expect("jobs lock is poisoned!"); - jobs.add_job(Job::Frozen(FrozenJob { unfreeze })); + let job_id = jobs.add_job(Job::Frozen(FrozenJob { unfreeze })); + if is_interactive { + println!("\nJob {} is frozen", job_id.get()); + } } }))), )?;