]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #304
authorArun Prakash Jana <engineerarun@gmail.com>
Wed, 10 Jul 2019 03:51:28 +0000 (09:21 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 10 Jul 2019 03:51:52 +0000 (09:21 +0530)
src/nnn.c

index 5f068437577aadadc2fd1fd6a554c31bf3eb45ba..6fa3d9c2d6853ea7bc3d08bf5d43afdd9860ab70 100644 (file)
--- 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;