set_color ((j == index) ? bred : red);
break;
case type_symb_e:
+ case type_ldir_e:
set_color ((j == index) ? bcyan : cyan);
break;
case type_reg_e:
case type_socket_e:
set_color ((j == index) ? bred : red);
break;
+ case type_erlk_e:
+ set_color ((j == index) ? bred : red);
+ break;
}
if (elem->selected) {
attron (A_BOLD);
switch (ch) {
case '\n':
case '\r':
- if ((list[panel]->tab + windir[panel]->index)->type == type_dir_e) {
- elem_t *elem = list[panel]->tab + windir[panel]->index;
- char *_dirname = newfilename (dirname[panel], elem->name);
+ current = list[panel]->tab + windir[panel]->index;
+ if ((current->type == type_dir_e) || (current->type == type_ldir_e)) {
+ char *_dirname = newfilename (dirname[panel], current->name);
free (dirname[panel]);
dirname[panel] = _dirname;
index_x[panel] = 0;
/* Basic 2 panels view and quit */
/* test: mkfifo .a && { sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d . -d /dev -d .. -v 1 && rm .a */
+/* test: mkdir .b && ln -s .b .a && { sleep 1; echo -e '\tk'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe -d .. -d /dev -d . -v 1 && rm .a && rmdir .b */
/* test: { sleep 1; echo -en '\eq'; sleep 1; echo -en '\e'; sleep 1; echo -en '\eq'; sleep 1; echo; } | fm.exe */
/* Help */
VERBOSE (ERROR, fprintf (stderr, "can't stat file '%s'\n", name));
exit (1);
}
- free (name);
size_t size = 0;
if (type == type_reg_e) {
elem->mode = 0777 & sb.st_mode;
elem->name = strdup (filename);
elem->size = size;
+#ifndef WIN32
+ if (type == type_symb_e) {
+ struct stat sb;
+ if (stat (name, &sb) == -1) {
+ type = type_erlk_e;
+ } else if ((sb.st_mode & S_IFMT) == S_IFDIR) {
+ type = type_ldir_e;
+ }
+ }
+#endif
elem->type = type;
+ free (name);
int width = strlen (filename);
if (width > list->width) {
case type_socket_e:
strcat (status, "socket");
break;
+ case type_ldir_e:
+ strcat (status, "dir.link");
+ break;
+ case type_erlk_e:
+ strcat (status, "error.link");
+ break;
}
if (elem->uid && *elem->uid) {
type_pipe_e,
type_symb_e,
type_reg_e,
- type_socket_e
+ type_socket_e,
+ type_ldir_e,
+ type_erlk_e
} type_t;
typedef struct {