char *help =
"alt Menu functions\n"
- "ret Enter directory\n"
+ "ret Go dir/View file\n"
"tab Change panel\n"
"<I> Page up\n"
"<K> Page down\n"
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]);
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':
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);
}
/* 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 */
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;
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++;
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
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;