]> Sergey Matveev's repositories - nnn.git/commitdiff
Add x2sel plugin (reverse .cbcp) (#494)
authorlvgx <l@vgx.fr>
Sat, 14 Mar 2020 04:45:56 +0000 (05:45 +0100)
committerGitHub <noreply@github.com>
Sat, 14 Mar 2020 04:45:56 +0000 (10:15 +0530)
This plugin is based on .cbcp and does basically the reverse operation.
It copies system clipboard newline-separated file list to selection.

plugins/README.md
plugins/x2sel [new file with mode: 0755]

index dc6ec6459bb30a8aa4dcd6f7adaab611d01d83d7..2e8aed6983a7587159b5db5f70485a44cc13e19b 100644 (file)
@@ -68,6 +68,7 @@ Plugins are installed to `${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins`.
 | upload | Paste text to ix.io, upload binary to file.io | sh | curl, jq, tr |
 | vidthumb | Show video thumbnails in terminal | sh | [ffmpegthumbnailer](https://github.com/dirkvdb/ffmpegthumbnailer),<br>[lsix](https://github.com/hackerb9/lsix) |
 | wall | Set wallpaper or change colorscheme | sh | nitrogen/pywal |
+| x2sel | Copy newline-separated file list from system clipboard to selection | sh | tr, xsel/xclip<br>pbpaste/wl-paste<br>termux-clipboard-get<br>powershell.exe/`/dev/clipboard`|
 
 ## Invoking a plugin
 
diff --git a/plugins/x2sel b/plugins/x2sel
new file mode 100755 (executable)
index 0000000..3113773
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/env sh
+
+# Description: Copy system clipboard newline-separated file list to selection
+# Requires: tr and
+#           xclip/xsel (Linux)
+#           pbpaste (macOS)
+#           termux-clipboard-get (Termux)
+#           powershell (WSL)
+#           cygwim's /dev/clipboard (Cygwin)
+#           wl-paste (Wayland)
+#
+# 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=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection
+
+getclip () {
+
+       if which xsel >/dev/null 2>&1; then
+               # Linux
+               xsel -bo
+       elif which xclip >/dev/null 2>&1; then
+               # Linux
+               xclip -sel clip -o
+       elif which pbpaste >/dev/null 2>&1; then
+               # macOS
+               pbpaste
+       elif which termux-clipboard-get >/dev/null 2>&1; then
+               # Termux
+               termux-clipboard-get
+       elif which powershell.exe >/dev/null 2>&1; then
+               # WSL
+               powershell.exe Get-Clipboard
+       elif [ -r /dev/clipboard ] ; then
+               # Cygwin
+               cat /dev/clipboard
+       elif which wl-paste >/dev/null 2>&1; then
+               # Wayland
+               wl-paste
+       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"