fl_fs: fixes return path from the linked directory

This commit is contained in:
2026-08-11 15:47:51 +03:00
parent 58d23fbf61
commit 247419fc93
3 changed files with 21 additions and 12 deletions
-8
View File
@@ -1,13 +1,5 @@
# TODO:
## Current:
- [ ] Sorting in the file list (local files):
- [x] Testing env
- [x] Test dlist
- [x] Dlist sort
- [ ] Bug: when returning back from the link
- [x] Better compatibility with Cyrillic symbols (use wchar_t everywhere)
## Global tasks:
- [ ] Testing
- [ ] Documentation
+20 -4
View File
@@ -175,6 +175,9 @@ static int get_files_from_fs(w_lfl_ui_t *fui, char *path) {
/* -> LINKS */
sprintf(name, "%s/%s", fui->d_path, dent->d_name);
r = readlink(name, l_path, INBUFSIZE);
for (int i = 1; l_path[r - 1] == '/'; i++) {
l_path[r - 1] = '\0';
}
wcsncpy(w_d_name, L"->/", 3);
mbstowcs(w_d_name + 3, dent->d_name, 253);
f_args.name = dent->d_name;
@@ -220,13 +223,22 @@ static void open_selected_item(w_lfl_ui_t *fui, w_cbrp_data *resp_data) {
if (selected_item->d_type == DT_DIR) {
if (!strcmp("..", selected_item->name)) {
strcpy(n_path, fui->d_path);
bash_case = strrchr(n_path, '/');
if (bash_case != NULL) {
*bash_case = '\0';
if (get_files_from_fs(fui, n_path)) {
if (fui->d_path_previous != NULL) {
if (get_files_from_fs(fui, fui->d_path_previous)) {
w_alert("Can't open the folder!");
return;
}
free(fui->d_path_previous);
fui->d_path_previous = NULL;
} else {
bash_case = strrchr(n_path, '/');
if (bash_case != NULL) {
*bash_case = '\0';
if (get_files_from_fs(fui, n_path)) {
w_alert("Can't open the folder!");
return;
}
}
}
} else {
dp_current = strlen(fui->d_path);
@@ -246,6 +258,8 @@ static void open_selected_item(w_lfl_ui_t *fui, w_cbrp_data *resp_data) {
resp_data->val.val.num = 1;
} else if (selected_item->d_type == DT_LNK) {
strcpy(n_path, selected_item->path);
fui->d_path_previous = malloc(sizeof(char) * (strlen(fui->d_path) + 1));
strcpy(fui->d_path_previous, fui->d_path);
if (get_files_from_fs(fui, n_path)) {
w_alert("Can't open the link!");
return;
@@ -337,6 +351,7 @@ w_lfl_ui_t *w_lfl_init(WINDOW **win, w_t *w_parent) {
fui->w.sz.y = getmaxy(win_par) / 10 * 8;
fui->max_lines = 0; /* detects on the first draw */
fui->cur_page = 1;
fui->d_path_previous = NULL;
return fui;
}
@@ -429,6 +444,7 @@ w_lfl_ui_t *w_lfl_init_win(app_t *app) {
/* get files */
char *path = get_current_dir_name();
get_files_from_fs(fui, path);
fui->d_path_previous = NULL;
return fui;
}
+1
View File
@@ -30,6 +30,7 @@ typedef struct {
WINDOW *win_info;
WINDOW *win_list;
char *d_path;
char *d_path_previous;
dlist_t *f_list;
dlist_node_t *page_start;
dlist_node_t *fl_selected;