Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit 3465b0a7001392cf9d874e9f2b81d790a4733f46 Author: Raniconduh <clagv.randomgames@gmail.com> Date: Mon Oct 11 22:41:29 2021 +0000 added support for marked files in 'd' command diff --git a/include/dir.h b/include/dir.h index 7e9075c..c9015ab 100644 --- a/include/dir.h +++ b/include/dir.h @@ -86 +87 @@ int list_dir(char *);  void free_dir_entries(void);  void cd_back(void);  void enter_dir(char *); +void remove_marked(void);      enum file_type_t { diff --git a/src/dir.c b/src/dir.c index 32c2773..03bb073 100644 --- a/src/dir.c +++ b/src/dir.c @@ -66 +67 @@  #include <stdbool.h>    #include "dir.h" +#include "io.h"    char * cwd = NULL;   @@ -1263 +12714 @@ void enter_dir(char * name) {   strcat(cwd, name);   setenv("PWD", cwd, true);  } + + +void remove_marked(void) { + for (size_t i = 0; i < n_dir_entries; i++) { + if (dir_entries[i]->marked) { + char p[strlen(cwd) + strlen(dir_entries[i]->name) + 1]; + sprintf(p, "%s/%s", cwd, dir_entries[i]->name); + if (remove(p) == 0) n_marked_files--; + } + } +} diff --git a/src/main.c b/src/main.c index 4231b67..6f5d026 100644 --- a/src/main.c +++ b/src/main.c @@ -1309 +13023 @@ int main(int argc, char ** argv) {   case 'd':   if (dir_entries[cursor - 1]->file_type == FILE_DIR)   break; + char * args[] = {"No", "Yes", NULL}; + if (n_marked_files) { + char * p = malloc(40); + sprintf(p, "Remove all marked files? (%lu)", n_marked_files); + char * resp = prompt(p, args); + free(p); + if (!resp || strcmp(resp, "Yes")) break; + remove_marked(); + free_dir_entries(); + list_dir(cwd); + cursor = 1; + first_f = 0; + last_f = LAST_F; + break; + }   char * name = dir_entries[cursor - 1]->name;   char * p = malloc(20 + strlen(name)); - char * args[] = {"No", "Yes", NULL};   sprintf(p, "Delete the file '%s'?", name);   char * resp = prompt(p, args);   free(p);