summaryrefslogtreecommitdiff
path: root/src/platform/cygwin.sh
blob: 737e36762bd4d5f1723a2f211069212966df3981 (plain)
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
# Copyright (C) 2014 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
# This file is licensed under the GPLv2+. Please see COPYING for more information.

clip() {
	local sleep_argv0="password store sleep on display $DISPLAY"
	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
	local before="$(base64 < /dev/clipboard)"
	echo -n "$1" > /dev/clipboard
	(
		( exec -a "$sleep_argv0" sleep "$CLIP_TIME" )
		local now="$(base64 < /dev/clipboard)"
		[[ $now != $(echo -n "$1" | base64) ]] && before="$now"
		echo "$before" | base64 -d > /dev/clipboard
	) >/dev/null 2>&1 & disown
	echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds."
}

# replaces Cygwin-style filenames with their Windows counterparts
gpg_winpath() {
	local args=("$@")
	# as soon as an argument (from back to front) is no file, it can only be a filename argument if it is preceeded by '-o'
	local could_be_filenames="true"
	local i
	for ((i=${#args[@]}-1; i>=0; i--)); do
		if ( [ $i -gt 0 ] && [ "${args[$i-1]}" = "-o" ] && [ "${args[$i]}" != "-" ] ); then
			args[$i]="$(cygpath -am "${args[$i]}")"
		elif [ $could_be_filenames = "true" ]; then
			if [ -e "${args[$i]}" ]; then
				args[$i]="$(cygpath -am "${args[$i]}")"
			else
				could_be_filenames="false"
			fi
		fi
	done
	$GPG_ORIG "${args[@]}"
}

if $GPG --help | grep -q 'Home: [A-Z]:[/\\]'; then
	GPG_ORIG="$GPG"
	GPG=gpg_winpath
fi