Browse Source

Fix #89: User-specific tmp file for copying filenames

Use distinct (by username) tmp filename to copy file paths.

The pattern used is:
/tmp/nnncp$USER

If username is 'arun', the file name is `/tmp/nnncparun`.
master
Arun Prakash Jana 7 years ago
parent
commit
3036b8a733
No known key found for this signature in database GPG Key ID: A75979F35C080412
3 changed files with 16 additions and 11 deletions
  1. +5
    -5
      README.md
  2. +1
    -1
      nnn.1
  3. +10
    -5
      nnn.c

+ 5
- 5
README.md View File

@@ -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 #### 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: `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 <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: 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 # bash/zsh
ls -ltr `cat /tmp/nnncp`
ls -ltr $(cat /tmp/nnncp)
ls -ltr `cat /tmp/nnncpuser`
ls -ltr $(cat /tmp/nnncpuser)


# fish # fish
ls -ltr (cat /tmp/nnncp)
ls -ltr (cat /tmp/nnncpuser)


An alias may be handy: An alias may be handy:


alias ncp='cat /tmp/nnncp'
alias ncp='cat /tmp/nnncpuser'


so you can - so you can -




+ 1
- 1
nnn.1 View File

@@ -248,7 +248,7 @@ screensaver.
------------------------------------- -------------------------------------
.Ed .Ed
.Pp .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 .Bd -literal
export NNN_NO_X=1 export NNN_NO_X=1
.Ed .Ed


+ 10
- 5
nnn.c View File

@@ -195,9 +195,6 @@ disabledbg()
#define NUM_EVENT_FDS 1 #define NUM_EVENT_FDS 1
#endif #endif


/* File path to copy file names when X is not available */
#define TMP_CP_PATH "/tmp/nnncp"

/* TYPE DEFINITIONS */ /* TYPE DEFINITIONS */
typedef unsigned long ulong; typedef unsigned long ulong;
typedef unsigned int uint; 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 */ /* For use in functions which are isolated and don't return the buffer */
static char g_buf[MAX_CMD_LEN] __attribute__ ((aligned)); static char g_buf[MAX_CMD_LEN] __attribute__ ((aligned));


/* Buffer for file path copy file */
static char g_cppath[48] __attribute__ ((aligned));

/* Forward declarations */ /* Forward declarations */
static void redraw(char *path); static void redraw(char *path);


@@ -635,7 +635,7 @@ xbasename(char *path)
static void static void
writecp(const char *buf, const size_t buflen) writecp(const char *buf, const size_t buflen)
{ {
FILE *fp = fopen(TMP_CP_PATH, "w");
FILE *fp = fopen(g_cppath, "w");


if (fp) { if (fp) {
fwrite(buf, 1, buflen, fp); fwrite(buf, 1, buflen, fp);
@@ -3318,9 +3318,14 @@ main(int argc, char *argv[])
cfg.quote = 1; cfg.quote = 1;


/* Check if X11 is available */ /* Check if X11 is available */
if (getenv("NNN_NO_X"))
if (getenv("NNN_NO_X")) {
cfg.noxdisplay = 1; 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); signal(SIGINT, SIG_IGN);


/* Test initial path */ /* Test initial path */


Loading…
Cancel
Save