diff options
author | Daniel Friesel <derf@finalrewind.org> | 2012-02-26 09:56:01 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2012-02-26 09:56:01 +0100 |
commit | bf52095c2a870571475b6a7731428f5533882ac8 (patch) | |
tree | fb51470c81b8bd1d3b854b4c84c568c6c37e13c1 /src | |
parent | be7b3df6c008f74b2ebec9a61dda3db7da9a2a9d (diff) |
feh_printf: Fix/Add %S/%P for human-readable sizes, use them in --list
Diffstat (limited to 'src')
-rw-r--r-- | src/feh.h | 1 | ||||
-rw-r--r-- | src/list.c | 10 | ||||
-rw-r--r-- | src/slideshow.c | 25 |
3 files changed, 26 insertions, 10 deletions
@@ -137,6 +137,7 @@ void init_keyevents(void); void init_buttonbindings(void); void feh_event_handle_keypress(XEvent * ev); void feh_action_run(feh_file * file, char *action); +char *format_size(int size); char *feh_printf(char *str, feh_file * file); void im_weprintf(winwidget w, char *fmt, ...); void feh_draw_zoom(winwidget w); @@ -37,7 +37,7 @@ void init_list_mode(void) mode = "list"; if (!opt.customlist) - fputs("NUM\tFORMAT\tWIDTH\tHEIGHT\tPIXELS\tSIZE(bytes)\tALPHA\tFILENAME\n", + fputs("NUM\tFORMAT\tWIDTH\tHEIGHT\tPIXELS\tSIZE\tALPHA\tFILENAME\n", stdout); for (l = filelist; l; l = l->next) { @@ -45,10 +45,12 @@ void init_list_mode(void) if (opt.customlist) printf("%s\n", feh_printf(opt.customlist, file)); else - printf("%d\t%s\t%d\t%d\t%d\t%d\t\t%c\t%s\n", ++j, + printf("%d\t%s\t%d\t%d\t%s", ++j, file->info->format, file->info->width, - file->info->height, file->info->pixels, - file->info->size, + file->info->height, + format_size(file->info->pixels)); + printf("\t%s\t\t%c\t%s\n", + format_size(file->info->size), file->info->has_alpha ? 'X' : '-', file->filename); feh_action_run(file, opt.actions[0]); diff --git a/src/slideshow.c b/src/slideshow.c index 189357d..a65d95e 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -404,6 +404,19 @@ char *shell_escape(char *input) return ret; } +char *format_size(int size) +{ + static char ret[5]; + char units[] = {' ', 'k', 'M', 'G', 'T'}; + unsigned char postfix = 0; + while (size >= 1000) { + size /= 1000; + postfix++; + } + snprintf(ret, 5, "%3d%c", size, units[postfix]); + return ret; +} + char *feh_printf(char *str, feh_file * file) { char *c; @@ -452,9 +465,7 @@ char *feh_printf(char *str, feh_file * file) break; case 'S': if (file && (file->info || !feh_file_info_load(file, NULL))) { - snprintf(buf, sizeof(buf), - "%.2fkB", ((double)file->info->size / 1000)); - strcat(ret, buf); + strcat(ret, format_size(file->info->size)); } break; case 'p': @@ -463,14 +474,16 @@ char *feh_printf(char *str, feh_file * file) strcat(ret, buf); } break; + case 'P': + if (file && (file->info || !feh_file_info_load(file, NULL))) { + strcat(ret, format_size(file->info->pixels)); + } + break; case 't': if (file && (file->info || !feh_file_info_load(file, NULL))) { strcat(ret, file->info->format); } break; - case 'P': - strcat(ret, PACKAGE); - break; case 'v': strcat(ret, VERSION); break; |