README.md | 10 +++++-----
nnn.1 | 2 +-
nnn.c | 26 +++++++++-----------------
diff --git a/README.md b/README.md
index e053132b1d0125dbee4e2f2e7d50cc0a1ef866d2..2424d454f9291e217894568aed9bde94964334a7 100644
--- a/README.md
+++ b/README.md
@@ -391,7 +391,7 @@ Note that the filename is not escaped. So copying may still fail for filenames having quote(s) in them.
#### 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 @@
Use ^Y and/or ^K 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
--- a/nnn.1
+++ b/nnn.1
@@ -257,7 +257,7 @@ echo -n $1 | xsel --clipboard --input
-------------------------------------
.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
--- 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 @@
/* 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);
@@ -3456,6 +3445,9 @@ #endif
initcurses();
browse(ipath, ifilter);
exitcurses();
+
+ if (cfg.noxdisplay)
+ unlink(g_cppath);
#ifdef LINUX_INOTIFY
/* Shutdown inotify */