commit - 5fc8b927fcb7c5d814eaae082e8c1f349ee6cc4f
commit + 548a3163f1a077b634340da5d20f1d404196bb91
blob - b32bf6571b8f586bff3b3fcf791cfd67a974f19e
blob + b035754bc1f82097904b417d693c9c1ab397414c
--- config.h
+++ config.h
#define RVK_TG_MARK "m"
#define RVK_INVMARK "M"
#define RVK_MARKALL "a"
+#define RVK_DELETE "X"
/* Colors available: DEFAULT, RED, GREEN, YELLOW, BLUE, CYAN, MAGENTA, WHITE. */
#define RVC_CWD GREEN
blob - ab6b85f9dd8d90542ce12b8060703560340a2930
blob + 4cf7b7f90451a423393f00599c6f977f0f8f2d79
--- rover.c
+++ rover.c
for (i = 0; i < rover.nfiles; i++)
MARKED(i) = 0;
update();
+}
+
+static void
+delete_dir(const char *path)
+{
+ DIR *dp;
+ struct dirent *ep;
+ struct stat statbuf;
+ char subpath[FILENAME_MAX];
+
+ if((dp = opendir(path)) == NULL)
+ return;
+ while ((ep = readdir(dp))) {
+ if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, ".."))
+ continue;
+ sprintf(subpath, "%s%s", path, ep->d_name);
+ stat(subpath, &statbuf);
+ if (S_ISDIR(statbuf.st_mode)) {
+ strcat(subpath, "/");
+ delete_dir(subpath);
+ }
+ else
+ unlink(subpath);
+ }
+ closedir(dp);
+ rmdir(path);
+}
+
+static void
+delete_marked()
+{
+ int i;
+ char path[FILENAME_MAX];
+
+ for (i = 0; i < rover.marks.bulk; i++)
+ if (rover.marks.entries[i]) {
+ sprintf(path, "%s%s", rover.marks.dirpath, rover.marks.entries[i]);
+ if (strchr(rover.marks.entries[i], '/'))
+ delete_dir(path);
+ else
+ unlink(path);
+ }
}
/* Do a fork-exec to external program (e.g. $EDITOR). */
MARKED(i) = 1;
}
update();
+ }
+ else if (!strcmp(key, RVK_DELETE)) {
+ delete_marked();
+ cd(1);
}
}
if (rover.nfiles)