summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Zhao <jeff.no.zhao@gmail.com>2021-06-20 20:55:51 -0400
committerJeff Zhao <jeff.no.zhao@gmail.com>2021-06-20 21:03:31 -0400
commit0b5f098109c3dc8c488d5d8e6eee06e278f2ce4e (patch)
tree7343384029ae1f90c61a10379d2cf7cea4208f15
parentcf660136ea43e0a463fd270bfdaf8bb3ee606d9d (diff)
fix file sizes not appearing when filename too long
-rw-r--r--src/ui/widgets/tui_dirlist_detailed.rs68
1 files changed, 36 insertions, 32 deletions
diff --git a/src/ui/widgets/tui_dirlist_detailed.rs b/src/ui/widgets/tui_dirlist_detailed.rs
index 2c0337d..ab62176 100644
--- a/src/ui/widgets/tui_dirlist_detailed.rs
+++ b/src/ui/widgets/tui_dirlist_detailed.rs
@@ -90,8 +90,13 @@ fn print_entry(
};
let left_label_original = entry.label();
let right_label_original = format!(" {}{}", symlink_string, size_string);
- let (left_label, right_label) =
- factor_labels_for_entry(left_label_original, right_label_original, drawing_width);
+
+ let (left_label, right_label) = factor_labels_for_entry(
+ left_label_original,
+ right_label_original.as_str(),
+ drawing_width,
+ );
+
let right_width = right_label.width();
buf.set_stringn(x, y, left_label, drawing_width, style);
buf.set_stringn(
@@ -103,30 +108,29 @@ fn print_entry(
);
}
-fn factor_labels_for_entry(
- left_label_original: &str,
- right_label_original: String,
+fn factor_labels_for_entry<'a>(
+ left_label_original: &'a str,
+ right_label_original: &'a str,
drawing_width: usize,
-) -> (String, String) {
- let left_width_remainder = drawing_width as i32 - right_label_original.width() as i32;
- let width_remainder = left_width_remainder as i32 - left_label_original.width() as i32;
+) -> (String, &'a str) {
+ let left_label_original_width = left_label_original.width();
+ let right_label_original_width = right_label_original.width();
+
+ if drawing_width < right_label_original_width {
+ return (ELLIPSIS.to_string(), "");
+ }
+
+ let left_width_remainder = drawing_width as i32 - right_label_original_width as i32;
+ let width_remainder = left_width_remainder as i32 - left_label_original_width as i32;
if width_remainder >= 0 {
- (
- left_label_original.to_string(),
- right_label_original.to_string(),
- )
+ (left_label_original.to_string(), right_label_original)
} else {
- if left_label_original.width() <= drawing_width {
- (left_label_original.to_string(), "".to_string())
- } else if left_width_remainder < MIN_LEFT_LABEL_WIDTH {
- (
- trim_file_label(left_label_original, drawing_width),
- "".to_string(),
- )
+ if left_label_original_width + right_label_original_width <= drawing_width {
+ (left_label_original.to_string(), "")
} else {
(
trim_file_label(left_label_original, left_width_remainder as usize),
- right_label_original.to_string(),
+ right_label_original,
)
}
}
@@ -151,7 +155,7 @@ pub fn trim_file_label(name: &str, drawing_width: usize) -> String {
// file ext does not fit
ELLIPSIS.to_string()
} else if ext_width == drawing_width {
- extension.to_string().replacen('.', ELLIPSIS, 1)
+ extension.replacen('.', ELLIPSIS, 1).to_string()
} else {
let stem_width = drawing_width - ext_width;
let truncated_stem = stem.trunc(stem_width - 1);
@@ -162,15 +166,15 @@ pub fn trim_file_label(name: &str, drawing_width: usize) -> String {
#[cfg(test)]
mod test_factor_labels {
- use super::{factor_labels_for_entry, MIN_LEFT_LABEL_WIDTH};
+ use super::{factor_labels_for_entry, ELLIPSIS, MIN_LEFT_LABEL_WIDTH};
#[test]
fn both_labels_empty_if_drawing_width_zero() {
let left = "foo.ext";
let right = "right";
assert_eq!(
- ("".to_string(), "".to_string()),
- factor_labels_for_entry(left, right.to_string(), 0)
+ (ELLIPSIS.to_string(), ""),
+ factor_labels_for_entry(left, right, 0)
);
}
@@ -179,8 +183,8 @@ mod test_factor_labels {
let left = "foo.ext";
let right = "right";
assert_eq!(
- (left.to_string(), right.to_string()),
- factor_labels_for_entry(left, right.to_string(), 20)
+ (left.to_string(), right),
+ factor_labels_for_entry(left, right, 20)
);
}
@@ -189,8 +193,8 @@ mod test_factor_labels {
let left = "foo.ext";
let right = "right";
assert_eq!(
- (left.to_string(), right.to_string()),
- factor_labels_for_entry(left, right.to_string(), 12)
+ (left.to_string(), right),
+ factor_labels_for_entry(left, right, 12)
);
}
@@ -200,8 +204,8 @@ mod test_factor_labels {
let right = "right";
assert!(left.chars().count() as i32 == MIN_LEFT_LABEL_WIDTH);
assert_eq!(
- (left.to_string(), "".to_string()),
- factor_labels_for_entry(left, right.to_string(), MIN_LEFT_LABEL_WIDTH as usize)
+ ("fooba….ext".to_string(), "right"),
+ factor_labels_for_entry(left, right, MIN_LEFT_LABEL_WIDTH as usize)
);
}
@@ -211,10 +215,10 @@ mod test_factor_labels {
let right = "right";
assert!(left.chars().count() as i32 > MIN_LEFT_LABEL_WIDTH + right.chars().count() as i32);
assert_eq!(
- ("foobarbazf….ext".to_string(), right.to_string()),
+ ("foobarbazf….ext".to_string(), right),
factor_labels_for_entry(
left,
- right.to_string(),
+ right,
MIN_LEFT_LABEL_WIDTH as usize + right.chars().count()
)
);