Compare commits

...

3 Commits

Author SHA1 Message Date
nova
47357e039d stability improvenments 2025-07-26 16:46:38 +02:00
nova
ecce6031a4 scrolling limit 2025-07-26 14:12:28 +02:00
nova
e5a2e429f0 added directory scrolling via offset_vertical 2025-07-25 18:04:26 +02:00
3 changed files with 26 additions and 17 deletions

View File

@@ -13,8 +13,8 @@ extern unsigned int settings;
extern unsigned int file_modifiers; extern unsigned int file_modifiers;
extern unsigned int color_count; extern unsigned int color_count;
extern unsigned int terminal_height; extern unsigned int terminal_height;
extern volatile unsigned long selected_file_current;
extern color *colors; extern color *colors;
unsigned long file_offset;
int (*order_func)() = sort_natural; int (*order_func)() = sort_natural;
@@ -56,13 +56,14 @@ 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)) {
} else { } else {
dir_content[i].file_name = malloc(strlen(entry[i]->d_name)); dir_content[i].file_name = malloc(strlen(entry[i]->d_name)+1);
strcpy(dir_content[i].file_name, entry[i]->d_name); strcpy(dir_content[i].file_name, entry[i]->d_name);
dir_content[i].file_name[strlen(entry[i]->d_name)] = '\0';
struct stat *file; struct stat *file;
file = malloc(sizeof(struct stat)); file = malloc(sizeof(struct stat));
@@ -159,12 +160,22 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
char is_selected = 0; char is_selected = 0;
static const char sizes[6] = { 'B', 'K', 'M', 'G', 'T', 'P' }; static const char sizes[6] = { 'B', 'K', 'M', 'G', 'T', 'P' };
unsigned long offset_vertical = 0;
unsigned long offset_back = 0; unsigned long offset_back = 0;
unsigned long offset_front = 2; unsigned long offset_front = 2;
if (print_info) {
if (*dir_file_count > 9) { if (*dir_file_count > 9) {
offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1; offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1;
} }
for (i = file_offset; i < *dir_file_count && i < terminal_height; i++) { if (selected_file_current > (terminal_height/3)*2) {
if (selected_file_current + (terminal_height/3) >= *dir_file_count) {
offset_vertical = *dir_file_count - terminal_height+2;
} else {
offset_vertical = selected_file_current - (terminal_height/3)*2;
}
}
}
for (i = offset_vertical; i < *dir_file_count && i < (terminal_height + offset_vertical); i++) {
if (print_info) { if (print_info) {
file_size = dir_content[i].file_size; file_size = dir_content[i].file_size;
char size_index = 0; char size_index = 0;
@@ -192,7 +203,6 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
is_selected = 0; is_selected = 0;
} }
mvwaddnstr(win, i, 0, bg, offset_front+is_selected);
if (dir_content[i].status & FILE_STATUS_SELECTED) { if (dir_content[i].status & FILE_STATUS_SELECTED) {
wattron(win, COLOR_PAIR(8)); wattron(win, COLOR_PAIR(8));
} else { } else {
@@ -213,7 +223,7 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
if (extension) { if (extension) {
int char_offset = (file_name_width + offset_front + is_selected) - (offset_back - 1) ; int char_offset = (file_name_width + offset_front + is_selected) - (offset_back - 1) ;
if ((file_name_width - char_offset - strlen(extension) - 1) > 1) { if ((file_name_width - char_offset - strlen(extension) - 1) > 1) {
file_name = malloc(file_name_width - char_offset); file_name = malloc(file_name_width - char_offset + 1);
memcpy(file_name, dir_content[i].file_name, file_name_width - char_offset); memcpy(file_name, dir_content[i].file_name, file_name_width - char_offset);
memcpy(file_name + (file_name_width - char_offset - strlen(extension)), extension, strlen(extension)); memcpy(file_name + (file_name_width - char_offset - strlen(extension)), extension, strlen(extension));
file_name[file_name_width - char_offset - strlen(extension) - 1] = '~'; file_name[file_name_width - char_offset - strlen(extension) - 1] = '~';
@@ -236,21 +246,21 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
file_name[file_name_width] = '\0'; file_name[file_name_width] = '\0';
} }
mvwaddstr(win, i, 0, bg); mvwaddstr(win, i-offset_vertical, 0, bg);
mvwaddnstr(win, i-offset_vertical, offset_front+is_selected, file_name, line_width-offset_front-is_selected-2);
if(print_info) { if(print_info) {
mvwprintw(win, i, 0, "%ld", i); mvwprintw(win, i-offset_vertical, 0, "%ld", i);
mvwaddnstr(win, i, offset_front+is_selected, file_name, line_width-offset_front-is_selected-2);
free(file_name); free(file_name);
if (dir_content[i].file_type == FILE_TYPE_DIR || dir_content[i].file_type == FILE_TYPE_SYMLINK) { if (dir_content[i].file_type == FILE_TYPE_DIR || dir_content[i].file_type == FILE_TYPE_SYMLINK) {
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size); mvwprintw(win, i-offset_vertical, offset_back, "%ld", dir_content[i].file_size);
}else if (size_char =='B') { }else if (size_char =='B') {
mvwprintw(win, i, offset_back, "%0.0lf %c", printed_size, size_char); mvwprintw(win, i-offset_vertical, offset_back, "%0.0lf %c", printed_size, size_char);
} else { } else {
mvwprintw(win, i, offset_back, "%0.2lf %c", printed_size, size_char); mvwprintw(win, i-offset_vertical, offset_back, "%0.2lf %c", printed_size, size_char);
} }
} else { } else {
mvwaddnstr(win, i, 0, file_name, line_width); mvwaddnstr(win, i-offset_vertical, 0, file_name, line_width);
free(file_name); free(file_name);
} }

View File

@@ -272,7 +272,6 @@ void move_right(){
} }
} }
free(mime); free(mime);
free(extension);
} }
status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY); status |= (STATUS_RUN_BACKEND | STATUS_UPDATE_SCREEN_MASK | STATUS_RELOAD_DIRECTORY);
} }

View File

@@ -102,8 +102,8 @@ void *thread_mid(void *data){
mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER; mid_content[selected_file_last].status &= ~FILE_STATUS_HOVER;
} }
selected_file_last = selected_file_current; selected_file_last = selected_file_current;
free(file_current->file_name);
free(file_current->file_name);
file_current->file_name = malloc(strlen(mid_content[selected_file_current].file_name)); file_current->file_name = malloc(strlen(mid_content[selected_file_current].file_name));
strcpy(file_current->file_name, mid_content[selected_file_current].file_name); strcpy(file_current->file_name, mid_content[selected_file_current].file_name);
file_current->file_size = mid_content[selected_file_current].file_size; file_current->file_size = mid_content[selected_file_current].file_size;