Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/application.rs')
| -rw-r--r-- | helix-term/src/application.rs | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 8487e245..c402633c 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -580,24 +580,41 @@ impl Application { doc.set_last_saved_revision(doc_save_event.revision, doc_save_event.save_time); let lines = doc_save_event.text.len_lines(); - let mut sz = doc_save_event.text.len_bytes() as f32; + let size = doc_save_event.text.len_bytes(); - const SUFFIX: [&str; 4] = ["B", "KiB", "MiB", "GiB"]; - let mut i = 0; - while i < SUFFIX.len() - 1 && sz >= 1024.0 { - sz /= 1024.0; - i += 1; + enum Size { + Bytes(u16), + HumanReadable(f32, &'static str), } + impl std::fmt::Display for Size { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Bytes(bytes) => write!(f, "{bytes}B"), + Self::HumanReadable(size, suffix) => write!(f, "{size:.1}{suffix}"), + } + } + } + + let size = if size < 1024 { + Size::Bytes(size as u16) + } else { + const SUFFIX: [&str; 4] = ["B", "KiB", "MiB", "GiB"]; + let mut size = size as f32; + let mut i = 0; + while i < SUFFIX.len() - 1 && size >= 1024.0 { + size /= 1024.0; + i += 1; + } + Size::HumanReadable(size, SUFFIX[i]) + }; + self.editor .set_doc_path(doc_save_event.doc_id, &doc_save_event.path); // TODO: fix being overwritten by lsp self.editor.set_status(format!( - "'{}' written, {}L {:.1}{}", + "'{}' written, {lines}L {size}", get_relative_path(&doc_save_event.path).to_string_lossy(), - lines, - sz, - SUFFIX[i], )); } |