summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-11-13 14:07:15 -0500
committerJesse Luehrs <doy@tozt.net>2021-11-13 14:07:15 -0500
commitf3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a (patch)
treec8f033e00bf6ba8d66b44cda31f6c01e7da770cf /src
parentd8ddced881672115f7dd7b7d5199190d5b80a60f (diff)
downloadnbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.tar.gz
nbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.zip
clean up formatting a bit
Diffstat (limited to 'src')
-rw-r--r--src/format.rs31
-rw-r--r--src/history.rs19
-rw-r--r--src/main.rs1
-rw-r--r--src/util.rs18
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)
- }
-}