added natural sort

This commit is contained in:
nova 2025-05-10 22:30:52 +02:00
parent d4a4f5ebb2
commit 6617b3fe4e
2 changed files with 17 additions and 0 deletions

View File

@ -39,6 +39,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
scandir(path, &entry, skip_hidden_files, alphasort); scandir(path, &entry, skip_hidden_files, alphasort);
} }
unsigned long i = 0; unsigned long i = 0;
for (i = 0; i < *dir_file_count; i++ ) { for (i = 0; i < *dir_file_count; i++ ) {
if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) {
@ -99,6 +100,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
free(file); free(file);
} }
} }
qsort(dir_content, *dir_file_count, sizeof(file), sort_natural);
for (i = 0; i < *dir_file_count; i++) { for (i = 0; i < *dir_file_count; i++) {
free(entry[i]); free(entry[i]);

View File

@ -1,5 +1,6 @@
#include <curses.h> #include <curses.h>
#include <dirent.h> #include <dirent.h>
#include <strings.h>
#include "defines.h" #include "defines.h"
extern unsigned int settings; extern unsigned int settings;
@ -12,3 +13,17 @@ int skip_hidden_files(const struct dirent *entry){
return 1; return 1;
} }
int sort_natural(const void *file0, const void *file1){
unsigned char file_type0 = ((file*)file0)->file_type;
unsigned char file_type1 = ((file*)file1)->file_type;
if (file_type0 > file_type1) {
return 1;
} else if (file_type0 < file_type1) {
return -1;
} else {
char *file_name0 = ((file*)file0)->file_name;
char *file_name1 = ((file*)file1)->file_name;
return strcasecmp(file_name0, file_name1);
}
}