improvenments to the rendering
This commit is contained in:
28
backend.c
28
backend.c
@ -69,13 +69,13 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
|
|||||||
memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1);
|
memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1);
|
||||||
|
|
||||||
lstat(full_path, file);
|
lstat(full_path, file);
|
||||||
free(full_path);
|
|
||||||
|
|
||||||
dir_content[i].file_size_bytes = file->st_size;
|
dir_content[i].file_size_bytes = file->st_size;
|
||||||
|
|
||||||
if (S_ISDIR(file->st_mode)) {
|
if (S_ISDIR(file->st_mode)) {
|
||||||
dir_content[i].file_type = FILE_TYPE_DIR;
|
dir_content[i].file_type = FILE_TYPE_DIR;
|
||||||
dir_content[i].color_pair = COLOR_DIR;
|
dir_content[i].color_pair = COLOR_DIR;
|
||||||
|
dir_content[i].file_size_bytes = get_dir_size(full_path);
|
||||||
} else if (file->st_mode & S_IXUSR) {
|
} else if (file->st_mode & S_IXUSR) {
|
||||||
dir_content[i].file_type = FILE_TYPE_EXEC;
|
dir_content[i].file_type = FILE_TYPE_EXEC;
|
||||||
dir_content[i].color_pair = COLOR_EXEC;
|
dir_content[i].color_pair = COLOR_EXEC;
|
||||||
@ -87,6 +87,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
|
|||||||
} else if (S_ISLNK(file->st_mode)) {
|
} else if (S_ISLNK(file->st_mode)) {
|
||||||
dir_content[i].file_type = FILE_TYPE_SYMLINK;
|
dir_content[i].file_type = FILE_TYPE_SYMLINK;
|
||||||
dir_content[i].color_pair = COLOR_SYMLINK;
|
dir_content[i].color_pair = COLOR_SYMLINK;
|
||||||
|
dir_content[i].file_size_bytes = get_dir_size(full_path);
|
||||||
} else if (S_ISFIFO(file->st_mode)) {
|
} else if (S_ISFIFO(file->st_mode)) {
|
||||||
dir_content[i].file_type = FILE_TYPE_FIFO;
|
dir_content[i].file_type = FILE_TYPE_FIFO;
|
||||||
dir_content[i].color_pair = COLOR_FIFO;
|
dir_content[i].color_pair = COLOR_FIFO;
|
||||||
@ -120,6 +121,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
|
|||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(full_path);
|
||||||
free(file);
|
free(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,28 +136,46 @@ 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, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){
|
||||||
|
|
||||||
|
|
||||||
char *hover_bg = malloc(*line_width+1);
|
char *hover_bg = malloc(*line_width+1);
|
||||||
memset(hover_bg, ' ', *line_width);
|
memset(hover_bg, ' ', *line_width);
|
||||||
hover_bg[*line_width] = '\0';
|
hover_bg[*line_width] = '\0';
|
||||||
|
|
||||||
unsigned long i = 0;
|
unsigned long i = 0;
|
||||||
|
unsigned long j = 0;
|
||||||
|
|
||||||
unsigned long offset_front = 2;
|
unsigned long offset_front = 2;
|
||||||
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 = 0; i < *dir_file_count; i++) {
|
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);
|
unsigned long offset_back = *line_width - (snprintf(NULL,0,"%ld",dir_content[i].file_size_bytes) + 1);
|
||||||
|
unsigned long allowed_width = *line_width+1;
|
||||||
wattron(win, COLOR_PAIR(dir_content[i].color_pair));
|
wattron(win, COLOR_PAIR(dir_content[i].color_pair));
|
||||||
|
|
||||||
if (dir_content[i].status & FILE_STATUS_HOVER) {
|
if (dir_content[i].status & FILE_STATUS_HOVER) {
|
||||||
wattron(win, A_REVERSE);
|
wattron(win, A_REVERSE);
|
||||||
mvwprintw(win, i, 0, "%s", hover_bg);
|
mvwprintw(win, i, 0, "%s", hover_bg);
|
||||||
mvwprintw(win, i, 0, "%ld", i);
|
mvwprintw(win, i, 0, "%ld", i);
|
||||||
mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name);
|
|
||||||
|
for (j = 0; j < dir_content[i].file_name_width ;j++) {
|
||||||
|
if (j >= offset_back-1) {
|
||||||
|
mvwaddch(win, i, j, '~');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]);
|
||||||
|
}
|
||||||
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
|
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
|
||||||
wattroff(win, A_REVERSE);
|
wattroff(win, A_REVERSE);
|
||||||
} else {
|
} else {
|
||||||
mvwprintw(win, i, 0, "%ld", i);
|
mvwprintw(win, i, 0, "%ld", i);
|
||||||
mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name);
|
for (j = 0; j < dir_content[i].file_name_width ;j++) {
|
||||||
|
if (j >= offset_back-1) {
|
||||||
|
mvwaddch(win, i, j, '~');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]);
|
||||||
|
}
|
||||||
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
|
mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes);
|
||||||
}
|
}
|
||||||
wattroff(win, COLOR_PAIR(dir_content[i].color_pair));
|
wattroff(win, COLOR_PAIR(dir_content[i].color_pair));
|
||||||
|
Reference in New Issue
Block a user