From 365d54d6de5ad84238698f986649aa4af0fd8dae Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 28 Jul 2026 17:08:18 +0800 Subject: Implement status bar Print current working directory --- fm.c | 15 +++++++++++++++ fm.h | 2 ++ main.c | 10 +++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/fm.c b/fm.c index 2f9c66c..28a7ff3 100644 --- a/fm.c +++ b/fm.c @@ -147,6 +147,7 @@ fm_init(terminal *t) info->next = xmalloc(sizeof(file_list)); fm_file_list_init(info->cur, 30); fm_file_list_init(info->next, 30); + create_status_bar_win(t); return info; } @@ -405,3 +406,17 @@ open_with_editor(char **argv) return 0; } + +void +create_status_bar_win(terminal *t) +{ + wm_create_new_w(t, "status_bar", 1, t->maxx, t->maxy - 1, 0); +} + +void +draw_status_bar(window *bar_win, const char *cwd) +{ + werase(bar_win->win); + + mvwprintw(bar_win->win, bar_win->height - 1, 0, "%s", cwd); +} diff --git a/fm.h b/fm.h index e515d5a..b116a2d 100644 --- a/fm.h +++ b/fm.h @@ -61,4 +61,6 @@ bool fm_preview_file(window *w, const char *path); int open_with_editor(char **argv); void magic_init(void); void magic_cleanup(void); +void create_status_bar_win(terminal *t); +void draw_status_bar(window *bar_win, const char *cwd); #endif /* SF_FM_H */ diff --git a/main.c b/main.c index c475b29..f1d81db 100644 --- a/main.c +++ b/main.c @@ -37,7 +37,8 @@ static void path_normalize(char *path) return; } -int main(int argc, char **argv) +int +main(int argc, char **argv) { if (argc > 1 && (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0)) @@ -49,6 +50,10 @@ int main(int argc, char **argv) terminal *term = ncurses_init(); fm_info *info = fm_init(term); + int stat_bar_win_index = wm_fd_w_by_name(term, "status_bar"); + if (stat_bar_win_index == -1) { + log_write(LOG_WARN, "Cannot find window: status_bar"); + } need_redraw = true; if (argc == 2) { snprintf(info->cwd, sizeof(info->cwd), "%s", argv[1]); @@ -97,8 +102,11 @@ int main(int argc, char **argv) } } + draw_status_bar(term->windows[stat_bar_win_index], info->cwd); + wrefresh(info->windows[FM_PANE_RIGHT]->win); wrefresh(info->windows[FM_PANE_LEFT]->win); + wrefresh(term->windows[stat_bar_win_index]->win); ch = getch(); handling_keys(ch, info); -- cgit v1.2.3