-
Notifications
You must be signed in to change notification settings - Fork 326
/
shell-support
113 lines (99 loc) · 2.68 KB
/
shell-support
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
103
104
105
106
107
108
109
110
111
112
# shell support for gm
alias gm="$HOME/.gm/bin/gm"
__gm_get_nodes() {
if [ -f "$HOME/.gm/gm.toml" ]; then
#Simplified grepping of sections
local NODES=""
for i in $(grep '^\[.\+\]$' "$HOME/.gm/gm.toml")
do
if [ "$i" = "[global]" ] || [ "$i" = "[global.hermes]" ]; then
continue
fi
o="${i##[}"
NODES="$NODES ${o%%]}"
done
echo "$NODES"
fi
}
__gm_hermes_get_nodes() {
if [ -f "$HOME/.gm/gm.toml" ] && [ -n "$(which stoml)" ]; then
local NODES=""
local GLOBAL_ADD_TO_HERMES="$(stoml "$HOME/.gm/gm.toml" global.add_to_hermes || echo "false")"
if [ "$GLOBAL_ADD_TO_HERMES" != "true" ]; then
GLOBAL_ADD_TO_HERMES="false"
fi
for node in $(__gm_get_nodes)
do
local ADD_TO_HERMES="$(stoml "$HOME/.gm/gm.toml" "${node}.add_to_hermes" || echo "${GLOBAL_ADD_TO_HERMES}")"
if [ "$ADD_TO_HERMES" == "true" ]; then
NODES="$NODES $node"
fi
done
echo "$NODES"
else
__gm_get_nodes
fi
}
_gm_nodes() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds="$(__gm_get_nodes)"
while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
}
_gm_nodes_log() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds="$(__gm_get_nodes) -f -r"
while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
}
_gm_hermes_nodes() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds="$(__gm_hermes_get_nodes)"
while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
}
_gm_complete_commands() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds="help hermes install keys log ports start status stop reset rm version"
while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
}
_gm_hermes_complete_commands() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds="help config keys cc"
while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
}
_gm() {
local i=1 cmd
# find the subcommand
while [[ "$i" -lt "$COMP_CWORD" ]]
do
local s="${COMP_WORDS[i]}"
case "$s" in
--*)
cmd="$s"
break
;;
-*)
;;
*)
cmd="$s"
break
;;
esac
(( i++ ))
done
if [[ "$i" -eq "$COMP_CWORD" ]]
then
_gm_complete_commands
return
fi
# subcommands have their own completion functions
case "$cmd" in
hermes) _gm_hermes_complete_commands ;;
keys) _gm_nodes ;;
log) _gm_nodes_log ;;
ports) _gm_nodes ;;
start) _gm_nodes ;;
stop) _gm_nodes ;;
*) ;;
esac
}
# Todo: hermes subcommands can use some shell-completion love
complete -o bashdefault -o default -F _gm gm