From 41fcbd9b2f62668038b1ab31ce63d55062e31a2f Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Wed, 10 Jul 2019 09:21:28 +0530 Subject: [PATCH] Fix #304 --- src/nnn.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index 5f068437..6fa3d9c2 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -809,18 +809,19 @@ static size_t selectiontofd(int fd, uint *pcount) return pos; } -static void showcplist(void) +/* List selection from selection buffer */ +static bool showcplist(void) { int fd; size_t pos; if (!copybufpos) - return; + return FALSE; fd = create_tmp_file(); if (fd == -1) { DPRINTF_S("mkstemp failed!"); - return; + return FALSE; } pos = selectiontofd(fd, NULL); @@ -829,6 +830,26 @@ static void showcplist(void) if (pos && pos == copybufpos) spawn(pager, g_tmpfpath, NULL, NULL, F_CLI); unlink(g_tmpfpath); + + return TRUE; +} + +/* List selection from selection file (another instance) */ +static bool showcpfile(void) +{ + struct stat sb; + + if (stat(g_cppath, &sb) == -1) + return FALSE; + + /* Nothing selected if file size is 0 */ + if (!sb.st_size) + return FALSE; + + snprintf(g_buf, CMD_LEN_MAX, "cat %s | tr \'\\0\' \'\\n\'", g_cppath); + spawn("sh", "-c", g_buf, NULL, F_NORMAL | F_CMD); + + return TRUE; } static bool cpsafe(void) @@ -3923,8 +3944,7 @@ nochange: } continue; case SEL_COPYLIST: - if (copybufpos) { - showcplist(); + if (showcplist() || showcpfile()) { if (cfg.filtermode) presel = FILTER; break;