diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-11-13 14:07:15 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-11-13 14:07:15 -0500 |
commit | f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a (patch) | |
tree | c8f033e00bf6ba8d66b44cda31f6c01e7da770cf /src | |
parent | d8ddced881672115f7dd7b7d5199190d5b80a60f (diff) | |
download | nbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.tar.gz nbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.zip |
clean up formatting a bit
Diffstat (limited to 'src')
-rw-r--r-- | src/format.rs | 31 | ||||
-rw-r--r-- | src/history.rs | 19 | ||||
-rw-r--r-- | src/main.rs | 1 | ||||
-rw-r--r-- | src/util.rs | 18 |
4 files changed, 37 insertions, 32 deletions
diff --git a/src/format.rs b/src/format.rs new file mode 100644 index 0000000..2d59465 --- /dev/null +++ b/src/format.rs @@ -0,0 +1,31 @@ +use std::os::unix::process::ExitStatusExt as _; + +pub fn exit_status(status: std::process::ExitStatus) -> String { + if let Some(sig) = status.signal() { + if let Some(name) = signal_hook::low_level::signal_name(sig) { + format!("{:4} ", &name[3..]) + } else { + format!("SIG{} ", sig) + } + } else { + format!("{:03} ", status.code().unwrap()) + } +} + +pub fn duration(dur: std::time::Duration) -> String { + let secs = dur.as_secs(); + let nanos = dur.subsec_nanos(); + if secs > 60 { + let mins = secs / 60; + let secs = secs - mins * 60; + format!("{}m{}s", mins, secs) + } else if secs > 0 { + format!("{}.{:03}s", secs, nanos / 1_000_000) + } else if nanos >= 1_000_000 { + format!("{}ms", nanos / 1_000_000) + } else if nanos >= 1_000 { + format!("{}us", nanos / 1_000) + } else { + format!("{}ns", nanos) + } +} diff --git a/src/history.rs b/src/history.rs index cca3114..908378f 100644 --- a/src/history.rs +++ b/src/history.rs @@ -1,7 +1,6 @@ use async_std::io::{ReadExt as _, WriteExt as _}; use futures_lite::future::FutureExt as _; use pty_process::Command as _; -use std::os::unix::process::ExitStatusExt as _; use textmode::Textmode as _; pub struct History { @@ -227,17 +226,9 @@ impl History { 0, ); if let Some(status) = entry.exit_status { - if let Some(sig) = status.signal() { - if let Some(name) = - signal_hook::low_level::signal_name(sig) - { - out.write_str(&format!("{} ", &name[3..])); - } else { - out.write_str(&format!("SIG{} ", sig)); - } - } else { - out.write_str(&format!("{} ", status.code().unwrap())); - } + out.write_str(&crate::format::exit_status(status)); + } else { + out.write_str(" "); } if focus == Some(idx) { out.set_fgcolor(textmode::color::BLACK); @@ -252,9 +243,9 @@ impl History { out.reset_attributes(); let time = if let Some(end_instant) = entry.end_instant { format!( - "[{} ({})]", + "[{} ({:6})]", entry.start_time.time().format("%H:%M:%S"), - crate::util::format_duration( + crate::format::duration( end_instant - entry.start_instant ) ) diff --git a/src/main.rs b/src/main.rs index aa5fc35..2d7ae38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ #![allow(clippy::unused_self)] mod action; +mod format; mod history; mod readline; mod state; diff --git a/src/util.rs b/src/util.rs index 649888c..d792b91 100644 --- a/src/util.rs +++ b/src/util.rs @@ -3,21 +3,3 @@ pub type Mutex<T> = async_std::sync::Arc<async_std::sync::Mutex<T>>; pub fn mutex<T>(t: T) -> Mutex<T> { async_std::sync::Arc::new(async_std::sync::Mutex::new(t)) } - -pub fn format_duration(dur: std::time::Duration) -> String { - let secs = dur.as_secs(); - let nanos = dur.subsec_nanos(); - if secs > 60 { - let mins = secs / 60; - let secs = secs - mins * 60; - format!("{}m{}s", mins, secs) - } else if secs > 0 { - format!("{}.{:03}s", secs, nanos / 1_000_000) - } else if nanos >= 1_000_000 { - format!("{}ms", nanos / 1_000_000) - } else if nanos >= 1_000 { - format!("{}us", nanos / 1_000) - } else { - format!("{}ns", nanos) - } -} |