Support file cp, mv, rm through selection

This commit is contained in:
Arun Prakash Jana 2018-11-11 04:59:26 +05:30
parent 721ac62f72
commit 4407f29dd3
No known key found for this signature in database
GPG key ID: A75979F35C080412
3 changed files with 54 additions and 4 deletions

View file

@ -254,7 +254,7 @@ optional args:
? Help, settings ? Help, settings
q Quit context q Quit context
^G Quit and cd ^G Quit and cd
Q, ^X Quit Q, ^Q Quit
``` ```
Help & settings, file details, media info and archive listing are shown in the PAGER. Please use the PAGER-specific keys in these screens. Help & settings, file details, media info and archive listing are shown in the PAGER. Please use the PAGER-specific keys in these screens.

View file

@ -782,6 +782,7 @@ static void spawn(const char *file, const char *arg1, const char *arg2, const ch
if (flag & F_SIGINT) if (flag & F_SIGINT)
signal(SIGINT, SIG_DFL); signal(SIGINT, SIG_DFL);
execlp(file, file, arg1, arg2, NULL); execlp(file, file, arg1, arg2, NULL);
_exit(1); _exit(1);
} else { } else {
@ -2007,7 +2008,7 @@ static int show_help(char *path)
"e? Help, settings\n" "e? Help, settings\n"
"eq Quit context\n" "eq Quit context\n"
"d^G Quit and cd\n" "d^G Quit and cd\n"
"aQ, ^X Quit\n\n"}; "aQ, ^Q Quit\n\n"};
if (fd == -1) if (fd == -1)
return -1; return -1;
@ -2984,6 +2985,7 @@ nochange:
r = mkpath(path, dents[cur].name, newpath, PATH_MAX); r = mkpath(path, dents[cur].name, newpath, PATH_MAX);
if (!appendfpath(newpath, r)) if (!appendfpath(newpath, r))
goto nochange; goto nochange;
++ncp; ++ncp;
printmsg(newpath); printmsg(newpath);
} else if (cfg.quote) { } else if (cfg.quote) {
@ -3013,6 +3015,7 @@ nochange:
writecp(newpath, r - 1); /* Truncate NULL from end */ writecp(newpath, r - 1); /* Truncate NULL from end */
else else
spawn(copier, newpath, NULL, NULL, F_NOTRACE); spawn(copier, newpath, NULL, NULL, F_NOTRACE);
printmsg(newpath); printmsg(newpath);
} }
goto nochange; goto nochange;
@ -3067,6 +3070,41 @@ nochange:
else else
printmsg("multi-copy off"); printmsg("multi-copy off");
goto nochange; goto nochange;
case SEL_CP:
case SEL_MV:
case SEL_RMMUL:
{
char *cmd;
if (!g_cppath[0]) {
printmsg("copy file not found");
goto nochange;
}
if (sel == SEL_CP)
r = asprintf(&cmd, "xargs -0 -d \'\n\' -a %s cp -ir --preserve=all -t .", g_cppath);
else if (sel == SEL_MV)
r = asprintf(&cmd, "xargs -0 -d \'\n\' -a %s mv -i -t .", g_cppath);
else /* SEL_RMMUL */
r = asprintf(&cmd, "xargs -0 -d \'\n\' -a %s rm -Ir", g_cppath);
if (r == -1) {
printwarn();
goto nochange;
}
spawn("sh", "-c", cmd, path, F_NORMAL | F_SIGINT);
free(cmd);
copycurname();
if (cfg.filtermode)
presel = FILTER;
goto begin;
}
case SEL_RM:
lastname[0] = '\0';
if (cfg.filtermode)
presel = FILTER;
goto begin;
case SEL_QUOTE: case SEL_QUOTE:
cfg.quote ^= 1; cfg.quote ^= 1;
DPRINTF_D(cfg.quote); DPRINTF_D(cfg.quote);

View file

@ -69,6 +69,10 @@ enum action {
SEL_COPY, SEL_COPY,
SEL_COPYMUL, SEL_COPYMUL,
SEL_COPYLIST, SEL_COPYLIST,
SEL_CP,
SEL_MV,
SEL_RMMUL,
SEL_RM,
SEL_QUOTE, SEL_QUOTE,
SEL_OPEN, SEL_OPEN,
SEL_NEW, SEL_NEW,
@ -192,6 +196,14 @@ static struct key bindings[] = {
{ CONTROL('Y'), SEL_COPYMUL, "", "" }, { CONTROL('Y'), SEL_COPYMUL, "", "" },
/* Show list of copied files */ /* Show list of copied files */
{ 'y', SEL_COPYLIST, "", "" }, { 'y', SEL_COPYLIST, "", "" },
/* Copy from copy buffer */
{ 'P', SEL_CP, "", "" },
/* Move from copy buffer */
{ 'V', SEL_MV, "", "" },
/* Delete from copy buffer */
{ CONTROL('X'), SEL_RMMUL, "", "" },
/* Delete currently selected */
{ 'X', SEL_RM, "", "" },
/* Toggle quote on while copy */ /* Toggle quote on while copy */
{ CONTROL('T'), SEL_QUOTE, "", "" }, { CONTROL('T'), SEL_QUOTE, "", "" },
/* Open in a custom application */ /* Open in a custom application */
@ -221,5 +233,5 @@ static struct key bindings[] = {
{ CONTROL('G'), SEL_CDQUIT, "", "" }, { CONTROL('G'), SEL_CDQUIT, "", "" },
/* Quit */ /* Quit */
{ 'Q', SEL_QUIT, "", "" }, { 'Q', SEL_QUIT, "", "" },
{ CONTROL('X'), SEL_QUIT, "", "" }, { CONTROL('Q'), SEL_QUIT, "", "" },
}; };