From 2252a0148d11fc988131eb0bf6397453427d67e8 Mon Sep 17 00:00:00 2001 From: Bert Date: Wed, 25 May 2011 09:23:23 +0200 Subject: [PATCH] New option: -n, start at given picture --- Makefile | 2 +- README.md | 1 + main.c | 8 ++++---- options.c | 17 ++++++++++++++--- options.h | 3 ++- sxiv.1 | 5 +++++ 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index c1c3169..24574cc 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: sxiv -VERSION=git-20110522 +VERSION=git-20110525 CC?=gcc DESTDIR?= diff --git a/README.md b/README.md index e65bc4b..3dabbd6 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ sxiv supports the following command-line options: -f Start in fullscreen mode -g GEOMETRY Set window position and size (see section GEOMETRY SPECIFICATIONS of X(7)) + -n NUM Start at picture NUM -p Pixelize, i.e. turn off image anti-aliasing -q Be quiet, disable warnings -r Search given directories recursively for images diff --git a/main.c b/main.c index 421d14f..344d55a 100644 --- a/main.c +++ b/main.c @@ -231,14 +231,14 @@ int main(int argc, char **argv) { } } - filecnt = fileidx; - fileidx = 0; - - if (!filecnt) { + if (!fileidx) { fprintf(stderr, "sxiv: no valid image file given, aborting\n"); exit(1); } + filecnt = fileidx; + fileidx = options->startnum < filecnt ? options->startnum : filecnt - 1; + win_init(&win); img_init(&img, &win); diff --git a/options.c b/options.c index 0644363..b2b3a14 100644 --- a/options.c +++ b/options.c @@ -31,7 +31,7 @@ options_t _options; const options_t *options = (const options_t*) &_options; void print_usage() { - printf("usage: sxiv [-cdFfhpqrstvZ] [-g GEOMETRY] [-z ZOOM] FILES...\n"); + printf("usage: sxiv [-cdFfhpqrstvZ] [-g GEOMETRY] [-n NUM] [-z ZOOM] FILES...\n"); } void print_version() { @@ -40,7 +40,9 @@ void print_version() { void parse_options(int argc, char **argv) { float z; - int opt; + int n, opt; + + _options.startnum = 0; _options.scalemode = SCALE_MODE; _options.zoom = 1.0; @@ -55,7 +57,7 @@ void parse_options(int argc, char **argv) { _options.clean_cache = 0; _options.recursive = 0; - while ((opt = getopt(argc, argv, "cdFfg:hpqrstvZz:")) != -1) { + while ((opt = getopt(argc, argv, "cdFfg:hn:pqrstvZz:")) != -1) { switch (opt) { case '?': print_usage(); @@ -78,6 +80,15 @@ void parse_options(int argc, char **argv) { case 'h': print_usage(); exit(0); + case 'n': + if (!sscanf(optarg, "%d", &n) || n < 1) { + fprintf(stderr, "sxiv: invalid argument for option -n: %s\n", + optarg); + exit(1); + } else { + _options.startnum = n - 1; + } + break; case 'p': _options.aa = 0; break; diff --git a/options.h b/options.h index f465855..0c62986 100644 --- a/options.h +++ b/options.h @@ -23,8 +23,9 @@ typedef struct { const char **filenames; - int filecnt; unsigned char from_stdin; + int filecnt; + int startnum; scalemode_t scalemode; float zoom; diff --git a/sxiv.1 b/sxiv.1 index 6c4fb3b..c5dce3b 100644 --- a/sxiv.1 +++ b/sxiv.1 @@ -6,6 +6,8 @@ sxiv \- Simple (or small or suckless) X Image Viewer .RB [ \-cdFfhpqrstvZ ] .RB [ \-g .IR GEOMETRY ] +.RB [ \-n +.IR NUM ] .RB [ \-z .IR ZOOM ] .IR FILE ... @@ -49,6 +51,9 @@ Set window position and size. See section GEOMETRY SPECIFICATIONS of X(7) for more information on .IR GEOMETRY . .TP +.BI "\-n " NUM +Start at picture number NUM. +.TP .B \-h Print brief usage information to standard output and exit. .TP