blob: 756235238d7409aa5f0f62432e40cd24e1fbc5c1 (
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
97
98
99
100
101
102
|
#compdef keyringer
# Completion for git subcommand
_keyringer_git_complete() {
# TODO: how to call _git() properly?
return
}
_keyringer() {
local curcontext="$curcontext" state line
typeset -A opt_args
# Initial options
local config="$HOME/.keyringer"
# Check if we have initial configuration
if [ ! -d "$config" ]; then
return
fi
# Process config
local keyrings="`ls --color=never $config | sed -e '/^config$/d' | xargs`"
local keyring_path="`grep -e "^$words[2]=" "$config/config" | tail -n 1 | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | sed -e 's/ *#.*$//'`"
local instances="`echo $keyrings | sed -e 's/ /$\\\|^/g' -e 's/^/^/' -e 's/$/$/'`"
_arguments \
'1: :->keyring' \
'2: :->action' \
'3: :->options' \
'4: :->misc' \
'*: :->final'
case $state in
keyring)
_arguments "1:Keyrings:($keyrings)"
;;
action)
if echo $words[2] | grep -qe "$instances"; then
compadd "$@" `KEYRINGER_CHECK_RECIPIENTS=false KEYRINGER_CHECK_VERSION=false keyringer $words[2] commands`
else
compadd "$@" "init"
fi
;;
options)
case $words[3] in
options|preferences)
compadd "$@" ls edit add
;;
recipients)
compadd "$@" ls edit
;;
ls|tree|mkdir|encrypt|encrypt-batch|pwgen|decrypt|edit|append|append-batch|del|rm|recrypt|open|clip|xclip|sclip|find|mv|cp)
words[4]="`echo $words[4] | sed -e "s|^/*||"`" # avoid leading slash
compadd "$@" $(KEYRINGER_CHECK_RECIPIENTS=false KEYRINGER_CHECK_VERSION=false keyringer $words[2] ls -p -d $words[4]'*' 2> /dev/null)
;;
genkeys|genpair)
compadd "$@" gpg ssh x509 x509-self ssl ssl-self
;;
git)
compadd "$@" $(_keyringer_git_complete $words[4])
;;
init)
_files
;;
*)
;;
esac
;;
misc)
case "$words[3]" in
mv|cp)
words[5]="`echo $words[5] | sed -e "s|^/*||"`" # avoid leading slash
compadd "$@" $(KEYRINGER_CHECK_RECIPIENTS=false KEYRINGER_CHECK_VERSION=false keyringer $words[2] ls -p -d $words[5]'*' 2> /dev/null)
;;
recipients)
words[5]="$(echo $words[5] | sed -e "s|^/||")" # TODO: avoid leading slash
compadd "$@" $(cd $keyring_path/config/recipients && ls --color=never -p $words[5]* 2> /dev/null)
;;
genkeys|genpair)
words[5]="$(echo $words[5] | sed -e "s|^/||")" # TODO: avoid leading slash
compadd "$@" $(KEYRINGER_CHECK_RECIPIENTS=false KEYRINGER_CHECK_VERSION=false keyringer $words[2] ls -p -d $words[5]'*' 2> /dev/null)
;;
git)
compadd "$@" $(_keyringer_git_complete $words[4] $words[5])
;;
encrypt|encrypt-batch|pwgen)
_files
;;
*)
;;
esac
;;
*)
if [[ $words[3] == "git" ]]; then
# TODO
true
fi
;;
esac
}
_keyringer "$@"
|