Added job count prompt escape code, '\j'

This commit is contained in:
2026-02-25 01:56:24 -05:00
parent 854e127545
commit 45a1c7c75d
3 changed files with 12 additions and 2 deletions

View File

@@ -12,7 +12,7 @@ use crate::parse::{Redir, RedirType};
use crate::procio::{IoBuf, IoFrame, IoMode, IoStack}; use crate::procio::{IoBuf, IoFrame, IoMode, IoStack};
use crate::prompt::readline::markers; use crate::prompt::readline::markers;
use crate::state::{ use crate::state::{
LogTab, VarFlags, read_logic, read_vars, write_jobs, write_meta, write_vars, LogTab, VarFlags, read_jobs, read_logic, read_vars, write_jobs, write_meta, write_vars
}; };
use crate::{jobs, prelude::*}; use crate::{jobs, prelude::*};
@@ -1809,6 +1809,7 @@ fn tokenize_prompt(raw: &str) -> Vec<PromptTk> {
'n' => tokens.push(PromptTk::Text("\n".into())), 'n' => tokens.push(PromptTk::Text("\n".into())),
'r' => tokens.push(PromptTk::Text("\r".into())), 'r' => tokens.push(PromptTk::Text("\r".into())),
't' => tokens.push(PromptTk::RuntimeMillis), 't' => tokens.push(PromptTk::RuntimeMillis),
'j' => tokens.push(PromptTk::JobCount),
'T' => tokens.push(PromptTk::RuntimeFormatted), 'T' => tokens.push(PromptTk::RuntimeFormatted),
'\\' => tokens.push(PromptTk::Text("\\".into())), '\\' => tokens.push(PromptTk::Text("\\".into())),
'"' => tokens.push(PromptTk::Text("\"".into())), '"' => tokens.push(PromptTk::Text("\"".into())),
@@ -2004,7 +2005,10 @@ pub fn expand_prompt(raw: &str) -> ShResult<String> {
PromptTk::ExitCode => todo!(), PromptTk::ExitCode => todo!(),
PromptTk::SuccessSymbol => todo!(), PromptTk::SuccessSymbol => todo!(),
PromptTk::FailureSymbol => todo!(), PromptTk::FailureSymbol => todo!(),
PromptTk::JobCount => todo!(), PromptTk::JobCount => {
let count = read_jobs(|j| j.jobs().iter().filter(|j| j.as_ref().is_some_and(|j| j.get_stats().iter().all(|st| matches!(st, WtStat::StillAlive)))).count());
result.push_str(&count.to_string());
}
PromptTk::Function(f) => { PromptTk::Function(f) => {
log::debug!("Expanding prompt function: {f}"); log::debug!("Expanding prompt function: {f}");
let output = expand_cmd_sub(&f)?; let output = expand_cmd_sub(&f)?;

View File

@@ -192,6 +192,7 @@ fn shed_interactive() -> ShResult<()> {
} }
} }
readline.update_prompt(get_prompt().unwrap_or_default());
readline.print_line(false)?; readline.print_line(false)?;
// Poll for stdin input // Poll for stdin input

View File

@@ -199,6 +199,11 @@ impl ShedVi {
self.history.reset(); self.history.reset();
} }
pub fn update_prompt(&mut self, prompt: String) {
self.prompt = prompt;
self.needs_redraw = true;
}
fn should_submit(&mut self) -> ShResult<bool> { fn should_submit(&mut self) -> ShResult<bool> {
let input = Arc::new(self.editor.buffer.clone()); let input = Arc::new(self.editor.buffer.clone());
self.editor.calc_indent_level(); self.editor.calc_indent_level();