From: Laurent MAZET Date: Tue, 21 Jan 2025 17:15:23 +0000 (+0100) Subject: Enter/return to view a file X-Git-Tag: v1.0~14 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=3be1e25e56b028133594e3b76e742db7028c9521;p=fm.git Enter/return to view a file --- diff --git a/display.c b/display.c index 6fcb8f4..f6d543d 100644 --- a/display.c +++ b/display.c @@ -252,6 +252,7 @@ void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *in break; case type_symb_e: case type_ldir_e: + case type_lreg_e: set_color ((j == index) ? bcyan : cyan); break; case type_reg_e: diff --git a/fm.c b/fm.c index a3014c9..801d339 100644 --- a/fm.c +++ b/fm.c @@ -36,7 +36,7 @@ int width = 0; char *help = "alt Menu functions\n" - "ret Enter directory\n" + "ret Go dir/View file\n" "tab Change panel\n" " Page up\n" " Page down\n" @@ -243,8 +243,8 @@ int main (int argc, char *argv[]) if (dir == NULL) { char *msg = strdupcat ("Can't open directory '", _dirname, "'", NULL); errorwindow (msg, winscreen); - free (msg); - free (_dirname); + free (msg); + free (_dirname); } else { closedir (dir); free (dirname[panel]); @@ -255,6 +255,22 @@ int main (int argc, char *argv[]) list[panel] = NULL; page[panel] = 0; } + } else if ((current->type == type_reg_e) || (current->type == type_lreg_e)) { + for (i = 0; i < MAXPANELS; i++) { + elementwindow (winelem[i], "", NULL); + } + menuwindow (winmenu, "Help up(I) down(J) Quit", NULL); + char *src = newfilename (dirname[panel], current->name); + char *status = strdupcat ("Viewing file '", src, "'", NULL); + elementwindow (winelem[0], status, NULL); + free (status); + char *msg = filewindow (src, winscreen); + if (msg) { + errorwindow (msg, winscreen); + free (msg); + } + free (src); + menuwindow (winmenu, menu, &index_menu); } break; case '\t': @@ -444,7 +460,7 @@ int main (int argc, char *argv[]) break; case ALT_V: /* view */ current = list[panel]->tab + windir[panel]->index; - if (strcmp (current->name, "..") != 0) { + if ((current->type == type_reg_e) || (current->type == type_lreg_e)) { for (i = 0; i < MAXPANELS; i++) { elementwindow (winelem[i], "", NULL); } @@ -572,7 +588,7 @@ int main (int argc, char *argv[]) /* test: ln -s .b .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo; sleep 1; echo ; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */ /* View */ -/* test: echo -ne 'Begin\n This is a test\nEnd' > .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo -n kkk; sleep 1; echo -n iii; sleep 1; echo -n h; sleep 1; echo; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */ +/* test: echo -ne 'Begin\n This is a test\nEnd' > .a && { sleep 1; echo -n 'k'; sleep 1; echo; sleep 1; echo -n kkk; sleep 1; echo -n iii; sleep 1; echo -n h; sleep 1; echo; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */ /* test: cp fm.c .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 1000); do echo -n k; done; sleep 1; for i in $(seq 1 1000); do echo -n i; done; sleep 1; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */ /* test: cp fm.c .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; echo -n KKKK; sleep 1; echo -n IIII; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */ /* test: cp debug.o .a && { sleep 1; echo -n 'k'; sleep 1; echo -en '\ev'; sleep 1; for i in $(seq 1 100); do echo -n k; done; sleep 1; for i in $(seq 1 100); do echo -n i; done; sleep 1; echo -n q; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -x 60 -y 20 && rm .a */ diff --git a/function.c b/function.c index e252289..a8f9c4e 100644 --- a/function.c +++ b/function.c @@ -104,8 +104,7 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) char *name = newfilename (dirname, filename); STAT (name, &sb); - size_t size = 0; - if ((type == type_unkn_e) || (type == type_reg_e)) { + if (type == type_unkn_e) { switch (sb.st_mode & S_IFMT) { case S_IFBLK: type = type_block_e; @@ -133,10 +132,11 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) break; #endif } + } - if (type == type_reg_e) { - size = sb.st_size; - } + size_t size = 0; + if (type == type_reg_e) { + size = sb.st_size; } list->nb++; @@ -166,6 +166,8 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type) type = type_erlk_e; } else if ((sb.st_mode & S_IFMT) == S_IFDIR) { type = type_ldir_e; + } else if ((sb.st_mode & S_IFMT) == S_IFREG) { + type = type_lreg_e; } } #endif @@ -339,6 +341,9 @@ void createstatus (char *status, elem_t *elem) case type_ldir_e: strcat (status, "dir.link"); break; + case type_lreg_e: + strcat (status, "file.link"); + break; case type_erlk_e: strcat (status, "error.link"); break; diff --git a/type.h b/type.h index 0f8d0b0..c5ff5a0 100644 --- a/type.h +++ b/type.h @@ -11,6 +11,7 @@ typedef enum { type_reg_e, type_socket_e, type_ldir_e, + type_lreg_e, type_erlk_e } type_t;