From 2b8323e230150450ac641d8b21c2d1e1218a1295 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Sat, 2 Feb 2019 21:37:10 +0200 Subject: [PATCH 1/5] general: cleanup --- fff | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fff b/fff index 7c249ac..91962de 100755 --- a/fff +++ b/fff @@ -187,11 +187,15 @@ read_dir() { list=("${dirs[@]}" "${files[@]}") + IFS=$'\n' read -d "" -ra file_sizes < <(du -ks "${files[@]}") + file_sizes=("${file_sizes[@]//[[:space:]]*}") + # Indicate that the directory is empty. [[ -z ${list[0]} ]] && list[0]="empty" ((list_total=${#list[@]}-1)) + ((dir_total=${#dirs[@]})) # Save the original dir in a second list as a backup. cur_list=("${list[@]}") @@ -273,11 +277,14 @@ print_line() { suffix+='*' } + [[ ! -d ${list[$1]} ]] && + local file_size="${file_sizes[$1-dir_total]}" + # Escape the directory string. # Remove all non-printable characters. file_name="${file_name//[^[:print:]]/^[}" - printf '\r%b%s\e[m\r' "$format" "${file_name}${suffix}" + printf '\r%b%s\e[m\r' "$format" "${file_size}${file_name}${suffix}" } draw_dir() { From 642b1f5e9b7ce09c212d6ee7d97990ea78006656 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Tue, 5 Feb 2019 09:26:56 +0200 Subject: [PATCH 2/5] general: File size support --- fff | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fff b/fff index 91962de..e2763ab 100755 --- a/fff +++ b/fff @@ -162,6 +162,20 @@ status_line() { "$LINES" } +get_file_sizes() { + # Get sizes of files. + IFS=$'\n' read -d "" -ra file_sizes < <(du -ks "${files[@]}") + file_sizes=("${file_sizes[@]//[[:space:]]*}") + + # Convert byte formatted sizes to human-readable. + for i in "${!file_sizes[@]}"; do + case "${file_sizes[i]}" in + ???|??|?) file_sizes[i]+="KB" ;; + *) file_sizes[i]="$((file_sizes[i]/1024))MB" ;; + esac + done +} + read_dir() { # Read a directory to an array and sort it directories first. local dirs=() @@ -187,8 +201,7 @@ read_dir() { list=("${dirs[@]}" "${files[@]}") - IFS=$'\n' read -d "" -ra file_sizes < <(du -ks "${files[@]}") - file_sizes=("${file_sizes[@]//[[:space:]]*}") + get_file_sizes # Indicate that the directory is empty. [[ -z ${list[0]} ]] && @@ -284,7 +297,9 @@ print_line() { # Remove all non-printable characters. file_name="${file_name//[^[:print:]]/^[}" - printf '\r%b%s\e[m\r' "$format" "${file_size}${file_name}${suffix}" + printf '\r%b%s\e[m\e[%sC\e[%sD%s\r' \ + "$format" "${file_name}${suffix}" \ + "$COLUMNS" "${#file_size}" "$file_size" } draw_dir() { From eb16118c7620ca179b8122f5e14f965bd2532720 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Tue, 5 Feb 2019 09:36:51 +0200 Subject: [PATCH 3/5] general: File size support --- fff | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/fff b/fff index e2763ab..8a79d9a 100755 --- a/fff +++ b/fff @@ -167,6 +167,12 @@ get_file_sizes() { IFS=$'\n' read -d "" -ra file_sizes < <(du -ks "${files[@]}") file_sizes=("${file_sizes[@]//[[:space:]]*}") + # Find the longest file size. + for size in "${file_sizes[@]}"; do + ((${#size} > max_size)) && + ((max_size=${#size})) + done + # Convert byte formatted sizes to human-readable. for i in "${!file_sizes[@]}"; do case "${file_sizes[i]}" in @@ -290,13 +296,15 @@ print_line() { suffix+='*' } - [[ ! -d ${list[$1]} ]] && - local file_size="${file_sizes[$1-dir_total]}" - # Escape the directory string. # Remove all non-printable characters. file_name="${file_name//[^[:print:]]/^[}" + ((${FFF_SHOW_SIZE:=1} == 1)) && [[ -f ${list[$1]} ]] && { + local file_size="${file_sizes[$1-dir_total]}" + file_name="${file_name:0:$((COLUMNS-max_size-1))}" + } + printf '\r%b%s\e[m\e[%sC\e[%sD%s\r' \ "$format" "${file_name}${suffix}" \ "$COLUMNS" "${#file_size}" "$file_size" From 98af242c856256d5108da428abf6d03523cf4e5e Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Tue, 5 Feb 2019 09:41:50 +0200 Subject: [PATCH 4/5] general: File size support --- fff | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fff b/fff index 8a79d9a..6a15363 100755 --- a/fff +++ b/fff @@ -164,6 +164,9 @@ status_line() { get_file_sizes() { # Get sizes of files. + [[ -z ${files[*]} ]] && + return + IFS=$'\n' read -d "" -ra file_sizes < <(du -ks "${files[@]}") file_sizes=("${file_sizes[@]//[[:space:]]*}") From 1d2476790addb178a7ee37058c34f030945b9ca7 Mon Sep 17 00:00:00 2001 From: Dylan Araps Date: Tue, 5 Feb 2019 09:49:32 +0200 Subject: [PATCH 5/5] general: File size support --- fff | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fff b/fff index 6a15363..8e5cad4 100755 --- a/fff +++ b/fff @@ -210,7 +210,9 @@ read_dir() { list=("${dirs[@]}" "${files[@]}") - get_file_sizes + # Retrieve file sizes if enabled. + ((${FFF_SHOW_SIZE:=1} == 1)) && + get_file_sizes # Indicate that the directory is empty. [[ -z ${list[0]} ]] &&