diff --git a/src/nnn.c b/src/nnn.c index e91d40d9..9a92e961 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -1205,6 +1205,18 @@ static bool xrm(char *path) return TRUE; } +static void archive_selection(const char *archive, const char *curpath) +{ + 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], archive); + spawn("sh", "-c", g_buf, curpath, F_NORMAL | F_SIGINT); +} + /* * Returns: * FALSE - a message is shown @@ -3658,17 +3670,8 @@ nochange: goto nochange; } - if (r == 's') { - 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); + r == 's' ? archive_selection(tmp, path) + : spawn(utils[APACK], tmp, dents[cur].name, path, F_NORMAL); break; case SEL_OPENWITH: dir = NULL;