From 0a21d90ad5c8e5cc4eb52a454b7aa32e642c431d Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Tue, 27 Nov 2018 22:37:06 +0530 Subject: [PATCH] Fix #143: support copy to clipboard --- nnn.1 | 10 ++++------ scripts/copier/copier.sh | 4 +--- src/nnn.c | 10 +++++----- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/nnn.1 b/nnn.1 index 998529c5..68862112 100644 --- a/nnn.1 +++ b/nnn.1 @@ -283,15 +283,13 @@ files. .Pp \fBNNN_COPIER:\fR set to a clipboard copier script. For example, on Linux: .Bd -literal - ------------------------------------- + ----------------------------------------- #!/bin/sh - # comment the next line to convert newlines to spaces - IFS= - echo -n $1 | xsel --clipboard --input - ------------------------------------- + cat /path/to/.nnncp | xargs -0 | xsel -bi + ----------------------------------------- - If it's not set, by default file paths are copied to the tmp file \fBDIR/.nnncp\fR, where 'DIR' (by priority) is: \fI$HOME\fR or, \fI$TMPDIR\fR or, \fI/tmp\fR. + Note: By default file paths are copied to the tmp file \fBDIR/.nnncp\fR, where 'DIR' (by priority) is: \fI$HOME\fR or, \fI$TMPDIR\fR or, \fI/tmp\fR. .Ed .Pp \fBNNN_SCRIPT:\fR path to a custom script to invoke with currently selected file name as argument 1. diff --git a/scripts/copier/copier.sh b/scripts/copier/copier.sh index 5629301d..0f5a1957 100755 --- a/scripts/copier/copier.sh +++ b/scripts/copier/copier.sh @@ -1,5 +1,3 @@ #!/bin/sh -# comment the next line to convert newlines to spaces -IFS= -echo -n $1 | `xsel --clipboard --input` +cat /path/to/.nnncp | xargs -0 | xsel -bi diff --git a/src/nnn.c b/src/nnn.c index d48ce6e3..c673c55d 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -3008,7 +3008,7 @@ nochange: writecp(newpath, r - 1); /* Truncate NULL from end */ if (copier) - spawn(copier, newpath, NULL, NULL, F_NOTRACE); + spawn(copier, NULL, NULL, NULL, F_NOTRACE); } printmsg(newpath); goto nochange; @@ -3047,7 +3047,7 @@ nochange: if (copybufpos) { /* File path(s) written to the buffer */ writecp(pcopybuf, copybufpos - 1); /* Truncate NULL from end */ if (copier) - spawn(copier, pcopybuf, NULL, NULL, F_NOTRACE); + spawn(copier, NULL, NULL, NULL, F_NOTRACE); if (ncp) { /* Some files cherry picked */ snprintf(newpath, PATH_MAX, "%d files copied", ncp); @@ -3085,11 +3085,11 @@ nochange: } if (sel == SEL_CP) - snprintf(g_buf, MAX_CMD_LEN, "cat %s | xargs -0 cp -ir --preserve=all -t .", g_cppath); + snprintf(g_buf, MAX_CMD_LEN, "xargs -0 -a %s cp -ir --preserve=all -t .", g_cppath); else if (sel == SEL_MV) - snprintf(g_buf, MAX_CMD_LEN, "cat %s | xargs -0 mv -i -t .", g_cppath); + snprintf(g_buf, MAX_CMD_LEN, "xargs -0 -a %s mv -i -t .", g_cppath); else /* SEL_RMMUL */ - snprintf(g_buf, MAX_CMD_LEN, "cat %s | xargs -0 rm -Ir", g_cppath); + snprintf(g_buf, MAX_CMD_LEN, "xargs -0 -a %s rm -Ir", g_cppath); spawn("sh", "-c", g_buf, path, F_NORMAL | F_SIGINT);