From 028e04abd35d2c306b27b445e4be59329f57d88f Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Thu, 6 Sep 2018 05:43:14 +0530 Subject: [PATCH] Create copy file in home dir, remove copy file on exit --- README.md | 10 +++++----- nnn.1 | 2 +- nnn.c | 26 +++++++++----------------- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index e053132b..2424d454 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 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 ^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 e4205934..985253dc 100644 --- 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 853b218f..a8bbfc04 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 @@ 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)