From bc572df55a35cc738466996abe26339fc5acaeda Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Fri, 24 Apr 2020 10:12:24 +0530 Subject: [PATCH] NNN_SEL: custom selection file --- README.md | 2 +- nnn.1 | 2 ++ plugins/.cbcp | 16 ++++++++-------- plugins/.nmv | 2 +- plugins/.nnn-plugin-helper | 2 +- plugins/chksum | 2 +- plugins/diffs | 2 +- plugins/dragdrop | 2 +- plugins/kdeconnect | 8 ++++---- plugins/mocplay | 2 +- plugins/renamer | 2 +- plugins/splitjoin | 2 +- plugins/x2sel | 4 ++-- src/nnn.c | 23 ++++++++++++++++------- 14 files changed, 41 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index c1fe1956..696f74a4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ CircleCI Status Privacy Awareness License -Donate via PayPal! +Donate via PayPal!

diff --git a/nnn.1 b/nnn.1 index 350f48fd..5048bb07 100644 --- a/nnn.1 +++ b/nnn.1 @@ -421,6 +421,8 @@ separated by \fI;\fR: NOTE: Only the first character is considered if not a \fICtrl+key\fR combo. .Ed .Pp +\fBNNN_SEL:\fR absolute path to custom selection file. +.Pp \fBnnn:\fR this is a special variable set to the hovered entry before executing a command from the command prompt or spawning a shell. .Pp diff --git a/plugins/.cbcp b/plugins/.cbcp index 022e88a3..8830e90e 100755 --- a/plugins/.cbcp +++ b/plugins/.cbcp @@ -19,27 +19,27 @@ IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n -SELECTION=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} if which xsel >/dev/null 2>&1; then # Linux - tr '\0' '\n' < "$SELECTION" | xsel -bi + tr '\0' '\n' < "$selection" | xsel -bi elif which xclip >/dev/null 2>&1; then # Linux - tr '\0' '\n' < "$SELECTION" | xclip -sel clip + tr '\0' '\n' < "$selection" | xclip -sel clip elif which pbcopy >/dev/null 2>&1; then # macOS - tr '\0' '\n' < "$SELECTION" | pbcopy + tr '\0' '\n' < "$selection" | pbcopy elif which termux-clipboard-set >/dev/null 2>&1; then # Termux - tr '\0' '\n' < "$SELECTION" | termux-clipboard-set + tr '\0' '\n' < "$selection" | termux-clipboard-set elif which clip.exe >/dev/null 2>&1; then # WSL - tr '\0' '\n' < "$SELECTION" | clip.exe + tr '\0' '\n' < "$selection" | clip.exe elif which clip >/dev/null 2>&1; then # Cygwin - tr '\0' '\n' < "$SELECTION" | clip + tr '\0' '\n' < "$selection" | clip elif which wl-copy >/dev/null 2>&1; then # Wayland - tr '\0' '\n' < "$SELECTION" | wl-copy + tr '\0' '\n' < "$selection" | wl-copy fi diff --git a/plugins/.nmv b/plugins/.nmv index 023328df..77625466 100755 --- a/plugins/.nmv +++ b/plugins/.nmv @@ -21,7 +21,7 @@ TMPDIR="${TMPDIR:-/tmp}" INCLUDE_HIDDEN="${INCLUDE_HIDDEN:-0}" VERBOSE="${VERBOSE:-0}" -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} exit_status=0 dst_file=$(mktemp "$TMPDIR/.nnnXXXXXX") diff --git a/plugins/.nnn-plugin-helper b/plugins/.nnn-plugin-helper index a42ee697..06b3bcbe 100644 --- a/plugins/.nnn-plugin-helper +++ b/plugins/.nnn-plugin-helper @@ -5,7 +5,7 @@ # Shell: POSIX compliant # Author: Anna Arad -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} export selection ## Set CUR_CTX to 1 to open directory in current context diff --git a/plugins/chksum b/plugins/chksum index 0c13da2e..1514de72 100755 --- a/plugins/chksum +++ b/plugins/chksum @@ -14,7 +14,7 @@ # Shell: POSIX compliant # Author: ath3, Arun Prakash Jana -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} resp=f chsum=md5 diff --git a/plugins/diffs b/plugins/diffs index ff85aa8f..294c5e77 100755 --- a/plugins/diffs +++ b/plugins/diffs @@ -10,7 +10,7 @@ # Shell: POSIX compliant # Authors: Arun Prakash Jana, ath3 -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} if which nvim >/dev/null 2>&1; then diffcmd="nvim -d" diff --git a/plugins/dragdrop b/plugins/dragdrop index bbbd19e7..bc01d870 100755 --- a/plugins/dragdrop +++ b/plugins/dragdrop @@ -13,7 +13,7 @@ # Shell: POSIX compliant # Author: 0xACE -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} resp=f all= if which dragon-drag-and-drop >/dev/null 2>&1; then diff --git a/plugins/kdeconnect b/plugins/kdeconnect index 9ee2e600..f1cfd95b 100755 --- a/plugins/kdeconnect +++ b/plugins/kdeconnect @@ -5,13 +5,13 @@ # Shell: POSIX compliant # Author: juacq97 -SELECTION=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} id=$(kdeconnect-cli -a --id-only | awk '{print $1}') -if [ "$(find "$SELECTION")" ]; then - kdeconnect-cli -d "$id" --share "$(cat "$SELECTION")" +if [ "$(find "$selection")" ]; then + kdeconnect-cli -d "$id" --share "$(cat "$selection")" # If you want a system notification, uncomment the next 3 lines. -# notify-send -a "Kdeconnect" "Sending $(cat "$SELECTION")" +# notify-send -a "Kdeconnect" "Sending $(cat "$selection")" #else # notify-send -a "Kdeconnect" "No file selected" fi diff --git a/plugins/mocplay b/plugins/mocplay index 6f5a2a08..5db44b94 100755 --- a/plugins/mocplay +++ b/plugins/mocplay @@ -12,7 +12,7 @@ # Author: Arun Prakash Jana, ath3 IFS="$(printf '\n\r')" -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} cmd=$(pgrep -x mocp 2>/dev/null) ret=$cmd diff --git a/plugins/renamer b/plugins/renamer index 8ea2d928..4c157648 100755 --- a/plugins/renamer +++ b/plugins/renamer @@ -12,7 +12,7 @@ # Shell: POSIX compliant # Author: José Neder -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} if command -v qmv >/dev/null 2>&1; then batchrenamesel="qmv -fdo -da" diff --git a/plugins/splitjoin b/plugins/splitjoin index fcd49de3..545eadb4 100755 --- a/plugins/splitjoin +++ b/plugins/splitjoin @@ -8,7 +8,7 @@ # Shell: POSIX compliant # Authors: Arun Prakash Jana, ath3 -selection=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} resp=s if [ -s "$selection" ]; then diff --git a/plugins/x2sel b/plugins/x2sel index 31137730..79856eb1 100755 --- a/plugins/x2sel +++ b/plugins/x2sel @@ -16,7 +16,7 @@ IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n -SELECTION=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection +selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} getclip () { @@ -54,4 +54,4 @@ for file in $CLIPBOARD ; do fi done -printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$SELECTION" +printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$selection" diff --git a/src/nnn.c b/src/nnn.c index 86b09d45..ef1b50ac 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -579,8 +579,9 @@ static const char * const messages[] = { #define NNNLVL 5 #define NNN_PIPE 6 #define NNN_MCLICK 7 -#define NNN_ARCHIVE 8 /* strings end here */ -#define NNN_TRASH 9 /* flags begin here */ +#define NNN_SEL 8 +#define NNN_ARCHIVE 9 /* strings end here */ +#define NNN_TRASH 10 /* flags begin here */ static const char * const env_cfg[] = { "NNN_OPTS", @@ -591,6 +592,7 @@ static const char * const env_cfg[] = { "NNNLVL", "NNN_PIPE", "NNN_MCLICK", + "NNN_SEL", "NNN_ARCHIVE", "NNN_TRASH", }; @@ -6612,16 +6614,23 @@ static bool setup_config(void) /* Set selection file path */ if (!cfg.picker) { - /* Length of "/.config/nnn/.selection" */ - selpath = (char *)malloc(len + 3); + char *env_sel = xgetenv(env_cfg[NNN_SEL], NULL); + if (env_sel) + selpath = xstrdup(env_sel); + else + /* Length of "/.config/nnn/.selection" */ + selpath = (char *)malloc(len + 3); + if (!selpath) { xerror(); return FALSE; } - r = xstrsncpy(selpath, cfgdir, len + 3); - xstrsncpy(selpath + r - 1, "/.selection", 12); - DPRINTF_S(selpath); + if (!env_sel) { + r = xstrsncpy(selpath, cfgdir, len + 3); + xstrsncpy(selpath + r - 1, "/.selection", 12); + DPRINTF_S(selpath); + } } return TRUE;