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);
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)
}
continue;
case SEL_COPYLIST:
- if (copybufpos) {
- showcplist();
+ if (showcplist() || showcpfile()) {
if (cfg.filtermode)
presel = FILTER;
break;