commit - 367a887c7ef88a3899ecddf946802ff3d3f6f759
commit + 7ecf03450e8c1307a15b44f0933c9a4bc2e97c03
blob - 7bed83348d81e26990d3297c869fc9a1ccbfc5bd
blob + 376bbb56211c83e64fd005014ce830f1af016e0c
--- rover.c
+++ rover.c
typedef struct Row {
char *name;
off_t size;
+ mode_t mode;
int marked;
} Row;
/* Macros for accessing global state. */
#define ENAME(I) rover.rows[I].name
#define ESIZE(I) rover.rows[I].size
+#define EMODE(I) rover.rows[I].mode
#define MARKED(I) rover.rows[I].marked
#define SCROLL rover.scroll[rover.tab]
#define ESEL rover.esel[rover.tab]
marking = !strcmp(CWD, rover.marks.dirpath);
for (i = 0, j = SCROLL; i < HEIGHT && j < rover.nfiles; i++, j++) {
ishidden = ENAME(j)[0] == '.';
- isdir = ISDIR(ENAME(j));
+ isdir = S_ISDIR(EMODE(j));
if (j == ESEL)
wattr_on(rover.window, A_REVERSE, NULL);
if (ishidden)
int isdir1, isdir2, cmpdir;
const Row *r1 = a;
const Row *r2 = b;
- isdir1 = ISDIR(r1->name);
- isdir2 = ISDIR(r2->name);
+ isdir1 = S_ISDIR(r1->mode);
+ isdir2 = S_ISDIR(r2->mode);
cmpdir = isdir2 - isdir1;
return cmpdir ? cmpdir : strcoll(r1->name, r2->name);
}
rows[i].name = malloc(strlen(ep->d_name) + 2);
strcpy(rows[i].name, ep->d_name);
strcat(rows[i].name, "/");
+ rows[i].mode = statbuf.st_mode;
i++;
}
} else if (flags & SHOW_FILES) {
rows[i].name = malloc(strlen(ep->d_name) + 1);
strcpy(rows[i].name, ep->d_name);
rows[i].size = statbuf.st_size;
+ rows[i].mode = statbuf.st_mode;
i++;
}
}
{
ESEL = 0;
if (!ISDIR(target))
- while ((ESEL+1) < rover.nfiles && ISDIR(ENAME(ESEL)))
+ while ((ESEL+1) < rover.nfiles && S_ISDIR(EMODE(ESEL)))
ESEL++;
while ((ESEL+1) < rover.nfiles && strcoll(ENAME(ESEL), target) < 0)
ESEL++;
SCROLL = MAX(SCROLL - RV_JUMP, 0);
update_view();
} else if (!strcmp(key, RVK_CD_DOWN)) {
- if (!rover.nfiles || !ISDIR(ENAME(ESEL))) continue;
+ if (!rover.nfiles || !S_ISDIR(EMODE(ESEL))) continue;
strcat(CWD, ENAME(ESEL));
cd(1);
} else if (!strcmp(key, RVK_CD_UP)) {
reload();
}
} else if (!strcmp(key, RVK_VIEW)) {
- if (!rover.nfiles || ISDIR(ENAME(ESEL))) continue;
+ if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue;
program = getenv("PAGER");
if (program) {
ARGS[0] = program;
spawn();
}
} else if (!strcmp(key, RVK_EDIT)) {
- if (!rover.nfiles || ISDIR(ENAME(ESEL))) continue;
+ if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue;
program = getenv("EDITOR");
if (program) {
ARGS[0] = program;
message("Delete selected entry? (Y to confirm)", YELLOW);
if (getch() == 'Y') {
const char *name = ENAME(ESEL);
- int ret = ISDIR(name) ? deldir(name) : delfile(name);
+ int ret = S_ISDIR(EMODE(ESEL)) ? deldir(name) : delfile(name);
reload();
if (ret)
message("Could not delete entry.", RED);