v0.2.12 : ligne de statut — temps dexecution de la derniere commande (⚡ ms/s) + ls parallele (tailles de dossiers reparties sur les coeurs, un seul appel de metadonnees par entree) — 130 entrees instantanees

This commit is contained in:
2026-08-16 10:29:38 -04:00
parent 0f4ba71219
commit 93c32b60ba
4 changed files with 99 additions and 56 deletions
+23 -6
View File
@@ -475,7 +475,9 @@ pub fn banner(app: &App, session: &ShellSession, session_id: &str) -> String {
}
/// One-line status shown before every prompt (Hermes-style status bar).
fn print_status(app: &App, session: &ShellSession, started: Instant) {
/// The second parameter is the duration of the previous command (None before
/// the first one).
fn print_status(app: &App, session: &ShellSession, started: Instant, last: Option<Duration>) {
let color = app.color();
let sep = dim(" │ ", color);
let cwd = shorten_head(&current_dir_string(), 26);
@@ -493,9 +495,16 @@ fn print_status(app: &App, session: &ShellSession, started: Instant) {
),
color,
);
let last_text = match last {
Some(d) if d.as_secs() >= 1 => format_elapsed(d),
Some(d) if d.as_millis() >= 1 => format!("{}ms", d.as_millis()),
Some(d) => format!("{}µs", d.as_micros()),
None => "—".to_string(),
};
let last_part = dim(&format!("⚡ {last_text}"), color);
let elapsed = dim(&format_elapsed(started.elapsed()), color);
println!(
"{}am v{}{sep}{shell_part}{sep}{counts}{sep}⏲ {elapsed}",
"{}am v{}{sep}{shell_part}{sep}{counts}{sep}{last_part}{sep}⏲ {elapsed}",
dim(" ⚙ ", color),
env!("CARGO_PKG_VERSION"),
);
@@ -694,8 +703,9 @@ fn run_with_editor(app: &App, session: &mut ShellSession) -> Result<i32> {
}
let started = Instant::now();
let mut last: Option<DataTable> = None;
let mut last_duration: Option<Duration> = None;
loop {
print_status(app, session, started);
print_status(app, session, started, last_duration);
match rl.readline("❯ ") {
Ok(line) => {
let trimmed = line.trim().to_string();
@@ -703,7 +713,10 @@ fn run_with_editor(app: &App, session: &mut ShellSession) -> Result<i32> {
continue;
}
let _ = rl.add_history_entry(trimmed.as_str());
match handle_input(app, session, &mut last, &trimmed) {
let t = Instant::now();
let result = handle_input(app, session, &mut last, &trimmed);
last_duration = Some(t.elapsed());
match result {
Ok(true) => break,
Ok(false) => {}
Err(e) => app.log.error(&format!("{e:#}")),
@@ -725,8 +738,9 @@ fn run_with_editor(app: &App, session: &mut ShellSession) -> Result<i32> {
fn run_plain(app: &App, session: &mut ShellSession) -> Result<i32> {
let started = Instant::now();
let mut last: Option<DataTable> = None;
let mut last_duration: Option<Duration> = None;
loop {
print_status(app, session, started);
print_status(app, session, started, last_duration);
eprint!("❯ ");
std::io::stderr().flush().ok();
let mut line = String::new();
@@ -737,7 +751,10 @@ fn run_plain(app: &App, session: &mut ShellSession) -> Result<i32> {
if line.is_empty() {
continue;
}
match handle_input(app, session, &mut last, &line) {
let t = Instant::now();
let result = handle_input(app, session, &mut last, &line);
last_duration = Some(t.elapsed());
match result {
Ok(true) => break,
Ok(false) => {}
Err(e) => app.log.error(&format!("{e:#}")),