diff --git a/README.md b/README.md index a8451a7a..527f10ba 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ Press ? in `nnn` to see the list anytime. Y Select all P Copy selection X Delete selection V Move selection ^X Delete entry - f Archive entry F List archive + f Archive files F List archive ^F Extract archive m M Brief/full media info e Edit in EDITOR p Open in PAGER ORDER TOGGLES diff --git a/nnn.1 b/nnn.1 index 8f239296..f7db4d24 100644 --- a/nnn.1 +++ b/nnn.1 @@ -113,7 +113,7 @@ Delete files from selection .It Ic ^X Delete entry .It Ic f -Archive entry +Archive files .It Ic F List files in archive .It Ic ^F diff --git a/src/nnn.c b/src/nnn.c index c6b26c0a..9e6c7ac7 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -2300,7 +2300,7 @@ static bool show_help(char *path) "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" + "cf Archive files F List archive\n" "b^F Extract archive m M Brief/full media info\n" "ce Edit in EDITOR p Open in PAGER\n" "1ORDER TOGGLES\n" @@ -3512,7 +3512,7 @@ nochange: { switch (sel) { case SEL_ARCHIVE: - tmp = xreadline(dents[cur].name, "name: "); + tmp = xreadline(NULL, "archive name: "); break; case SEL_OPENWITH: tmp = xreadline(NULL, "open with: "); @@ -3545,10 +3545,24 @@ nochange: /* newpath is used as temporary buffer */ if (!getutil(utils[APACK])) { printmsg("utility missing"); - continue; + goto nochange; } - spawn(utils[APACK], tmp, dents[cur].name, path, F_NORMAL); + r = get_input("archive selection (else current)? [s]"); + if (r == 's') { + if (!cpsafe()) + goto nochange; + + snprintf(g_buf, CMD_LEN_MAX, +#ifdef __linux__ + "xargs -0 -a %s %s %s", +#else + "cat %s | xargs -0 -o %s %s", +#endif + g_cppath, utils[APACK], tmp); + spawn("sh", "-c", g_buf, path, F_NORMAL | F_SIGINT); + } else + spawn(utils[APACK], tmp, dents[cur].name, path, F_NORMAL); break; case SEL_OPENWITH: dir = NULL;