#!/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)
#   - cygwin'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 powershell.exe >/dev/null 2>&1; then
		# WSL
		powershell.exe -noprofile -command Get-Clipboard | tr -d '\r'
	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 [ -r /dev/clipboard ] ; then
		# Cygwin
		cat /dev/clipboard
	elif type clipboard >/dev/null 2>&1; then
		# Haiku
		clipboard --print
	fi
}

CLIPBOARD=$(getclip)

if [ -z "$CLIPBOARD" ]; then
	echo "No content in clipboard"
	exit 1
fi

# Check if clipboard actually contains a file list
for file in $CLIPBOARD ; do
	if [ ! -e "$file" ] ; then
		echo "'$file' is not a file"
		exit 1;
	fi
done

printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$selection"
