aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c35
-rw-r--r--src/nnn.h4
2 files changed, 28 insertions, 11 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 9bf8e6c..309d7ef 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2286,7 +2286,8 @@ static bool show_help(char *path)
"b^O Open with... n Create new/link\n"
"cD File details ^R Rename entry\n"
"8⎵, ^K Copy entry path r Open dir in vidir\n"
- "8Y, ^Y Toggle selection y List selection\n"
+ "b^Y Toggle selection y List selection\n"
+ "cY Select all\n"
"cP Copy selection X Delete selection\n"
"cV Move selection ^X Delete entry\n"
"cf Archive entry F List archive\n"
@@ -2743,7 +2744,7 @@ static void redraw(char *path)
get_file_sym(dents[cur].mode));
}
} else
- printmsg("0 items");
+ printmsg("0/0");
}
if (mode_changed) {
@@ -3360,11 +3361,23 @@ nochange:
printmsg("selection on");
DPRINTF_S("selection on");
goto nochange;
- }
+ } // fallthrough
+ case SEL_COPYALL:
+ if (sel == SEL_COPYALL) {
+ if (!ndents) {
+ printmsg("0 entries");
+ goto nochange;
+ }
+ cfg.copymode = 0;
+ copybufpos = 0;
+ ncp = 0;
+ copystartid = 0;
+ copyendid = ndents - 1;
+ }
if (!ncp) { /* Handle range selection */
#ifndef DIR_LIMITED_COPY
- if (g_crc != crc8fast((uchar *)dents,
+ if ((sel != SEL_COPYALL) && g_crc != crc8fast((uchar *)dents,
ndents * sizeof(struct entry))) {
cfg.copymode = 0;
printmsg("range error: dir/content changed");
@@ -3372,13 +3385,15 @@ nochange:
goto nochange;
}
#endif
- if (cur < copystartid) {
- copyendid = copystartid;
- copystartid = cur;
- } else
- copyendid = cur;
+ if (sel != SEL_COPYALL) {
+ if (cur < copystartid) {
+ copyendid = copystartid;
+ copystartid = cur;
+ } else
+ copyendid = cur;
+ }
- if (copystartid < copyendid) {
+ if (copystartid < copyendid || sel == SEL_COPYALL) {
for (r = copystartid; r <= copyendid; ++r)
if (!appendfpath(newpath, mkpath(path,
dents[r].name, newpath)))
diff --git a/src/nnn.h b/src/nnn.h
index e105a25..8517578 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -73,6 +73,7 @@ enum action {
SEL_REDRAW,
SEL_COPY,
SEL_COPYMUL,
+ SEL_COPYALL,
SEL_COPYLIST,
SEL_CP,
SEL_MV,
@@ -189,7 +190,8 @@ static struct key bindings[] = {
{ ' ', SEL_COPY },
/* Toggle copy multiple file paths */
{ CONTROL('Y'), SEL_COPYMUL },
- { 'Y', SEL_COPYMUL },
+ /* Select all files in current dir */
+ { 'Y', SEL_COPYALL },
/* Show list of copied files */
{ 'y', SEL_COPYLIST },
/* Copy from copy buffer */