improvenments to the rendered output, trunking of longer file names, no more dir sizes and indexes in lft and rgt

This commit is contained in:
nova
2025-07-15 02:45:45 +02:00
parent 2105bb4fe5
commit d9ae5c79af
3 changed files with 69 additions and 29 deletions

View File

@ -145,7 +145,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
} }
void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){ void print_dir(WINDOW *win, char print_info, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){
/* i am not proud of this function */ /* i am not proud of this function */
char *bg = malloc(*line_width); char *bg = malloc(*line_width);
@ -165,6 +165,7 @@ void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_c
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++) { for (i = file_offset; i < *dir_file_count && i < terminal_height; i++) {
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;
while (file_size > 1) { while (file_size > 1) {
@ -183,6 +184,7 @@ void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_c
} else { } else {
offset_back = *line_width - (snprintf(NULL,0,"%0.2lf %c", printed_size, size_char) + 1); offset_back = *line_width - (snprintf(NULL,0,"%0.2lf %c", printed_size, size_char) + 1);
} }
}
if (dir_content[i].status & FILE_STATUS_SELECTED) { if (dir_content[i].status & FILE_STATUS_SELECTED) {
is_selected = 1; is_selected = 1;
@ -200,9 +202,43 @@ void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_c
wattron(win, A_REVERSE); wattron(win, A_REVERSE);
} }
/* shortens the printed file name if it is too long
* example input: aaaaaaaa.txt
* example output: aaa~.txt
* if no extension is found, the name will truncate */
char *file_name;
if ((dir_content[i].file_name_width + offset_front + is_selected) > offset_back - 1) {
char *extension = strrchr(dir_content[i].file_name, '.');
if (extension) {
int char_offset = (dir_content[i].file_name_width + offset_front + is_selected) - (offset_back - 1) ;
if ((dir_content[i].file_name_width - char_offset - strlen(extension) - 1) > 1) {
file_name = malloc(dir_content[i].file_name_width - char_offset);
memcpy(file_name, dir_content[i].file_name, dir_content[i].file_name_width - char_offset);
memcpy(file_name + (dir_content[i].file_name_width - char_offset - strlen(extension)), extension, strlen(extension));
file_name[dir_content[i].file_name_width - char_offset - strlen(extension) - 1] = '~';
file_name[dir_content[i].file_name_width - char_offset] = '\0';
} else {
file_name = malloc(strlen(extension)+1);
file_name[0] = '~';
memcpy(file_name+1, extension, strlen(extension));
file_name[strlen(extension)] = '\0';
}
} else {
file_name = malloc(dir_content[i].file_name_width);
strcpy(file_name, dir_content[i].file_name);
}
} else {
file_name = malloc(dir_content[i].file_name_width);
strcpy(file_name, dir_content[i].file_name);
}
mvwaddstr(win, i, 0, bg); mvwaddstr(win, i, 0, bg);
if(print_info) {
mvwprintw(win, i, 0, "%ld", i); mvwprintw(win, i, 0, "%ld", i);
mvwaddnstr(win, i, offset_front+is_selected, dir_content[i].file_name, *line_width); mvwaddnstr(win, i, offset_front+is_selected, file_name, *line_width-offset_front-is_selected-2);
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_back, "%ld", dir_content[i].file_size);
}else if (size_char =='B') { }else if (size_char =='B') {
@ -210,6 +246,10 @@ void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_c
} else { } else {
mvwprintw(win, i, offset_back, "%0.2lf %c", printed_size, size_char); mvwprintw(win, i, offset_back, "%0.2lf %c", printed_size, size_char);
} }
} else {
mvwaddnstr(win, i, 0, file_name, *line_width);
free(file_name);
}
if (dir_content[i].status & FILE_STATUS_HOVER) { if (dir_content[i].status & FILE_STATUS_HOVER) {
wattroff(win, A_REVERSE); wattroff(win, A_REVERSE);

View File

@ -4,4 +4,4 @@
unsigned long get_dir_size(char *path); unsigned long get_dir_size(char *path);
void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content); void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content);
void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content); void print_dir(WINDOW *win, char print_info, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content);

View File

@ -69,7 +69,7 @@ void window_lft(WINDOW *win){
unsigned long local_height; unsigned long local_height;
getmaxyx(win, local_height, local_width); getmaxyx(win, local_height, local_width);
if (pthread_mutex_trylock(&mutex_lft) == 0) { if (pthread_mutex_trylock(&mutex_lft) == 0) {
print_dir(win, &local_width, &lft_file_count, lft_content); print_dir(win, 0, &local_width, &lft_file_count, lft_content);
pthread_mutex_unlock(&mutex_lft); pthread_mutex_unlock(&mutex_lft);
} else { } else {
@ -88,7 +88,7 @@ void window_mid(WINDOW *win){
if (mid_file_count == 0) { if (mid_file_count == 0) {
mvwprintw(win, 0, 0, "empty"); mvwprintw(win, 0, 0, "empty");
} else { } else {
print_dir(win, &local_width, &mid_file_count, mid_content); print_dir(win, 1, &local_width, &mid_file_count, mid_content);
} }
pthread_mutex_unlock(&mutex_mid); pthread_mutex_unlock(&mutex_mid);
} else { } else {
@ -113,7 +113,7 @@ void window_rgt(WINDOW *win){
} else { } else {
print_dir(win, &local_width, &rgt_file_count, rgt_content); print_dir(win, 0, &local_width, &rgt_file_count, rgt_content);
} }
pthread_mutex_unlock(&mutex_rgt); pthread_mutex_unlock(&mutex_rgt);
} else { } else {