From eaff9b74f5a6818809ca95c522c50fa5e18ee3f4 Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 21 Jul 2026 20:43:29 +0800 Subject: Implement initialize and creating windows for file manager --- fm.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ fm.h | 19 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 fm.c create mode 100644 fm.h diff --git a/fm.c b/fm.c new file mode 100644 index 0000000..7ea798b --- /dev/null +++ b/fm.c @@ -0,0 +1,51 @@ +#include "fm.h" + +#include "display.h" +#include "err.h" +#include "wm.h" + +static fm_info* fm_w_init(terminal* t) { + fm_info* f = xmalloc(sizeof(fm_info)); + f->fm_l = xmalloc(sizeof(window)); + f->fm_r = xmalloc(sizeof(window)); + int i = wm_fd_w_by_name(t, "stat"); + if (i == -1) { + die("Cannot find window \"stat\""); + } + + int fm_w = t->maxx / 2; + int fm_h = t->maxy - t->windows[i]->height; + int fm_starty = t->windows[i]->height - STAT_BAR_HEIGHT; + + int fm_l_startx = 0; + int fm_r_startx = t->maxx / 2; + + window* fm_l = + wm_create_new_w(t, "fm_l", fm_h, fm_w, fm_starty, fm_l_startx); + window* fm_r = + wm_create_new_w(t, "fm_r", fm_h, fm_w, fm_starty, fm_r_startx); + if (!fm_l || !fm_r) { + die("Cannot create file manager window"); + } + f->fm_l->height = fm_h; + log_write(LOG_INFO, "fm_h = %d", fm_h); + log_write(LOG_INFO, "f->fm_l->height = %d", f->fm_l->height); + f->fm_l->width = fm_w; + f->fm_l->start_y = fm_starty; + f->fm_l->start_x = fm_l_startx; + f->fm_l->win = fm_l->win; + + f->fm_r->height = fm_h; + f->fm_r->width = fm_w; + f->fm_r->start_y = fm_starty; + f->fm_r->start_x = fm_r_startx; + f->fm_r->win = fm_r->win; + wborder(f->fm_l->win, ' ', ACS_VLINE, ' ', ' ', ' ', ' ', ' ', ' '); + + return f; +} +void fm_getdir(fm_info* f); +fm_info* fm_init(terminal* t) { + fm_info* f = fm_w_init(t); + return f; +} diff --git a/fm.h b/fm.h new file mode 100644 index 0000000..fd26d4b --- /dev/null +++ b/fm.h @@ -0,0 +1,19 @@ +#ifndef SF_FM_H +#define SF_FM_H + +#include + +#include "wm.h" + +typedef struct { + window *fm_l, *fm_r; + char** cur_contents; + char** next_dir_contents; + int content_idx; +} fm_info; + +static fm_info* fm_w_init(terminal* t); +void fm_getdir(fm_info* f); +fm_info* fm_init(terminal* t); + +#endif /* SF_FM_H */ -- cgit v1.2.3