From 27bbaab976e02d2458099de96ec71d14aa1ade8e Mon Sep 17 00:00:00 2001 From: Don Hejna Date: Sun, 27 Nov 2016 20:36:23 -0800 Subject: [PATCH] Support for DELAY as a floating point number including less than 1 second while maintaining backward compatibiitiy with integer arguments. --- image.c | 4 ++-- image.h | 2 +- main.c | 2 +- options.c | 9 +++++---- options.h | 2 +- sxiv.1 | 4 ++-- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/image.c b/image.c index 801bbe5..b9de406 100644 --- a/image.c +++ b/image.c @@ -74,8 +74,8 @@ void img_init(img_t *img, win_t *win) imlib_context_set_color_modifier(img->cmod); img->gamma = MIN(MAX(options->gamma, -GAMMA_RANGE), GAMMA_RANGE); - img->ss.on = options->slideshow > 0; - img->ss.delay = options->slideshow > 0 ? options->slideshow : SLIDESHOW_DELAY; + img->ss.on = options->slideshow > 0.0; + img->ss.delay = options->slideshow > 0.0 ? options->slideshow : SLIDESHOW_DELAY; } #if HAVE_LIBEXIF diff --git a/image.h b/image.h index 8932fdf..feb1647 100644 --- a/image.h +++ b/image.h @@ -60,7 +60,7 @@ typedef struct { struct { bool on; - int delay; + float delay; } ss; multi_img_t multi; diff --git a/main.c b/main.c index d1813a5..714de4d 100644 --- a/main.c +++ b/main.c @@ -372,7 +372,7 @@ void update_info(void) } else { bar_put(r, "%s", mark); if (img.ss.on) - bar_put(r, "%ds | ", img.ss.delay); + bar_put(r, "%2.1fs | ", img.ss.delay); if (img.gamma != 0) bar_put(r, "G%+d | ", img.gamma); bar_put(r, "%3d%% | ", (int) (img.zoom * 100.0)); diff --git a/options.c b/options.c index 4a9772c..cb53794 100644 --- a/options.c +++ b/options.c @@ -44,6 +44,7 @@ void print_version(void) void parse_options(int argc, char **argv) { int n, opt; + float f; char *end, *s; const char *scalemodes = "dfwh"; @@ -59,7 +60,7 @@ void parse_options(int argc, char **argv) _options.zoom = 1.0; _options.animate = false; _options.gamma = 0; - _options.slideshow = 0; + _options.slideshow = 0.0; _options.fullscreen = false; _options.embed = 0; @@ -128,10 +129,10 @@ void parse_options(int argc, char **argv) _options.recursive = true; break; case 'S': - n = strtol(optarg, &end, 0); - if (*end != '\0' || n <= 0) + f = (float) strtof(optarg, &end); + if (*end != '\0' || f <= 0.0) error(EXIT_FAILURE, 0, "Invalid argument for option -S: %s", optarg); - _options.slideshow = n; + _options.slideshow = (float) f; break; case 's': s = strchr(scalemodes, optarg[0]); diff --git a/options.h b/options.h index 40c2506..4e376e3 100644 --- a/options.h +++ b/options.h @@ -36,7 +36,7 @@ typedef struct { float zoom; bool animate; int gamma; - int slideshow; + float slideshow; /* window: */ bool fullscreen; diff --git a/sxiv.1 b/sxiv.1 index ed91322..2c9d23d 100644 --- a/sxiv.1 +++ b/sxiv.1 @@ -81,7 +81,7 @@ Be quiet, disable warnings to standard error stream. Search the given directories recursively for images to view. .TP .BI "\-S " DELAY -Start in slideshow mode. Set the delay between images to DELAY seconds. +Start in slideshow mode. Set the delay between images to DELAY (float, e.g. 1, 3.1, 0.01) seconds. .TP .BI "\-s " MODE Set scale mode according to MODE character. Supported modes are: [d]own, @@ -330,7 +330,7 @@ Toggle visibility of alpha-channel, i.e. image transparency. .TP .B s Toggle slideshow mode and/or set the delay between images to -.I count +.I count (integer prefix only) seconds. .SH MOUSE COMMANDS The following mouse mappings are available in image mode: