Skip to content

Commit bd5e7da

Browse files
committed
Enhance metadata formatting with labeled sections and separators
- Replace comma-separated metadata with labeled sections (size:, files:, mod:) - Add visual separators between metadata sections for better readability - Use different colors for labels, values, and separators - Improve the detailed metadata view with consistent formatting - Update metadata formatting for gitignored entries
1 parent cee02c8 commit bd5e7da

File tree

3 files changed

+147
-71
lines changed

3 files changed

+147
-71
lines changed

src/display/colors.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,33 @@ pub(super) fn get_hidden_items_color(config: &DisplayConfig) -> Color {
272272
}
273273
}
274274

275+
/// Get color for metadata labels (size:, files:, etc.)
276+
pub(super) fn get_label_color(config: &DisplayConfig) -> Color {
277+
match config.color_theme {
278+
ColorTheme::Light => Color::Blue,
279+
ColorTheme::Dark => Color::Cyan,
280+
_ => Color::Cyan,
281+
}
282+
}
283+
284+
/// Get color for metadata values
285+
pub(super) fn get_value_color(config: &DisplayConfig) -> Color {
286+
match config.color_theme {
287+
ColorTheme::Light => Color::Green,
288+
ColorTheme::Dark => Color::BrightGreen,
289+
_ => Color::BrightGreen,
290+
}
291+
}
292+
293+
/// Get color for separators between metadata sections
294+
pub(super) fn get_separator_color(config: &DisplayConfig) -> Color {
295+
match config.color_theme {
296+
ColorTheme::Light => Color::Magenta,
297+
ColorTheme::Dark => Color::BrightMagenta,
298+
_ => Color::BrightMagenta,
299+
}
300+
}
301+
275302
/// Colorize a string if colors are enabled, otherwise return it as-is
276303
pub(super) fn colorize(text: &str, color: Color, config: &DisplayConfig) -> String {
277304
if should_use_colors(config) {

src/display/state.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,8 @@ impl<'a> DisplayState<'a> {
180180
// Format metadata with enhanced colors
181181
let colorized_metadata = if self.config.detailed_metadata {
182182
super::utils::format_detailed_metadata(entry, self.config)
183-
} else if self.config.size_colorize || self.config.date_colorize {
184-
super::utils::format_colorized_metadata(entry, self.config)
185183
} else {
186-
let metadata = super::utils::format_metadata(entry);
187-
colors::colorize(
188-
&metadata,
189-
colors::get_metadata_color(self.config),
190-
self.config
191-
)
184+
super::utils::format_colorized_metadata(entry, self.config)
192185
};
193186

194187
// Combine parts into output

src/display/utils.rs

Lines changed: 119 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ pub(super) fn format_file_metadata(entry: &DirectoryEntry) -> String {
2828
format!("({}, modified {})", size, modified)
2929
}
3030

31+
// Removed unused traditional_metadata function
32+
3133
pub(super) fn format_colorized_metadata(entry: &DirectoryEntry, config: &DisplayConfig) -> String {
3234
if !colors::should_use_colors(config) {
3335
return format_metadata(entry);
@@ -44,85 +46,108 @@ pub(super) fn format_colorized_metadata(entry: &DirectoryEntry, config: &Display
4446
.as_secs();
4547
let time_diff = now.saturating_sub(modified_secs);
4648

49+
// Define separators
50+
let separator = colors::colorize(" | ", colors::get_separator_color(config), config);
51+
4752
if entry.is_dir {
48-
let files_text = format!("{} files", entry.metadata.files_count);
49-
let files_colored = if config.size_colorize {
53+
// Format files count
54+
let files_label = colors::colorize("files: ", colors::get_label_color(config), config);
55+
let files_value = if config.size_colorize {
5056
colors::colorize(
51-
&files_text,
57+
&format!("{}", entry.metadata.files_count),
5258
colors::get_size_color(entry.metadata.size, config),
5359
config
5460
)
5561
} else {
5662
colors::colorize(
57-
&files_text,
58-
colors::get_metadata_color(config),
63+
&format!("{}", entry.metadata.files_count),
64+
colors::get_value_color(config),
5965
config
6066
)
6167
};
68+
let files_section = format!("{}{}", files_label, files_value);
6269

63-
let size_text = format_size(entry.metadata.size);
64-
let size_colored = if config.size_colorize {
70+
// Format size
71+
let size_label = colors::colorize("size: ", colors::get_label_color(config), config);
72+
let size_value = if config.size_colorize {
6573
colors::colorize(
66-
&size_text,
74+
&format_size(entry.metadata.size),
6775
colors::get_size_color(entry.metadata.size, config),
6876
config
6977
)
7078
} else {
7179
colors::colorize(
72-
&size_text,
73-
colors::get_metadata_color(config),
80+
&format_size(entry.metadata.size),
81+
colors::get_value_color(config),
7482
config
7583
)
7684
};
85+
let size_section = format!("{}{}", size_label, size_value);
7786

78-
let date_text = format!("modified {}", format_time(entry.metadata.modified));
79-
let date_colored = if config.date_colorize {
87+
// Format date
88+
let date_label = colors::colorize("mod: ", colors::get_label_color(config), config);
89+
let date_value = if config.date_colorize {
8090
colors::colorize(
81-
&date_text,
91+
&format_time(entry.metadata.modified),
8292
colors::get_date_color(time_diff, config),
8393
config
8494
)
8595
} else {
8696
colors::colorize(
87-
&date_text,
88-
colors::get_metadata_color(config),
97+
&format_time(entry.metadata.modified),
98+
colors::get_value_color(config),
8999
config
90100
)
91101
};
102+
let date_section = format!("{}{}", date_label, date_value);
92103

93-
format!("({}, {}, {})", files_colored, size_colored, date_colored)
104+
format!("({}{}{}{}{})",
105+
files_section,
106+
separator,
107+
size_section,
108+
separator,
109+
date_section
110+
)
94111
} else {
95-
let size_text = format_size(entry.metadata.size);
96-
let size_colored = if config.size_colorize {
112+
// Format size
113+
let size_label = colors::colorize("size: ", colors::get_label_color(config), config);
114+
let size_value = if config.size_colorize {
97115
colors::colorize(
98-
&size_text,
116+
&format_size(entry.metadata.size),
99117
colors::get_size_color(entry.metadata.size, config),
100118
config
101119
)
102120
} else {
103121
colors::colorize(
104-
&size_text,
105-
colors::get_metadata_color(config),
122+
&format_size(entry.metadata.size),
123+
colors::get_value_color(config),
106124
config
107125
)
108126
};
127+
let size_section = format!("{}{}", size_label, size_value);
109128

110-
let date_text = format!("modified {}", format_time(entry.metadata.modified));
111-
let date_colored = if config.date_colorize {
129+
// Format date
130+
let date_label = colors::colorize("mod: ", colors::get_label_color(config), config);
131+
let date_value = if config.date_colorize {
112132
colors::colorize(
113-
&date_text,
133+
&format_time(entry.metadata.modified),
114134
colors::get_date_color(time_diff, config),
115135
config
116136
)
117137
} else {
118138
colors::colorize(
119-
&date_text,
120-
colors::get_metadata_color(config),
139+
&format_time(entry.metadata.modified),
140+
colors::get_value_color(config),
121141
config
122142
)
123143
};
144+
let date_section = format!("{}{}", date_label, date_value);
124145

125-
format!("({}, {})", size_colored, date_colored)
146+
format!("({}{}{})",
147+
size_section,
148+
separator,
149+
date_section
150+
)
126151
}
127152
}
128153

@@ -151,80 +176,111 @@ pub(super) fn format_detailed_metadata(entry: &DirectoryEntry, config: &DisplayC
151176
let file_type = colors::determine_file_type(entry);
152177
let type_str = format!("{:?}", file_type);
153178

154-
// Start building parts
155-
let mut parts = Vec::new();
179+
// Define separators
180+
let separator = colors::colorize(" | ", colors::get_separator_color(config), config);
181+
182+
// Build sections
156183

157-
// Size info
158-
let size_text = format_size(entry.metadata.size);
159-
let size_colored = if config.size_colorize {
184+
// Size section
185+
let size_label = colors::colorize("size: ", colors::get_label_color(config), config);
186+
let size_value = if config.size_colorize {
160187
colors::colorize(
161-
&size_text,
188+
&format_size(entry.metadata.size),
162189
colors::get_size_color(entry.metadata.size, config),
163190
config
164191
)
165192
} else {
166193
colors::colorize(
167-
&size_text,
168-
colors::get_metadata_color(config),
194+
&format_size(entry.metadata.size),
195+
colors::get_value_color(config),
169196
config
170197
)
171198
};
172-
parts.push(size_colored);
199+
let size_section = format!("{}{}", size_label, size_value);
173200

174-
// Type info
175-
let type_colored = colors::colorize(
201+
// Type section
202+
let type_label = colors::colorize("type: ", colors::get_label_color(config), config);
203+
let type_value = colors::colorize(
176204
&type_str,
177205
colors::get_name_color(entry, config),
178206
config
179207
);
180-
parts.push(type_colored);
208+
let type_section = format!("{}{}", type_label, type_value);
181209

182-
// Date info - modified
183-
let modified_text = format!("mod: {}", format_time(entry.metadata.modified));
184-
let modified_colored = if config.date_colorize {
210+
// Modified date section
211+
let mod_label = colors::colorize("mod: ", colors::get_label_color(config), config);
212+
let mod_value = if config.date_colorize {
185213
colors::colorize(
186-
&modified_text,
214+
&format_time(entry.metadata.modified),
187215
colors::get_date_color(time_diff, config),
188216
config
189217
)
190218
} else {
191219
colors::colorize(
192-
&modified_text,
193-
colors::get_metadata_color(config),
220+
&format_time(entry.metadata.modified),
221+
colors::get_value_color(config),
194222
config
195223
)
196224
};
197-
parts.push(modified_colored);
225+
let mod_section = format!("{}{}", mod_label, mod_value);
198226

199-
// Date info - created
200-
let created_text = format!("created: {}", format_time(entry.metadata.created));
201-
let created_colored = if config.date_colorize {
227+
// Created date section
228+
let created_label = colors::colorize("created: ", colors::get_label_color(config), config);
229+
let created_value = if config.date_colorize {
202230
colors::colorize(
203-
&created_text,
231+
&format_time(entry.metadata.created),
204232
colors::get_date_color(created_diff, config),
205233
config
206234
)
207235
} else {
208236
colors::colorize(
209-
&created_text,
210-
colors::get_metadata_color(config),
237+
&format_time(entry.metadata.created),
238+
colors::get_value_color(config),
211239
config
212240
)
213241
};
214-
parts.push(created_colored);
242+
let created_section = format!("{}{}", created_label, created_value);
215243

216-
// Add files count for directories
244+
// For directories, add files count section
217245
if entry.is_dir {
218-
let files_text = format!("{} files", entry.metadata.files_count);
219-
let files_colored = colors::colorize(
220-
&files_text,
221-
colors::get_metadata_color(config),
222-
config
223-
);
224-
parts.push(files_colored);
246+
let files_label = colors::colorize("files: ", colors::get_label_color(config), config);
247+
let files_value = if config.size_colorize {
248+
colors::colorize(
249+
&format!("{}", entry.metadata.files_count),
250+
colors::get_size_color(entry.metadata.size, config),
251+
config
252+
)
253+
} else {
254+
colors::colorize(
255+
&format!("{}", entry.metadata.files_count),
256+
colors::get_value_color(config),
257+
config
258+
)
259+
};
260+
let files_section = format!("{}{}", files_label, files_value);
261+
262+
format!("({}{}{}{}{}{}{}{}{})",
263+
size_section,
264+
separator,
265+
type_section,
266+
separator,
267+
mod_section,
268+
separator,
269+
created_section,
270+
separator,
271+
files_section
272+
)
273+
} else {
274+
format!("({}{}{}{}{}{}{})",
275+
size_section,
276+
separator,
277+
type_section,
278+
separator,
279+
mod_section,
280+
separator,
281+
created_section
282+
)
225283
}
226-
227-
format!("({})", parts.join(", "))
228284
}
229285

230286
pub(super) fn format_size(size: u64) -> String {

0 commit comments

Comments
 (0)