aboutsummaryrefslogtreecommitdiff
path: root/files/.config/nnn/plugins/x2sel
diff options
context:
space:
mode:
Diffstat (limited to 'files/.config/nnn/plugins/x2sel')
-rwxr-xr-xfiles/.config/nnn/plugins/x2sel62
1 files changed, 62 insertions, 0 deletions
diff --git a/files/.config/nnn/plugins/x2sel b/files/.config/nnn/plugins/x2sel
new file mode 100755
index 0000000..95414fc
--- /dev/null
+++ b/files/.config/nnn/plugins/x2sel
@@ -0,0 +1,62 @@
+#!/usr/bin/env sh
+
+# Description: Copy system clipboard newline-separated file list to selection
+#
+# Dependencies:
+# - tr
+# - xclip/xsel (Linux)
+# - pbpaste (macOS)
+# - termux-clipboard-get (Termux)
+# - powershell (WSL)
+# - cygwim's /dev/clipboard (Cygwin)
+# - wl-paste (Wayland)
+# - clipboard (Haiku)
+#
+# Note:
+# - Limitation: breaks if a filename has newline in it
+#
+# Shell: POSIX compliant
+# Author: Léo Villeveygoux, after Arun Prakash Jana's .cbcp
+
+IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n
+
+selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
+
+getclip () {
+ if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
+ # Wayland
+ wl-paste
+ elif type xsel >/dev/null 2>&1; then
+ # Linux
+ xsel -bo
+ elif type xclip >/dev/null 2>&1; then
+ # Linux
+ xclip -sel clip -o
+ elif type pbpaste >/dev/null 2>&1; then
+ # macOS
+ pbpaste
+ elif type termux-clipboard-get >/dev/null 2>&1; then
+ # Termux
+ termux-clipboard-get
+ elif type powershell.exe >/dev/null 2>&1; then
+ # WSL
+ powershell.exe Get-Clipboard
+ elif [ -r /dev/clipboard ] ; then
+ # Cygwin
+ cat /dev/clipboard
+ elif type clipboard >/dev/null 2>&1; then
+ # Haiku
+ clipboard --print
+ fi
+}
+
+CLIPBOARD=$(getclip)
+
+# Check if clipboard actually contains a file list
+for file in $CLIPBOARD ; do
+ if [ ! -e "$file" ] ; then
+ exit 1;
+ fi
+done
+
+printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$selection"