#### 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:
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/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 -
-------------------------------------
.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
#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;
/* 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);
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);
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 */