mirror of
https://gittea.dev/nova/th.git
synced 2025-10-21 18:30:15 -04:00
fixed sort_extension, changes too small to list to other sort methods
This commit is contained in:
2
config.h
2
config.h
@@ -91,7 +91,7 @@ static const binding key_binding[] = {
|
|||||||
{ "uz", cmd_on_selected, "unzip ", "unzip zip" },
|
{ "uz", cmd_on_selected, "unzip ", "unzip zip" },
|
||||||
|
|
||||||
{ "on", order_by, sort_natural, "order natural" },
|
{ "on", order_by, sort_natural, "order natural" },
|
||||||
{ "oe", not_implemented, NULL, "order extension" },
|
{ "oe", order_by, sort_extension, "order extension" },
|
||||||
{ "os", order_by, sort_size, "order size" },
|
{ "os", order_by, sort_size, "order size" },
|
||||||
{ "ot", order_by, sort_type, "order type" },
|
{ "ot", order_by, sort_type, "order type" },
|
||||||
{ "or", order_by, sort_random, "order random" },
|
{ "or", order_by, sort_random, "order random" },
|
||||||
|
51
sorting.c
51
sorting.c
@@ -144,13 +144,13 @@ int sort_type(const void *file0, const void *file1){
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((file*)file0)->file_type == ((file*)file1)->file_type) {
|
if (((file*)file0)->file_type > ((file*)file1)->file_type) {
|
||||||
/*somehow relying on the else below, occasionaly trips either one of the checked for conditions*/
|
|
||||||
return strcasecmp(((file*)file0)->file_name, ((file*)file1)->file_name);
|
|
||||||
} else if (((file*)file0)->file_type > ((file*)file1)->file_type) {
|
|
||||||
return -1;
|
return -1;
|
||||||
|
} else if (((file*)file0)->file_type < ((file*)file1)->file_type) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return sort_natural(file0, file1);
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
int sort_size(const void *file0, const void *file1){
|
int sort_size(const void *file0, const void *file1){
|
||||||
|
|
||||||
@@ -161,10 +161,43 @@ int sort_size(const void *file0, const void *file1){
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((file*)file0)->file_size == ((file*)file1)->file_size) {
|
if (((file*)file0)->file_size > ((file*)file1)->file_size) {
|
||||||
return strcasecmp(((file*)file0)->file_name, ((file*)file1)->file_name);
|
|
||||||
} else if (((file*)file0)->file_size > ((file*)file1)->file_size) {
|
|
||||||
return -1;
|
return -1;
|
||||||
|
} else if (((file*)file0)->file_size < ((file*)file1)->file_size) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return sort_natural(file0, file1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int sort_extension(const void *file0, const void *file1){
|
||||||
|
|
||||||
|
if ((((file*)file0)->file_type & FILE_TYPE_DIR) && !(((file*)file1)->file_type & FILE_TYPE_DIR)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (!(((file*)file0)->file_type & FILE_TYPE_DIR) && (((file*)file1)->file_type & FILE_TYPE_DIR)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *extension0 = strrchr(((file*)file0)->file_name, '.');
|
||||||
|
char *extension1 = strrchr(((file*)file1)->file_name, '.');
|
||||||
|
|
||||||
|
if (extension0 && extension1) {
|
||||||
|
if ((strcmp(extension0, extension1)) == 0) {
|
||||||
|
return sort_natural(file0, file1);
|
||||||
|
} else {
|
||||||
|
file f0;
|
||||||
|
file f1;
|
||||||
|
memcpy(&f0, file0, sizeof(file));
|
||||||
|
memcpy(&f1, file1, sizeof(file));
|
||||||
|
f0.file_name = extension0;
|
||||||
|
f1.file_name = extension1;
|
||||||
|
return sort_natural(&f0, &f1);
|
||||||
|
}
|
||||||
|
} else if (extension0 != NULL && extension1 == NULL) {
|
||||||
|
return 1;
|
||||||
|
} else if (extension0 == NULL && extension1 != NULL) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return sort_natural(file0, file1);
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user