summaryrefslogtreecommitdiff
path: root/.zsh/functions/pass
blob: ad780183d06ea30b45dee99638940881b88c1b1b (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#
# Add handling of special fields to 'pass'
#
# Syntax is: pass entry FIELD [-c|--clip]
# It is then tried to find "^FIELD: " inside the file and the value
# (i.e. without "FIELD: ") returned (optionally only to clipboard)
#
# There are aliases:
#   - user|User --> entry 'User'
#   - pin|PIN --> entry 'PIN'

local cmd subcmd entry xclip ppath
[[ $# -lt 1 ]] && { command pass; return }

cmd=$1
shift

# copied from pass sourcecode
clip() {
	# This base64 business is a disgusting hack to deal with newline inconsistancies
	# in shell. There must be a better way to deal with this, but because I'm a dolt,
	# we're going with this for now.

	before="$(xclip -o -selection clipboard | base64)"
	echo -n "$1" | xclip -selection clipboard
	(
		sleep 45
		now="$(xclip -o -selection clipboard | base64)"
		if [[ $now != $(echo -n "$1" | base64) ]]; then
			before="$now"
		fi

		# It might be nice to programatically check to see if klipper exists,
		# as well as checking for other common clipboard managers. But for now,
		# this works fine -- if qdbus isn't there or if klipper isn't running,
		# this essentially becomes a no-op.
		#
		# Clipboard managers frequently write their history out in plaintext,
		# so we axe it here:
		qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null

		echo "$before" | base64 -d | xclip -selection clipboard
	) &!
	echo "Copied $2 to clipboard. Will clear in 45 seconds."
}

TRAPEXIT () {
    unfunction clip
}

case $cmd in
    entry)
        subcmd=$1
        shift
        ;;
    [Uu]ser)
        subcmd="User"
        cmd="entry"
        ;;
    [pP][iI][nN])
        subcmd="PIN"
        cmd="entry"
        ;;
    *) command pass $cmd "$@"
       return
esac

ppath=$1

if [[ $ppath == "-c"  || $ppath == "--clip" ]]; then
    xclip=1
    ppath=$2
fi

entry="$(command pass show $ppath)"
ret=$?
if [[ $ret -ne 0 ]]; then
    # entry not found
    echo $entry
    return $ret
fi

entry="$(echo $entry | grep "$subcmd:" | sed -e "s/^$subcmd: //")"

if [[ -z $entry ]]; then
    echo "No '$subcmd:' entry found"
    return 11
else
    if [[ -n $xclip ]]; then
        clip "$entry" "entry of $ppath"
    else
        echo $entry
    fi
fi

# vim: ft=zsh
'>2014-04-20Don't use subshells for reading from find.Jason A. Donenfeld1-4/+4 2014-04-19bash-completion: fix completion-file's name in uninstallschalox1-1/+1 2014-04-19platform: Auto-detect local platform fileJason A. Donenfeld2-3/+3 2014-04-19platform: Allow custom platform file before installJason A. Donenfeld2-3/+5 2014-04-18reencrypt: cleaner temp file declarationJason A. Donenfeld1-4/+4 2014-04-18Remove unneeded semicolon.Jason A. Donenfeld1-14/+14 2014-04-18Check sneaky paths.Jason A. Donenfeld1-0/+15 2014-04-18Pruning: turns out rmdir does it for us with -p.Jason A. Donenfeld1-9/+3 2014-04-18Abstract remove empty directories into function.Jason A. Donenfeld1-14/+11 2014-04-18Remember to prune empty folders.Jason A. Donenfeld1-0/+8 2014-04-18init: allow deinitializationJason A. Donenfeld2-2/+18 2014-04-18bash-completion: filter dot files from resultsJason A. Donenfeld1-3/+8 2014-04-18reencrypt: remove option, do automaticallyJason A. Donenfeld5-39/+25 2014-04-18reencryption: add to completion filesJason A. Donenfeld3-1/+5 2014-04-18Specify variable gpg.Jason A. Donenfeld1-1/+1 2014-04-18style: don't escape new line on &&Jason A. Donenfeld1-2/+2 2014-04-18reencryption: remove temporary file on failureJason A. Donenfeld1-1/+1 2014-04-18reencryption: only reencrypt files when requiredJason A. Donenfeld2-16/+37 2014-04-17cp: typo as cvJason A. Donenfeld1-1/+1 2014-04-17bash: gpg_id is localJason A. Donenfeld1-0/+1 2014-04-17move/copy: always reencrypt passwords at destinationJason A. Donenfeld5-25/+56 2014-04-17makefile: allow platform files with gnu sedJason A. Donenfeld1-7/+8 2014-04-17mv: Add pass mv/rename supportJason A. Donenfeld5-3/+78 2014-04-17revelation2pass: add plain XML importJavali1-11/+15 2014-04-17platform: add cygwin supportJason A. Donenfeld2-1/+17