From bf52095c2a870571475b6a7731428f5533882ac8 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 26 Feb 2012 09:56:01 +0100 Subject: feh_printf: Fix/Add %S/%P for human-readable sizes, use them in --list --- ChangeLog | 8 ++++++++ man/feh.pre | 7 ++++--- src/feh.h | 1 + src/list.c | 10 ++++++---- src/slideshow.c | 25 +++++++++++++++++++------ 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index c29a1d9..eda2b30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +git HEAD + + * exif-support fixes by Dennis Real + * format specifier %S now uses the appropriate suffix (B/kB/MB) + * format specifier %P now prints the number of pixels with k/M suffix, + like %S. Printing the program name ("feh") is no longer supported + * feh --list now uses %S/%P to print image size and amount of pixels + Thu, 02 Feb 2012 21:04:06 +0100 Daniel Friesel * Release v2.3 diff --git a/man/feh.pre b/man/feh.pre index e460fad..acb4948 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -791,7 +791,8 @@ Number of image pixels . .It \&%P . -.Nm +Numbor of image pixels +.Pq kilopixels / megapixels . .It %s . @@ -799,8 +800,8 @@ Image size in bytes . .It %S . -Image size in kilobytes -.Pq with kB postfix +Human-readable image size +.Pq kB / MB . .It %t . diff --git a/src/feh.h b/src/feh.h index 6719963..996de84 100644 --- a/src/feh.h +++ b/src/feh.h @@ -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); diff --git a/src/list.c b/src/list.c index e052c05..3cb9a3d 100644 --- a/src/list.c +++ b/src/list.c @@ -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; -- cgit v1.2.3