aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/x2sel
blob: 79856eb1453ac5d7f9aec2aebcf72fd638636617 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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=${NNN_SEL:-${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"