]> Sergey Matveev's repositories - nnn.git/commitdiff
Create copy file in home dir, remove copy file on exit
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 6 Sep 2018 00:13:14 +0000 (05:43 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 6 Sep 2018 01:03:50 +0000 (06:33 +0530)
README.md
nnn.1
nnn.c

index e053132b1d0125dbee4e2f2e7d50cc0a1ef866d2..2424d454f9291e217894568aed9bde94964334a7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -391,7 +391,7 @@ Note that the filename is not escaped. So copying may still fail for filenames h
 
 #### copy file paths when X is missing
 
-A very common scenario on headless remote servers connected via SSH. As the clipboard is missing, `nnn` copies the path names to the tmp file `/tmp/nnncp$USER`.
+A very common scenario on headless remote servers connected via SSH. As the clipboard is missing, `nnn` copies the path names to the tmp file `$HOME/.nnncp`.
 
 `nnn` needs to know X is unavailable:
 
@@ -400,15 +400,15 @@ A very common scenario on headless remote servers connected via SSH. As the clip
 Use <kbd>^Y</kbd> and/or <kbd>^K</kbd> to copy file paths as usual. To use the copied paths from the cmdline, use command substitution:
 
     # bash/zsh
-    ls -ltr `cat /tmp/nnncpuser`
-    ls -ltr $(cat /tmp/nnncpuser)
+    ls -ltr `cat /home/user/.nnncp`
+    ls -ltr $(cat /home/user/.nnncp)
 
     # fish
-    ls -ltr (cat /tmp/nnncpuser)
+    ls -ltr (cat /home/user/.nnncp)
 
 An alias may be handy:
 
-    alias ncp='cat /tmp/nnncpuser'
+    alias ncp='cat /home/user/.nnncp'
 
 so you can -
 
diff --git a/nnn.1 b/nnn.1
index e420593480868500565449bf5681639011e9b5d2..985253dce35a22f07ba47fd81594658c3ba05a0a 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -257,7 +257,7 @@ screensaver.
     -------------------------------------
 .Ed
 .Pp
-\fBNNN_NO_X:\fR X display is unavailable. Copy file path(s) to \fI/tmp/nnncp$USER\fR.
+\fBNNN_NO_X:\fR X display is unavailable. Copy file path(s) to \fI$HOME/.nnncp\fR.
 .Bd -literal
     export NNN_NO_X=1
 .Ed
diff --git a/nnn.c b/nnn.c
index 853b218f2947e5ff5403b58428ac15d441b37bd3..a8bbfc04f7413e8a6c53dcf4694b914f72e21115 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -391,6 +391,8 @@ printerr(int linenum)
 {
        exitcurses();
        fprintf(stderr, "line %d: (%d) %s\n", linenum, errno, strerror(errno));
+       if (cfg.noxdisplay)
+               unlink(g_cppath);
        exit(1);
 }
 
@@ -608,21 +610,11 @@ writecp(const char *buf, const size_t buflen)
 {
        FILE *fp = fopen(g_cppath, "w");
 
-       if (!fp) {
-               struct passwd *pass = getpwuid(getuid());
-
-               xstrlcpy(g_cppath, "./nnncp", 11);
-               xstrlcpy(g_cppath + 10, pass->pw_name, 33);
-
-               fp = fopen(g_cppath, "w");
-               if (!fp)
-                       printwarn();
-       }
-
        if (fp) {
                fwrite(buf, 1, buflen, fp);
                fclose(fp);
-       }
+       } else
+               printwarn();
 }
 
 static bool
@@ -3431,11 +3423,8 @@ main(int argc, char *argv[])
        /* Check if X11 is available */
        if (getenv("NNN_NO_X")) {
                cfg.noxdisplay = 1;
-
-               struct passwd *pass = getpwuid(getuid());
-
-               xstrlcpy(g_cppath, "/tmp/nnncp", 11);
-               xstrlcpy(g_cppath + 10, pass->pw_name, 33);
+               size_t len = xstrlcpy(g_cppath, getenv("HOME"), 48);
+               xstrlcpy(g_cppath + len - 1, "/.nnncp", 48 - len);
        }
 
        signal(SIGINT, SIG_IGN);
@@ -3457,6 +3446,9 @@ main(int argc, char *argv[])
        browse(ipath, ifilter);
        exitcurses();
 
+       if (cfg.noxdisplay)
+               unlink(g_cppath);
+
 #ifdef LINUX_INOTIFY
        /* Shutdown inotify */
        if (inotify_wd >= 0)