Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 38 additions & 3 deletions src/filelist.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,12 +421,47 @@ void feh_file_dirname(char *dst, feh_file * f, int maxlen)
dst[n] = '\0';
}

char *to_lower_str(const char *s)
{
if (!s)
return NULL;

char *lower = strdup(s);
if (!lower) {
return NULL;
}
for (char *ptr = lower; *ptr; ++ptr) {
*ptr = tolower(*ptr);
}
return lower;
}

static inline int strcmp_or_strverscmp(const char *s1, const char *s2)
{
if (!opt.version_sort)
return(strcmp(s1, s2));
else
if (!opt.version_sort) {
/* Version sort disabled */

if (!opt.ignore_case_sort)
return(strcmp(s1, s2));
else
return(strcasecmp(s1, s2));
}

/* Version sort enabled */
if (!opt.ignore_case_sort) {
return(strverscmp(s1, s2));
} else {
char *lower1 = to_lower_str(s1);
char *lower2 = to_lower_str(s2);
int result;
if (lower1 && lower2)
result = strverscmp(lower1, lower2);
else
result = strverscmp(s1, s2);
free(lower1);
free(lower2);
return(result);
}
}

int feh_cmp_filename(void *file1, void *file2)
Expand Down
1 change: 1 addition & 0 deletions src/help.raw
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ OPTIONS
or format
-n, --reverse Reverse sort order
--version-sort Natural sort of (version) numbers within text
--ignore-case-sort Case-insensistive sort for name, filename and dirname
-A, --action [;]ACTION Specify action to perform when pressing <return>.
Executed by /bin/sh, may contain FORMAT SPECIFIERS
reloads image with \";\", switches to next otherwise
Expand Down
4 changes: 4 additions & 0 deletions src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
{"class" , 1, 0, OPTION_class},
{"no-conversion-cache", 0, 0, OPTION_no_conversion_cache},
{"window-id", 1, 0, OPTION_window_id},
{"ignore-case-sort" , 0, 0, OPTION_ignore_case_sort},
{0, 0, 0, 0}
};
int optch = 0, cmdx = 0;
Expand Down Expand Up @@ -860,6 +861,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
opt.zoom_rate = 1 + ((float)opt.zoom_rate / 100);
}
break;
case OPTION_ignore_case_sort:
opt.ignore_case_sort = 1;
break;
default:
break;
}
Expand Down
2 changes: 2 additions & 0 deletions src/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ struct __fehoptions {
double reload;
int sort;
int version_sort;
int ignore_case_sort;
int debug;
int geom_enabled;
int geom_flags;
Expand Down Expand Up @@ -256,6 +257,7 @@ OPTION_auto_reload,
OPTION_class,
OPTION_no_conversion_cache,
OPTION_window_id,
OPTION_ignore_case_sort,
};

//typedef enum __fehoption fehoption;
Expand Down