diff --git a/backend.c b/backend.c index ee78f31..3a4b540 100644 --- a/backend.c +++ b/backend.c @@ -45,9 +45,9 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten for (i = 0; i < *dir_file_count; i++ ) { if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { } else { - dir_content[i].file_name_width = sizeof(entry[i]->d_name) / sizeof(char);; - dir_content[i].file_name = malloc(dir_content[i].file_name_width * sizeof(char)); - memcpy(dir_content[i].file_name, entry[i]->d_name, dir_content[i].file_name_width); + dir_content[i].file_name_width = strlen(entry[i]->d_name); + dir_content[i].file_name = malloc(dir_content[i].file_name_width); + strcpy(dir_content[i].file_name, entry[i]->d_name); struct stat *file; file = malloc(sizeof(struct stat)); @@ -124,24 +124,34 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten } -void print_dir(WINDOW *win, 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){ + + char *hover_bg = malloc(*line_width); + memset(hover_bg, ' ', *line_width); + hover_bg[*line_width] = '\0'; unsigned long i = 0; - unsigned int offset = 2; + unsigned long offset_front = 2; if (*dir_file_count > 9) { - offset = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1; + offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1; } for (i = 0; i < *dir_file_count; i++) { + unsigned long offset_back = *line_width - (snprintf(NULL,0,"%ld",dir_content[i].file_size_bytes) + 1); wattron(win, COLOR_PAIR(dir_content[i].color_pair)); if (dir_content[i].status & FILE_STATUS_HOVER) { wattron(win, A_REVERSE); + mvwprintw(win, i, 0, "%s", hover_bg); mvwprintw(win, i, 0, "%ld", i); - mvwprintw(win, i, offset, "%s", dir_content[i].file_name); + mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name); + mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); wattroff(win, A_REVERSE); } else { mvwprintw(win, i, 0, "%ld", i); - mvwprintw(win, i, offset, "%s", dir_content[i].file_name); + mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name); + mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); } wattroff(win, COLOR_PAIR(dir_content[i].color_pair)); } + free(hover_bg); } + diff --git a/backend.h b/backend.h index 74e6c2b..b74c6a7 100644 --- a/backend.h +++ b/backend.h @@ -4,4 +4,4 @@ unsigned long get_dir_size(char *path); void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content); -void print_dir(WINDOW *win, 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); diff --git a/window.c b/window.c index 7ed2603..528fc52 100644 --- a/window.c +++ b/window.c @@ -63,7 +63,7 @@ void window_lft(WINDOW *win){ pthread_mutex_unlock(&mutex_rgt); } else { - print_dir(win, &lft_file_count, lft_content); + print_dir(win, &local_width, &lft_file_count, lft_content); pthread_mutex_unlock(&mutex_lft); } } @@ -80,7 +80,7 @@ void window_mid(WINDOW *win){ pthread_mutex_unlock(&mutex_rgt); } else { - print_dir(win, &mid_file_count, mid_content); + print_dir(win, &local_width, &mid_file_count, mid_content); pthread_mutex_unlock(&mutex_mid); } } @@ -100,7 +100,7 @@ void window_rgt(WINDOW *win){ if (rgt_content[0].file_type == FILE_TYPE_OPEN_FILE) { mvwprintw(win, 0, 0, "%s", rgt_buffer); } else { - print_dir(win, &rgt_file_count, rgt_content); + print_dir(win, &local_width, &rgt_file_count, rgt_content); } pthread_mutex_unlock(&mutex_rgt); }