From 30dd57d8f5e5a0167f2ef235f701363314567449 Mon Sep 17 00:00:00 2001 From: zhaotao1 Date: Mon, 10 Apr 2023 09:57:40 +0800 Subject: [PATCH 1/3] feat: display the size of a file or directory in "kilobytes" --- completions/_dust | 2 ++ completions/_dust.ps1 | 2 ++ completions/dust.bash | 3 ++- completions/dust.elv | 2 ++ completions/dust.fish | 1 + man-page/dust.1 | 5 ++++- src/cli.rs | 6 +++++ src/config.rs | 3 +++ src/display.rs | 51 ++++++++++++++++++++++++++++--------------- src/main.rs | 6 ++++- src/progress.rs | 14 ++++++------ 11 files changed, 68 insertions(+), 27 deletions(-) diff --git a/completions/_dust b/completions/_dust index 9e8be82b..124adb01 100644 --- a/completions/_dust +++ b/completions/_dust @@ -64,6 +64,8 @@ _dust() { '(-F --only-file -t --file_types)--only-dir[Only directories will be displayed.]' \ '(-D --only-dir)-F[Only files will be displayed. (Finds your largest files)]' \ '(-D --only-dir)--only-file[Only files will be displayed. (Finds your largest files)]' \ +'-k[display unit is KB]' \ +'--display_kb[display unit is KB]' \ '*::inputs:' \ && ret=0 } diff --git a/completions/_dust.ps1 b/completions/_dust.ps1 index f87a5b9e..f62fb986 100644 --- a/completions/_dust.ps1 +++ b/completions/_dust.ps1 @@ -70,6 +70,8 @@ Register-ArgumentCompleter -Native -CommandName 'dust' -ScriptBlock { [CompletionResult]::new('--only-dir', 'only-dir', [CompletionResultType]::ParameterName, 'Only directories will be displayed.') [CompletionResult]::new('-F', 'F', [CompletionResultType]::ParameterName, 'Only files will be displayed. (Finds your largest files)') [CompletionResult]::new('--only-file', 'only-file', [CompletionResultType]::ParameterName, 'Only files will be displayed. (Finds your largest files)') + [CompletionResult]::new('-k', 'k', [CompletionResultType]::ParameterName, 'display unit is KB') + [CompletionResult]::new('--display_kb', 'display_kb', [CompletionResultType]::ParameterName, 'display unit is KB') break } }) diff --git a/completions/dust.bash b/completions/dust.bash index 83d7b65a..3c40b88b 100644 --- a/completions/dust.bash +++ b/completions/dust.bash @@ -6,6 +6,7 @@ _dust() { cmd="" opts="" + # shellcheck disable=SC2068 for i in ${COMP_WORDS[@]} do case "${i}" in @@ -19,7 +20,7 @@ _dust() { case "${cmd}" in dust) - opts="-h -V -d -n -p -X -L -x -s -r -c -b -z -R -f -i -v -e -t -w -H -P -D -F --help --version --depth --number-of-lines --full-paths --ignore-directory --dereference-links --limit-filesystem --apparent-size --reverse --no-colors --no-percent-bars --min-size --screen-reader --skip-total --filecount --ignore_hidden --invert-filter --filter --file_types --terminal_width --si --no-progress --only-dir --only-file ..." + opts="-h -V -d -n -p -X -L -x -s -r -c -b -z -R -f -i -v -e -t -w -H -P -D -F -k --help --version --depth --number-of-lines --full-paths --ignore-directory --dereference-links --limit-filesystem --apparent-size --reverse --no-colors --no-percent-bars --min-size --screen-reader --skip-total --filecount --ignore_hidden --invert-filter --filter --file_types --terminal_width --si --no-progress --only-dir --only-file --display_kb ..." if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 diff --git a/completions/dust.elv b/completions/dust.elv index a11c4a94..d027a1d1 100644 --- a/completions/dust.elv +++ b/completions/dust.elv @@ -67,6 +67,8 @@ set edit:completion:arg-completer[dust] = {|@words| cand --only-dir 'Only directories will be displayed.' cand -F 'Only files will be displayed. (Finds your largest files)' cand --only-file 'Only files will be displayed. (Finds your largest files)' + cand -k 'display unit is KB' + cand --display_kb 'display unit is KB' } ] $completions[$command] diff --git a/completions/dust.fish b/completions/dust.fish index 526530f9..99c1851d 100644 --- a/completions/dust.fish +++ b/completions/dust.fish @@ -23,3 +23,4 @@ complete -c dust -s H -l si -d 'print sizes in powers of 1000 (e.g., 1.1G)' complete -c dust -s P -l no-progress -d 'Disable the progress indication.' complete -c dust -s D -l only-dir -d 'Only directories will be displayed.' complete -c dust -s F -l only-file -d 'Only files will be displayed. (Finds your largest files)' +complete -c dust -s k -l display_kb -d 'display unit is KB' diff --git a/man-page/dust.1 b/man-page/dust.1 index e05bfb15..b4abfdc8 100644 --- a/man-page/dust.1 +++ b/man-page/dust.1 @@ -4,7 +4,7 @@ .SH NAME Dust \- Like du but more intuitive .SH SYNOPSIS -\fBDust\fR [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-d\fR|\fB\-\-depth\fR] [\fB\-n\fR|\fB\-\-number\-of\-lines\fR] [\fB\-p\fR|\fB\-\-full\-paths\fR] [\fB\-X\fR|\fB\-\-ignore\-directory\fR] [\fB\-L\fR|\fB\-\-dereference\-links\fR] [\fB\-x\fR|\fB\-\-limit\-filesystem\fR] [\fB\-s\fR|\fB\-\-apparent\-size\fR] [\fB\-r\fR|\fB\-\-reverse\fR] [\fB\-c\fR|\fB\-\-no\-colors\fR] [\fB\-b\fR|\fB\-\-no\-percent\-bars\fR] [\fB\-z\fR|\fB\-\-min\-size\fR] [\fB\-R\fR|\fB\-\-screen\-reader\fR] [\fB\-\-skip\-total\fR] [\fB\-f\fR|\fB\-\-filecount\fR] [\fB\-i\fR|\fB\-\-ignore_hidden\fR] [\fB\-v\fR|\fB\-\-invert\-filter\fR] [\fB\-e\fR|\fB\-\-filter\fR] [\fB\-t\fR|\fB\-\-file_types\fR] [\fB\-w\fR|\fB\-\-terminal_width\fR] [\fB\-H\fR|\fB\-\-si\fR] [\fB\-P\fR|\fB\-\-no\-progress\fR] [\fB\-D\fR|\fB\-\-only\-dir\fR] [\fB\-F\fR|\fB\-\-only\-file\fR] [\fIinputs\fR] +\fBDust\fR [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-d\fR|\fB\-\-depth\fR] [\fB\-n\fR|\fB\-\-number\-of\-lines\fR] [\fB\-p\fR|\fB\-\-full\-paths\fR] [\fB\-X\fR|\fB\-\-ignore\-directory\fR] [\fB\-L\fR|\fB\-\-dereference\-links\fR] [\fB\-x\fR|\fB\-\-limit\-filesystem\fR] [\fB\-s\fR|\fB\-\-apparent\-size\fR] [\fB\-r\fR|\fB\-\-reverse\fR] [\fB\-c\fR|\fB\-\-no\-colors\fR] [\fB\-b\fR|\fB\-\-no\-percent\-bars\fR] [\fB\-z\fR|\fB\-\-min\-size\fR] [\fB\-R\fR|\fB\-\-screen\-reader\fR] [\fB\-\-skip\-total\fR] [\fB\-f\fR|\fB\-\-filecount\fR] [\fB\-i\fR|\fB\-\-ignore_hidden\fR] [\fB\-v\fR|\fB\-\-invert\-filter\fR] [\fB\-e\fR|\fB\-\-filter\fR] [\fB\-t\fR|\fB\-\-file_types\fR] [\fB\-w\fR|\fB\-\-terminal_width\fR] [\fB\-H\fR|\fB\-\-si\fR] [\fB\-P\fR|\fB\-\-no\-progress\fR] [\fB\-D\fR|\fB\-\-only\-dir\fR] [\fB\-F\fR|\fB\-\-only\-file\fR] [\fB\-k\fR|\fB\-\-display_kb\fR] [\fIinputs\fR] .SH DESCRIPTION Like du but more intuitive .SH OPTIONS @@ -84,6 +84,9 @@ Only directories will be displayed. \fB\-F\fR, \fB\-\-only\-file\fR Only files will be displayed. (Finds your largest files) .TP +\fB\-k\fR, \fB\-\-display_kb\fR +display unit is KB +.TP [\fIinputs\fR] .SH VERSION diff --git a/src/cli.rs b/src/cli.rs index 4d8ffd8a..3110d88b 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -169,4 +169,10 @@ pub fn build_cli() -> Command<'static> { .help("Only files will be displayed. (Finds your largest files)"), ) .arg(Arg::new("inputs").multiple_occurrences(true)) + .arg( + Arg::new("display_kb") + .short('k') + .long("display-kb") + .help("display the size of a file or directory in kilobytes"), + ) } diff --git a/src/config.rs b/src/config.rs index 9a77f527..060b453b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -90,6 +90,9 @@ impl Config { pub fn get_only_file(&self, options: &ArgMatches) -> bool { Some(true) == self.only_file || options.is_present("only_file") } + pub fn get_display_kb(&self, options: &ArgMatches) -> bool { + Some(true) == self.only_file || options.is_present("display_kb") + } } fn convert_min_size(input: &str, iso: bool) -> Option { diff --git a/src/display.rs b/src/display.rs index e6837cd2..79a743a8 100644 --- a/src/display.rs +++ b/src/display.rs @@ -24,6 +24,7 @@ pub struct InitialDisplayData { pub by_filecount: bool, pub is_screen_reader: bool, pub iso: bool, + pub display_kb: bool, } pub struct DisplayData { @@ -118,6 +119,7 @@ pub fn draw_it( terminal_width: usize, root_node: &DisplayNode, skip_total: bool, + display_kb: bool, ) { let biggest = match skip_total { false => root_node, @@ -131,7 +133,7 @@ pub fn draw_it( let max_size = biggest.size; max_size.separate_with_commas().chars().count() } else { - find_biggest_size_str(root_node, idd.iso) + find_biggest_size_str(root_node, idd.iso, display_kb) }; assert!( @@ -179,10 +181,10 @@ pub fn draw_it( } } -fn find_biggest_size_str(node: &DisplayNode, iso: bool) -> usize { - let mut mx = human_readable_number(node.size, iso).chars().count(); +fn find_biggest_size_str(node: &DisplayNode, iso: bool,display_kb: bool) -> usize { + let mut mx = human_readable_number(node.size, iso, display_kb).chars().count(); for n in node.children.iter() { - mx = max(mx, find_biggest_size_str(n, iso)); + mx = max(mx, find_biggest_size_str(n, iso, display_kb)); } mx } @@ -364,7 +366,7 @@ fn get_pretty_size(node: &DisplayNode, is_biggest: bool, display_data: &DisplayD let output = if display_data.initial.by_filecount { node.size.separate_with_commas() } else { - human_readable_number(node.size, display_data.initial.iso) + human_readable_number(node.size, display_data.initial.iso, display_data.initial.display_kb) }; let spaces_to_add = display_data.num_chars_needed_on_left_most - output.chars().count(); let output = " ".repeat(spaces_to_add) + output.as_str(); @@ -396,9 +398,12 @@ fn get_pretty_name( } } -pub fn human_readable_number(size: u64, iso: bool) -> String { +pub fn human_readable_number(size: u64, iso: bool, display_kb: bool) -> String { + let num: u64 = if iso { 1000 } else { 1024 }; + if display_kb { + return format!("{:.1}{}", (size as f32 / num as f32), 'K'); + } for (i, u) in UNITS.iter().enumerate() { - let num: u64 = if iso { 1000 } else { 1024 }; let marker = num.pow((UNITS.len() - i) as u32); if size >= marker { if size / marker < 10 { @@ -426,6 +431,7 @@ mod tests { by_filecount: false, is_screen_reader: false, iso: false, + display_kb: false, }; DisplayData { initial, @@ -491,21 +497,32 @@ mod tests { #[test] fn test_human_readable_number() { - assert_eq!(human_readable_number(1, false), "1B"); - assert_eq!(human_readable_number(956, false), "956B"); - assert_eq!(human_readable_number(1004, false), "1004B"); - assert_eq!(human_readable_number(1024, false), "1.0K"); - assert_eq!(human_readable_number(1536, false), "1.5K"); - assert_eq!(human_readable_number(1024 * 512, false), "512K"); - assert_eq!(human_readable_number(1024 * 1024, false), "1.0M"); + assert_eq!(human_readable_number(1, false, false), "1B"); + assert_eq!(human_readable_number(956, false, false), "956B"); + assert_eq!(human_readable_number(1004, false, false), "1004B"); + assert_eq!(human_readable_number(1024, false, false), "1.0K"); + assert_eq!(human_readable_number(1536, false, false), "1.5K"); + assert_eq!(human_readable_number(1024 * 512, false, false), "512K"); + assert_eq!(human_readable_number(1024 * 1024, false, false), "1.0M"); assert_eq!( - human_readable_number(1024 * 1024 * 1024 - 1, false), + human_readable_number(1024 * 1024 * 1024 - 1, false, false), "1023M" ); - assert_eq!(human_readable_number(1024 * 1024 * 1024 * 20, false), "20G"); + assert_eq!(human_readable_number(1024 * 1024 * 1024 * 20, false, false), "20G"); assert_eq!( - human_readable_number(1024 * 1024 * 1024 * 1024, false), + human_readable_number(1024 * 1024 * 1024 * 1024, false, false), "1.0T" ); } + + #[test] + fn test_human_readable_number_kb() { + assert_eq!(human_readable_number(1, false, true), "0.0K"); + assert_eq!(human_readable_number(1024, false, true), "1.0K"); + assert_eq!(human_readable_number(1536, false, true), "1.5K"); + assert_eq!(human_readable_number(1024 * 512, false, true), "512.0K"); + assert_eq!(human_readable_number(1024 * 1024, false, true), "1024.0K"); + assert_eq!(human_readable_number(1024 * 1000 * 1000 * 20, false, true), "20000000.0K"); + } + } diff --git a/src/main.rs b/src/main.rs index fb1420b1..82ab8387 100644 --- a/src/main.rs +++ b/src/main.rs @@ -171,12 +171,14 @@ fn main() { .collect(); let iso = config.get_iso(&options); + + let display_kb = config.get_display_kb(&options); let ignore_hidden = config.get_ignore_hidden(&options); let mut indicator = PIndicator::build_me(); if !config.get_disable_progress(&options) { - indicator.spawn(iso); + indicator.spawn(iso,display_kb); } let walk_data = WalkData { @@ -229,6 +231,7 @@ fn main() { by_filecount, iso, is_screen_reader: config.get_screen_reader(&options), + display_kb }; draw_it( idd, @@ -236,6 +239,7 @@ fn main() { terminal_width, &root_node, config.get_skip_total(&options), + display_kb ) } } diff --git a/src/progress.rs b/src/progress.rs index 15f77224..9aeaae41 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -70,16 +70,16 @@ impl PAtomicInfo { /* -------------------------------------------------------------------------- */ -fn format_preparing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool) -> String { +fn format_preparing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool,is_display_kb: bool) -> String { let path_in = data.current_path.get(); - let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso); + let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso, is_display_kb); format!("Preparing: {path_in} {size} ... {prog_char}") } -fn format_indexing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool) -> String { +fn format_indexing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool, display_kb: bool) -> String { let path_in = data.current_path.get(); let file_count = data.num_files.load(ORDERING); - let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso); + let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso, display_kb); let file_str = format!("{file_count} files, {size}"); format!("Indexing: {path_in} {file_str} ... {prog_char}") } @@ -99,7 +99,7 @@ impl PIndicator { } } - pub fn spawn(&mut self, is_iso: bool) { + pub fn spawn(&mut self, is_iso: bool,display_kb: bool) { let data = self.data.clone(); let (stop_handler, receiver) = mpsc::channel::<()>(); @@ -118,8 +118,8 @@ impl PIndicator { let prog_char = PROGRESS_CHARS[progress_char_i]; msg = match data.state.load(ORDERING) { - Operation::INDEXING => format_indexing_str(prog_char, &data, is_iso), - Operation::PREPARING => format_preparing_str(prog_char, &data, is_iso), + Operation::INDEXING => format_indexing_str(prog_char, &data, is_iso, display_kb), + Operation::PREPARING => format_preparing_str(prog_char, &data, is_iso, display_kb), _ => panic!("Unknown State"), }; From 438e20aea7ab6e5a3e96c25e883b6c02f4899f22 Mon Sep 17 00:00:00 2001 From: zhaotao1 Date: Mon, 10 Apr 2023 10:05:55 +0800 Subject: [PATCH 2/3] feat: display the size of a file or directory in "kilobytes" --- completions/_dust | 4 ++-- completions/_dust.ps1 | 4 ++-- completions/dust.bash | 3 +-- completions/dust.elv | 4 ++-- completions/dust.fish | 2 +- man-page/dust.1 | 6 +++--- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/completions/_dust b/completions/_dust index 124adb01..639d82a6 100644 --- a/completions/_dust +++ b/completions/_dust @@ -64,8 +64,8 @@ _dust() { '(-F --only-file -t --file_types)--only-dir[Only directories will be displayed.]' \ '(-D --only-dir)-F[Only files will be displayed. (Finds your largest files)]' \ '(-D --only-dir)--only-file[Only files will be displayed. (Finds your largest files)]' \ -'-k[display unit is KB]' \ -'--display_kb[display unit is KB]' \ +'-k[display the size of a file or directory in kilobytes]' \ +'--display-kb[display the size of a file or directory in kilobytes]' \ '*::inputs:' \ && ret=0 } diff --git a/completions/_dust.ps1 b/completions/_dust.ps1 index f62fb986..ef83e3cc 100644 --- a/completions/_dust.ps1 +++ b/completions/_dust.ps1 @@ -70,8 +70,8 @@ Register-ArgumentCompleter -Native -CommandName 'dust' -ScriptBlock { [CompletionResult]::new('--only-dir', 'only-dir', [CompletionResultType]::ParameterName, 'Only directories will be displayed.') [CompletionResult]::new('-F', 'F', [CompletionResultType]::ParameterName, 'Only files will be displayed. (Finds your largest files)') [CompletionResult]::new('--only-file', 'only-file', [CompletionResultType]::ParameterName, 'Only files will be displayed. (Finds your largest files)') - [CompletionResult]::new('-k', 'k', [CompletionResultType]::ParameterName, 'display unit is KB') - [CompletionResult]::new('--display_kb', 'display_kb', [CompletionResultType]::ParameterName, 'display unit is KB') + [CompletionResult]::new('-k', 'k', [CompletionResultType]::ParameterName, 'display the size of a file or directory in kilobytes') + [CompletionResult]::new('--display-kb', 'display-kb', [CompletionResultType]::ParameterName, 'display the size of a file or directory in kilobytes') break } }) diff --git a/completions/dust.bash b/completions/dust.bash index 3c40b88b..eb9323fc 100644 --- a/completions/dust.bash +++ b/completions/dust.bash @@ -6,7 +6,6 @@ _dust() { cmd="" opts="" - # shellcheck disable=SC2068 for i in ${COMP_WORDS[@]} do case "${i}" in @@ -20,7 +19,7 @@ _dust() { case "${cmd}" in dust) - opts="-h -V -d -n -p -X -L -x -s -r -c -b -z -R -f -i -v -e -t -w -H -P -D -F -k --help --version --depth --number-of-lines --full-paths --ignore-directory --dereference-links --limit-filesystem --apparent-size --reverse --no-colors --no-percent-bars --min-size --screen-reader --skip-total --filecount --ignore_hidden --invert-filter --filter --file_types --terminal_width --si --no-progress --only-dir --only-file --display_kb ..." + opts="-h -V -d -n -p -X -L -x -s -r -c -b -z -R -f -i -v -e -t -w -H -P -D -F -k --help --version --depth --number-of-lines --full-paths --ignore-directory --dereference-links --limit-filesystem --apparent-size --reverse --no-colors --no-percent-bars --min-size --screen-reader --skip-total --filecount --ignore_hidden --invert-filter --filter --file_types --terminal_width --si --no-progress --only-dir --only-file --display-kb ..." if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 diff --git a/completions/dust.elv b/completions/dust.elv index d027a1d1..8745d368 100644 --- a/completions/dust.elv +++ b/completions/dust.elv @@ -67,8 +67,8 @@ set edit:completion:arg-completer[dust] = {|@words| cand --only-dir 'Only directories will be displayed.' cand -F 'Only files will be displayed. (Finds your largest files)' cand --only-file 'Only files will be displayed. (Finds your largest files)' - cand -k 'display unit is KB' - cand --display_kb 'display unit is KB' + cand -k 'display the size of a file or directory in kilobytes' + cand --display-kb 'display the size of a file or directory in kilobytes' } ] $completions[$command] diff --git a/completions/dust.fish b/completions/dust.fish index 99c1851d..14e67075 100644 --- a/completions/dust.fish +++ b/completions/dust.fish @@ -23,4 +23,4 @@ complete -c dust -s H -l si -d 'print sizes in powers of 1000 (e.g., 1.1G)' complete -c dust -s P -l no-progress -d 'Disable the progress indication.' complete -c dust -s D -l only-dir -d 'Only directories will be displayed.' complete -c dust -s F -l only-file -d 'Only files will be displayed. (Finds your largest files)' -complete -c dust -s k -l display_kb -d 'display unit is KB' +complete -c dust -s k -l display-kb -d 'display the size of a file or directory in kilobytes' diff --git a/man-page/dust.1 b/man-page/dust.1 index b4abfdc8..968cc598 100644 --- a/man-page/dust.1 +++ b/man-page/dust.1 @@ -4,7 +4,7 @@ .SH NAME Dust \- Like du but more intuitive .SH SYNOPSIS -\fBDust\fR [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-d\fR|\fB\-\-depth\fR] [\fB\-n\fR|\fB\-\-number\-of\-lines\fR] [\fB\-p\fR|\fB\-\-full\-paths\fR] [\fB\-X\fR|\fB\-\-ignore\-directory\fR] [\fB\-L\fR|\fB\-\-dereference\-links\fR] [\fB\-x\fR|\fB\-\-limit\-filesystem\fR] [\fB\-s\fR|\fB\-\-apparent\-size\fR] [\fB\-r\fR|\fB\-\-reverse\fR] [\fB\-c\fR|\fB\-\-no\-colors\fR] [\fB\-b\fR|\fB\-\-no\-percent\-bars\fR] [\fB\-z\fR|\fB\-\-min\-size\fR] [\fB\-R\fR|\fB\-\-screen\-reader\fR] [\fB\-\-skip\-total\fR] [\fB\-f\fR|\fB\-\-filecount\fR] [\fB\-i\fR|\fB\-\-ignore_hidden\fR] [\fB\-v\fR|\fB\-\-invert\-filter\fR] [\fB\-e\fR|\fB\-\-filter\fR] [\fB\-t\fR|\fB\-\-file_types\fR] [\fB\-w\fR|\fB\-\-terminal_width\fR] [\fB\-H\fR|\fB\-\-si\fR] [\fB\-P\fR|\fB\-\-no\-progress\fR] [\fB\-D\fR|\fB\-\-only\-dir\fR] [\fB\-F\fR|\fB\-\-only\-file\fR] [\fB\-k\fR|\fB\-\-display_kb\fR] [\fIinputs\fR] +\fBDust\fR [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-d\fR|\fB\-\-depth\fR] [\fB\-n\fR|\fB\-\-number\-of\-lines\fR] [\fB\-p\fR|\fB\-\-full\-paths\fR] [\fB\-X\fR|\fB\-\-ignore\-directory\fR] [\fB\-L\fR|\fB\-\-dereference\-links\fR] [\fB\-x\fR|\fB\-\-limit\-filesystem\fR] [\fB\-s\fR|\fB\-\-apparent\-size\fR] [\fB\-r\fR|\fB\-\-reverse\fR] [\fB\-c\fR|\fB\-\-no\-colors\fR] [\fB\-b\fR|\fB\-\-no\-percent\-bars\fR] [\fB\-z\fR|\fB\-\-min\-size\fR] [\fB\-R\fR|\fB\-\-screen\-reader\fR] [\fB\-\-skip\-total\fR] [\fB\-f\fR|\fB\-\-filecount\fR] [\fB\-i\fR|\fB\-\-ignore_hidden\fR] [\fB\-v\fR|\fB\-\-invert\-filter\fR] [\fB\-e\fR|\fB\-\-filter\fR] [\fB\-t\fR|\fB\-\-file_types\fR] [\fB\-w\fR|\fB\-\-terminal_width\fR] [\fB\-H\fR|\fB\-\-si\fR] [\fB\-P\fR|\fB\-\-no\-progress\fR] [\fB\-D\fR|\fB\-\-only\-dir\fR] [\fB\-F\fR|\fB\-\-only\-file\fR] [\fB\-k\fR|\fB\-\-display\-kb\fR] [\fIinputs\fR] .SH DESCRIPTION Like du but more intuitive .SH OPTIONS @@ -84,8 +84,8 @@ Only directories will be displayed. \fB\-F\fR, \fB\-\-only\-file\fR Only files will be displayed. (Finds your largest files) .TP -\fB\-k\fR, \fB\-\-display_kb\fR -display unit is KB +\fB\-k\fR, \fB\-\-display\-kb\fR +display the size of a file or directory in kilobytes .TP [\fIinputs\fR] From b7c7454110d5ead792fe243b8a47b295d29d6379 Mon Sep 17 00:00:00 2001 From: zhaotao1 Date: Sat, 6 May 2023 18:20:59 +0800 Subject: [PATCH 3/3] feat: format code --- src/display.rs | 23 +++++++++++++++++------ src/main.rs | 8 ++++---- src/progress.rs | 24 +++++++++++++++++++----- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/display.rs b/src/display.rs index 79a743a8..98ce9f89 100644 --- a/src/display.rs +++ b/src/display.rs @@ -181,8 +181,10 @@ pub fn draw_it( } } -fn find_biggest_size_str(node: &DisplayNode, iso: bool,display_kb: bool) -> usize { - let mut mx = human_readable_number(node.size, iso, display_kb).chars().count(); +fn find_biggest_size_str(node: &DisplayNode, iso: bool, display_kb: bool) -> usize { + let mut mx = human_readable_number(node.size, iso, display_kb) + .chars() + .count(); for n in node.children.iter() { mx = max(mx, find_biggest_size_str(n, iso, display_kb)); } @@ -366,7 +368,11 @@ fn get_pretty_size(node: &DisplayNode, is_biggest: bool, display_data: &DisplayD let output = if display_data.initial.by_filecount { node.size.separate_with_commas() } else { - human_readable_number(node.size, display_data.initial.iso, display_data.initial.display_kb) + human_readable_number( + node.size, + display_data.initial.iso, + display_data.initial.display_kb, + ) }; let spaces_to_add = display_data.num_chars_needed_on_left_most - output.chars().count(); let output = " ".repeat(spaces_to_add) + output.as_str(); @@ -508,7 +514,10 @@ mod tests { human_readable_number(1024 * 1024 * 1024 - 1, false, false), "1023M" ); - assert_eq!(human_readable_number(1024 * 1024 * 1024 * 20, false, false), "20G"); + assert_eq!( + human_readable_number(1024 * 1024 * 1024 * 20, false, false), + "20G" + ); assert_eq!( human_readable_number(1024 * 1024 * 1024 * 1024, false, false), "1.0T" @@ -522,7 +531,9 @@ mod tests { assert_eq!(human_readable_number(1536, false, true), "1.5K"); assert_eq!(human_readable_number(1024 * 512, false, true), "512.0K"); assert_eq!(human_readable_number(1024 * 1024, false, true), "1024.0K"); - assert_eq!(human_readable_number(1024 * 1000 * 1000 * 20, false, true), "20000000.0K"); + assert_eq!( + human_readable_number(1024 * 1000 * 1000 * 20, false, true), + "20000000.0K" + ); } - } diff --git a/src/main.rs b/src/main.rs index 82ab8387..20def08c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -171,14 +171,14 @@ fn main() { .collect(); let iso = config.get_iso(&options); - + let display_kb = config.get_display_kb(&options); let ignore_hidden = config.get_ignore_hidden(&options); let mut indicator = PIndicator::build_me(); if !config.get_disable_progress(&options) { - indicator.spawn(iso,display_kb); + indicator.spawn(iso, display_kb); } let walk_data = WalkData { @@ -231,7 +231,7 @@ fn main() { by_filecount, iso, is_screen_reader: config.get_screen_reader(&options), - display_kb + display_kb, }; draw_it( idd, @@ -239,7 +239,7 @@ fn main() { terminal_width, &root_node, config.get_skip_total(&options), - display_kb + display_kb, ) } } diff --git a/src/progress.rs b/src/progress.rs index 9aeaae41..ff44b57a 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -70,13 +70,23 @@ impl PAtomicInfo { /* -------------------------------------------------------------------------- */ -fn format_preparing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool,is_display_kb: bool) -> String { +fn format_preparing_str( + prog_char: char, + data: &PAtomicInfo, + is_iso: bool, + is_display_kb: bool, +) -> String { let path_in = data.current_path.get(); let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso, is_display_kb); format!("Preparing: {path_in} {size} ... {prog_char}") } -fn format_indexing_str(prog_char: char, data: &PAtomicInfo, is_iso: bool, display_kb: bool) -> String { +fn format_indexing_str( + prog_char: char, + data: &PAtomicInfo, + is_iso: bool, + display_kb: bool, +) -> String { let path_in = data.current_path.get(); let file_count = data.num_files.load(ORDERING); let size = human_readable_number(data.total_file_size.load(ORDERING), is_iso, display_kb); @@ -99,7 +109,7 @@ impl PIndicator { } } - pub fn spawn(&mut self, is_iso: bool,display_kb: bool) { + pub fn spawn(&mut self, is_iso: bool, display_kb: bool) { let data = self.data.clone(); let (stop_handler, receiver) = mpsc::channel::<()>(); @@ -118,8 +128,12 @@ impl PIndicator { let prog_char = PROGRESS_CHARS[progress_char_i]; msg = match data.state.load(ORDERING) { - Operation::INDEXING => format_indexing_str(prog_char, &data, is_iso, display_kb), - Operation::PREPARING => format_preparing_str(prog_char, &data, is_iso, display_kb), + Operation::INDEXING => { + format_indexing_str(prog_char, &data, is_iso, display_kb) + } + Operation::PREPARING => { + format_preparing_str(prog_char, &data, is_iso, display_kb) + } _ => panic!("Unknown State"), };