diff options
| -rw-r--r-- | src/nnn.c | 30 |
1 files changed, 25 insertions, 5 deletions
@@ -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; |