#include #include #include #include #include #include #include #include #include #include #include #include #include #include "dir.h" #include "display.h" #include "err.h" #include "fm.h" #include "keys.h" #include "log.h" #include "mem.h" #include "version.h" #include "wm.h" static void path_normalize(char *path) { if (!path) return; char new_path[PATH_MAX]; if (realpath(path, new_path)) { path = new_path; } else { return; } return; } int main(int argc, char **argv) { if (argc > 1 && (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0)) version(); int ch; file_list *list; log_init(); terminal *term = ncurses_init(); fm_info *info = fm_init(term); if (argc == 2) { snprintf(info->cwd, sizeof(info->cwd), "%s", argv[1]); path_normalize(info->cwd); } else { fm_getcwd(info); } info->cur = fm_getdir(info->cur, info->cwd); magic_init(); char next_path[PATH_MAX]; timeout(100); while (1) { if (info->need_redraw) { fm_draw_entries(info->windows[FM_PANE_LEFT], info->cur, info->cursor, info->top, info->bottom); if (!info->cur->items[info->cursor].is_dir) { snprintf(next_path, sizeof(next_path), "%s/%s", info->cwd, info->cur->items[info->cursor].name); fm_preview_file(info->windows[FM_PANE_RIGHT], next_path); } else { snprintf(next_path, sizeof(next_path), "%s/%s", info->cwd, info->cur->items[info->cursor].name); file_list *new_list = info->next; new_list = fm_getdir(new_list, next_path); if (new_list) { info->next = new_list; int right_height = info->windows[FM_PANE_RIGHT] ->height; fm_draw_entries( info->windows[FM_PANE_RIGHT], info->next, -1, 0, right_height); } } wrefresh(info->windows[FM_PANE_RIGHT]->win); wrefresh(info->windows[FM_PANE_LEFT]->win); } ch = getch(); handling_keys(ch, info); } magic_cleanup(); endwin(); return 0; }