summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/help.raw1
-rw-r--r--src/options.c4
-rw-r--r--src/options.h1
-rw-r--r--src/slideshow.c7
4 files changed, 13 insertions, 0 deletions
diff --git a/src/help.raw b/src/help.raw
index 86bb617..52d06bf 100644
--- a/src/help.raw
+++ b/src/help.raw
@@ -38,6 +38,7 @@ OPTIONS
--auto-rotate Rotate images according to Exif info (if compiled with exif=1)
-^, --title TITLE Set window title (see FORMAT SPECIFIERS)
-D, --slideshow-delay NUM Set delay between automatically changing slides
+ --no-cycle Stop at both ends of the filelist
--cycle-once Exit after one loop through the slideshow
-R, --reload NUM Reload images after NUM seconds
-k, --keep-http Keep local copies when viewing HTTP/FTP files
diff --git a/src/options.c b/src/options.c
index af0f07d..1a47a39 100644
--- a/src/options.c
+++ b/src/options.c
@@ -415,6 +415,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
{"insecure" , 0, 0, 240},
{"no-recursive" , 0, 0, 241},
{"cache-size" , 1, 0, 243},
+ {"no-cycle" , 0, 0, 244},
{"conversion-timeout" , 1, 0, 245},
{"version-sort" , 0, 0, 246},
{"offset" , 1, 0, 247},
@@ -785,6 +786,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
if (opt.cache_size > 2048)
opt.cache_size = 2048;
break;
+ case 244:
+ opt.no_cycle = 1;
+ break;
case 245:
opt.conversion_timeout = atoi(optarg);
break;
diff --git a/src/options.h b/src/options.h
index 936b4bd..122d39e 100644
--- a/src/options.h
+++ b/src/options.h
@@ -69,6 +69,7 @@ struct __fehoptions {
unsigned char draw_info;
unsigned char cache_thumbnails;
unsigned char cycle_once;
+ unsigned char no_cycle;
unsigned char hold_actions[10];
unsigned char text_bg;
unsigned char no_fehbg;
diff --git a/src/slideshow.c b/src/slideshow.c
index b27a7e8..77f5a82 100644
--- a/src/slideshow.c
+++ b/src/slideshow.c
@@ -215,6 +215,7 @@ void feh_reload_image(winwidget w, int resize, int force_new)
void slideshow_change_image(winwidget winwid, int change, int render)
{
gib_list *last = NULL;
+ gib_list *previous_file = current_file;
int i = 0;
int jmp = 1;
/* We can't use filelist_len in the for loop, since that changes when we
@@ -332,6 +333,12 @@ void slideshow_change_image(winwidget winwid, int change, int render)
last = NULL;
}
+ if (opt.no_cycle &&
+ ((current_file == filelist && change == SLIDE_NEXT) ||
+ (previous_file == filelist && change == SLIDE_PREV))) {
+ current_file = previous_file;
+ }
+
if (winwidget_loadimage(winwid, FEH_FILE(current_file->data))) {
int w = gib_imlib_image_get_width(winwid->im);
int h = gib_imlib_image_get_height(winwid->im);