Commit 7acf83ea authored by ulteq's avatar ulteq
Browse files

Add natural sort of (version) numbers

parent 886bea1e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef FEH_H
#define FEH_H

#define _GNU_SOURCE
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
+15 −4
Original line number Diff line number Diff line
@@ -399,12 +399,18 @@ void feh_file_dirname(char *dst, feh_file * f, int maxlen)

int feh_cmp_filename(void *file1, void *file2)
{
	if (!opt.version_sort)
		return(strcmp(FEH_FILE(file1)->filename, FEH_FILE(file2)->filename));
	else
		return(strverscmp(FEH_FILE(file1)->filename, FEH_FILE(file2)->filename));
}

int feh_cmp_name(void *file1, void *file2)
{
	if (!opt.version_sort)
		return(strcmp(FEH_FILE(file1)->name, FEH_FILE(file2)->name));
	else
		return(strverscmp(FEH_FILE(file1)->name, FEH_FILE(file2)->name));
}

int feh_cmp_dirname(void *file1, void *file2)
@@ -413,8 +419,13 @@ int feh_cmp_dirname(void *file1, void *file2)
	int cmp;
	feh_file_dirname(dir1, FEH_FILE(file1), PATH_MAX);
	feh_file_dirname(dir2, FEH_FILE(file2), PATH_MAX);
	if (!opt.version_sort) {
		if ((cmp = strcmp(dir1, dir2)) != 0)
			return(cmp);
	} else {
		if ((cmp = strverscmp(dir1, dir2)) != 0)
			return(cmp);
	}
	return(feh_cmp_name(file1, file2));
}

+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ OPTIONS
                           name, filename, mtime, width, height, pixels, size,
                           or format
 -n, --reverse             Reverse sort order
     --version-sort        Natural sort of (version) numbers within text
 -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
+4 −0
Original line number Diff line number Diff line
@@ -412,6 +412,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},
		{"version-sort"  , 0, 0, 246},
		{0, 0, 0, 0}
	};
	int optch = 0, cmdx = 0;
@@ -782,6 +783,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
			if (opt.cache_size > 2048)
				opt.cache_size = 2048;
			break;
		case 246:
			opt.version_sort = 1;
			break;
		default:
			break;
		}
+1 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ struct __fehoptions {
	unsigned int thumb_redraw;
	double reload;
	int sort;
	int version_sort;
	int debug;
	int geom_flags;
	int geom_x;