diff --git a/README.md b/README.md index 105481a6..7459a260 100644 --- a/README.md +++ b/README.md @@ -385,7 +385,7 @@ This is particularly useful if you are planning to copy the whole string to the #### 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`. +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`. `nnn` needs to know X is unavailable: @@ -394,15 +394,15 @@ A very common scenario on headless remote servers connected via SSH. As the clip 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/nnncp` - ls -ltr $(cat /tmp/nnncp) + ls -ltr `cat /tmp/nnncpuser` + ls -ltr $(cat /tmp/nnncpuser) # fish - ls -ltr (cat /tmp/nnncp) + ls -ltr (cat /tmp/nnncpuser) An alias may be handy: - alias ncp='cat /tmp/nnncp' + alias ncp='cat /tmp/nnncpuser' so you can - diff --git a/nnn.1 b/nnn.1 index 533f70dd..db0e8de3 100644 --- a/nnn.1 +++ b/nnn.1 @@ -248,7 +248,7 @@ screensaver. ------------------------------------- .Ed .Pp -\fBNNN_NO_X:\fR X display is unavailable. Copy file path(s) to \fI/tmp/nnncp\fR. +\fBNNN_NO_X:\fR X display is unavailable. Copy file path(s) to \fI/tmp/nnncp$USER\fR. .Bd -literal export NNN_NO_X=1 .Ed diff --git a/nnn.c b/nnn.c index 3f186ebc..0c4c695e 100644 --- a/nnn.c +++ b/nnn.c @@ -195,9 +195,6 @@ disabledbg() #define NUM_EVENT_FDS 1 #endif -/* File path to copy file names when X is not available */ -#define TMP_CP_PATH "/tmp/nnncp" - /* TYPE DEFINITIONS */ typedef unsigned long ulong; typedef unsigned int uint; @@ -317,6 +314,9 @@ static const char messages[][16] = /* For use in functions which are isolated and don't return the buffer */ static char g_buf[MAX_CMD_LEN] __attribute__ ((aligned)); +/* Buffer for file path copy file */ +static char g_cppath[48] __attribute__ ((aligned)); + /* Forward declarations */ static void redraw(char *path); @@ -635,7 +635,7 @@ xbasename(char *path) static void writecp(const char *buf, const size_t buflen) { - FILE *fp = fopen(TMP_CP_PATH, "w"); + FILE *fp = fopen(g_cppath, "w"); if (fp) { fwrite(buf, 1, buflen, fp); @@ -3318,9 +3318,14 @@ main(int argc, char *argv[]) cfg.quote = 1; /* Check if X11 is available */ - if (getenv("NNN_NO_X")) + 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); + } + signal(SIGINT, SIG_IGN); /* Test initial path */