Lay the groundwork for deleting files
This commit is contained in:
parent
eab8013601
commit
9979966610
2 changed files with 58 additions and 21 deletions
73
ccc.c
73
ccc.c
|
@ -18,6 +18,7 @@
|
||||||
/* functions' definitions */
|
/* functions' definitions */
|
||||||
void show_help();
|
void show_help();
|
||||||
void start_ccc();
|
void start_ccc();
|
||||||
|
char *check_trash_dir();
|
||||||
void change_dir(const char *buf, int selection, int ftype);
|
void change_dir(const char *buf, int selection, int ftype);
|
||||||
int mkdir_p(const char *destdir);
|
int mkdir_p(const char *destdir);
|
||||||
void populate_files(const char *path, int ftype);
|
void populate_files(const char *path, int ftype);
|
||||||
|
@ -39,8 +40,9 @@ long current_selection = 0;
|
||||||
bool dirs_size = DIRS_SIZE;
|
bool dirs_size = DIRS_SIZE;
|
||||||
bool show_hidden = SHOW_HIDDEN;
|
bool show_hidden = SHOW_HIDDEN;
|
||||||
bool file_details = SHOW_DETAILS;
|
bool file_details = SHOW_DETAILS;
|
||||||
|
char *trash_dir;
|
||||||
char *cwd;
|
char *cwd;
|
||||||
char *p_cwd; /* previous cwd */
|
char *p_cwd; /* previous cwd */
|
||||||
int half_width;
|
int half_width;
|
||||||
ArrayList *files;
|
ArrayList *files;
|
||||||
ArrayList *marked;
|
ArrayList *marked;
|
||||||
|
@ -234,25 +236,9 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
/* go to the trash dir */
|
/* go to the trash dir */
|
||||||
case 't':;
|
case 't':;
|
||||||
#ifdef TRASH_DIR
|
char *trash_dir = check_trash_dir();
|
||||||
char *trash_dir = TRASH_DIR;
|
if (trash_dir != NULL)
|
||||||
#else
|
|
||||||
char *trash_dir = getenv("CCC_TRASH");
|
|
||||||
#endif
|
|
||||||
if (trash_dir == NULL) {
|
|
||||||
wpprintw("$CCC_TRASH is not defined");
|
|
||||||
} else {
|
|
||||||
if (access(trash_dir, F_OK) != 0) {
|
|
||||||
/* create the directory with 755 perm if it doesn't exit */
|
|
||||||
if (mkdir_p(trash_dir) == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
case EACCES:
|
|
||||||
wpprintw("Parent directory does not allow write permission or one of directories does not allow search access");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
change_dir(trash_dir, 0, 0);
|
change_dir(trash_dir, 0, 0);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* show directories' sizes */
|
/* show directories' sizes */
|
||||||
|
@ -302,7 +288,10 @@ int main(int argc, char** argv)
|
||||||
/* delete */
|
/* delete */
|
||||||
case 'd':;
|
case 'd':;
|
||||||
if (marked->length) {
|
if (marked->length) {
|
||||||
;
|
char *trash_dir = check_trash_dir();
|
||||||
|
if (trash_dir != NULL)
|
||||||
|
/* do your magic here */
|
||||||
|
change_dir(trash_dir, 0, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -374,6 +363,50 @@ void start_ccc()
|
||||||
init_windows();
|
init_windows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Checks if trash directory is set and returns it */
|
||||||
|
char *check_trash_dir()
|
||||||
|
{
|
||||||
|
char *path = memalloc(PATH_MAX * sizeof(char));
|
||||||
|
|
||||||
|
#ifdef TRASH_DIR
|
||||||
|
trash_dir = TRASH_DIR;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* check if there is trash_dir */
|
||||||
|
if (trash_dir == NULL) {
|
||||||
|
wpprintw("No trash directory defined");
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
|
/* if trash_dir has ~ then make it $HOME */
|
||||||
|
/* use path as trash_dir */
|
||||||
|
if (trash_dir[0] == '~') {
|
||||||
|
char *home = getenv("HOME");
|
||||||
|
if (home == NULL) {
|
||||||
|
wpprintw("$HOME is not defined, can't read the trash directory");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* replace ~ with home */
|
||||||
|
snprintf(path, PATH_MAX, "%s%s", home, trash_dir + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strcpy(path, trash_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if has access to trash_dir */
|
||||||
|
if (access(path, F_OK) != 0) {
|
||||||
|
/* create the directory with 755 perm if it doesn't exit */
|
||||||
|
if (mkdir_p(path) == -1) {
|
||||||
|
switch (errno) {
|
||||||
|
case EACCES:
|
||||||
|
wpprintw("Parent directory does not allow write permission or one of directories does not allow search access");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change directory in window with selection
|
* Change directory in window with selection
|
||||||
*/
|
*/
|
||||||
|
|
6
config.h
6
config.h
|
@ -8,8 +8,12 @@
|
||||||
|
|
||||||
#define DRAW_BORDERS true /* Draw borders around windows? */
|
#define DRAW_BORDERS true /* Draw borders around windows? */
|
||||||
#define DRAW_PREVIEW true /* Draw file preview? */
|
#define DRAW_PREVIEW true /* Draw file preview? */
|
||||||
|
|
||||||
#define SHOW_HIDDEN true /* show hidden files/dotfiles in preview */
|
#define SHOW_HIDDEN true /* show hidden files/dotfiles in preview */
|
||||||
#define SHOW_DETAILS true /* show file details */
|
#define SHOW_DETAILS true /* show file details */
|
||||||
|
|
||||||
|
/* will create this directory if doesn't exist! */
|
||||||
|
#define TRASH_DIR "~/.local/ccc/trash/"
|
||||||
|
|
||||||
/* set width offset for windows:
|
/* set width offset for windows:
|
||||||
+-------------%-------------+
|
+-------------%-------------+
|
||||||
|
|
Loading…
Reference in a new issue