63 lines
1.4 KiB
Bash
Executable File
63 lines
1.4 KiB
Bash
Executable File
#!/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 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 wl-paste >/dev/null 2>&1; then
|
|
# Wayland
|
|
wl-paste
|
|
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"
|