diff options
authorDaniel Friesel <>2018-11-19 18:34:31 +0100
committerDaniel Friesel <>2018-11-19 18:34:31 +0100
commit391a9bfd489d3f2e0cc74a2f698938b3e621d25b (patch)
parent55c27c4babcf63989192f930ba7a75dac691e1e5 (diff)
--start-at: Auto-load directory when no other files are specified
This changes the behaviour of "feh --start-at FILENAME" as follows: Previously, this would cause feh to load all files in the current working directory, since no files or filelists were specified on the command line. Now this is a special case: feh will extract the directory component from FILENAME, load all files in that directory, and display FILENAME. This way, it's possible to use "feh --start-at ~%f" in XDG Desktop files and browse files in feh using the prev/next keys Closes #372 Closes #420
2 files changed, 34 insertions, 7 deletions
diff --git a/man/feh.pre b/man/feh.pre
index e401ab5..d5d7cbf 100644
--- a/man/feh.pre
+++ b/man/feh.pre
@@ -45,7 +45,9 @@ and image captions.
can be controlled by configurable keyboard and mouse shortcuts, terminal
input and signals.
-When no file arguments or filelists are specified,
+When no file arguments or filelists are specified and
+.Cm --start-at
+is not used,
displays all files in the current directory.
@@ -728,8 +730,20 @@ to sort numbers naturally, so that e.g. 10.jpg comes after 2.jpg.
Start the filelist at
.Ar filename .
+If no files or filelists were specifed on the commandline,
+will first load all files from the directory in which
+.Ar filename
+This way, it's possible to look at a specific image and use the next / prev
+keys to browse through the directory.
+for examples.
-If you use relative paths in your filelist,
+Note: If you use relative paths in your filelist,
.Ar filename
should also be a relative path.
If you use absolute paths, it should also be an absolute path.
@@ -738,7 +752,7 @@ If
cannot find an exact match, it will compare basenames
.Pq filenames without the directory suffix .
-Note that this may lead to mismatches if several files in your filelist
+This may lead to mismatches if several files in your filelist
have the same basename.
.It Cm -T , --theme Ar theme
@@ -1915,14 +1929,14 @@ automatically change to the next image after 5 seconds
View all images in ~/Pictures and below, sorted by width, move an image to
~/image/image_name when enter is pressed
-.It feh --start-at ./foo.jpg \&.
+.It feh --start-at ~/Pictures/foo.jpg
-View all images in the current directory, starting with foo.jpg.
+View all images in ~/Pictures, starting with foo.jpg.
All other images are still in the slideshow and can be viewed normally
-.It feh --start-at foo.jpg *
+.It feh --start-at ~/Pictures/foo.jpg ~/Pictures
-Same as above
+Same as above.
.It feh --info \&"exifgrep '\&(Model\&|DateTimeOriginal\&|FNumber\&|ISO\&|Flash\&)' %F \&| cut -d \&. -f 4-\&" \&.
diff --git a/src/options.c b/src/options.c
index 894e29f..333c8c7 100644
--- a/src/options.c
+++ b/src/options.c
@@ -812,6 +812,19 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
add_file_to_filelist_recursively(argv[optind++], FILELIST_FIRST);
+ else if (finalrun && !opt.filelistfile && !opt.bgmode) {
+ if (opt.start_list_at && !path_is_url(opt.start_list_at) && strrchr(opt.start_list_at, '/')) {
+ char *target_directory = estrdup(opt.start_list_at);
+ char *filename_start = strrchr(target_directory, '/');
+ if (filename_start) {
+ *filename_start = '\0';
+ }
+ add_file_to_filelist_recursively(target_directory, FILELIST_FIRST);
+ free(target_directory);
+ } else {
+ add_file_to_filelist_recursively(".", FILELIST_FIRST);
+ }
+ }
else if (finalrun && !opt.filelistfile && !opt.bgmode)
add_file_to_filelist_recursively(".", FILELIST_FIRST);