-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmykotlinapp_completion
181 lines (159 loc) · 5.97 KB
/
mykotlinapp_completion
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/usr/bin/env bash
#
# mykotlinapp Bash Completion
# =======================
#
# Bash completion support for the `mykotlinapp` command,
# generated by [picocli](http://picocli.info/) version 3.8.2.
#
# Installation
# ------------
#
# 1. Source all completion scripts in your .bash_profile
#
# cd $YOUR_APP_HOME/bin
# for f in $(find . -name "*_completion"); do line=". $(pwd)/$f"; grep "$line" ~/.bash_profile || echo "$line" >> ~/.bash_profile; done
#
# 2. Open a new bash console, and type `mykotlinapp [TAB][TAB]`
#
# 1a. Alternatively, if you have [bash-completion](https://github.com/scop/bash-completion) installed:
# Place this file in a `bash-completion.d` folder:
#
# * /etc/bash-completion.d
# * /usr/local/etc/bash-completion.d
# * ~/bash-completion.d
#
# Documentation
# -------------
# The script is called by bash whenever [TAB] or [TAB][TAB] is pressed after
# 'mykotlinapp (..)'. By reading entered command line parameters,
# it determines possible bash completions and writes them to the COMPREPLY variable.
# Bash then completes the user input if only one entry is listed in the variable or
# shows the options if more than one is listed in COMPREPLY.
#
# References
# ----------
# [1] http://stackoverflow.com/a/12495480/1440785
# [2] http://tiswww.case.edu/php/chet/bash/FAQ
# [3] https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
# [4] http://zsh.sourceforge.net/Doc/Release/Options.html#index-COMPLETE_005fALIASES
# [5] https://stackoverflow.com/questions/17042057/bash-check-element-in-array-for-elements-in-another-array/17042655#17042655
# [6] https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html#Programmable-Completion
#
if [ -n "$BASH_VERSION" ]; then
# Enable programmable completion facilities when using bash (see [3])
shopt -s progcomp
elif [ -n "$ZSH_VERSION" ]; then
# Make alias a distinct command for completion purposes when using zsh (see [4])
setopt COMPLETE_ALIASES
alias compopt=complete
fi
# ArrContains takes two arguments, both of which are the name of arrays.
# It creates a temporary hash from lArr1 and then checks if all elements of lArr2
# are in the hashtable.
#
# Returns zero (no error) if all elements of the 2nd array are in the 1st array,
# otherwise returns 1 (error).
#
# Modified from [5]
function ArrContains() {
local lArr1 lArr2
declare -A tmp
eval lArr1=("\"\${$1[@]}\"")
eval lArr2=("\"\${$2[@]}\"")
for i in "${lArr1[@]}";{ [ -n "$i" ] && ((++tmp[$i]));}
for i in "${lArr2[@]}";{ [ -n "$i" ] && [ -z "${tmp[$i]}" ] && return 1;}
return 0
}
# Bash completion entry point function.
# _complete_mykotlinapp finds which commands and subcommands have been specified
# on the command line and delegates to the appropriate function
# to generate possible options and subcommands for the last specified subcommand.
function _complete_mykotlinapp() {
CMDS0=(sub)
CMDS1=(status)
CMDS2=(help)
ArrContains COMP_WORDS CMDS2 && { _picocli_mykotlinapp_help; return $?; }
ArrContains COMP_WORDS CMDS1 && { _picocli_mykotlinapp_status; return $?; }
ArrContains COMP_WORDS CMDS0 && { _picocli_mykotlinapp_sub; return $?; }
# No subcommands were specified; generate completions for the top-level command.
_picocli_mykotlinapp; return $?;
}
# Generates completions for the options and subcommands of the `mykotlinapp` command.
function _picocli_mykotlinapp() {
# Get completion data
CURR_WORD=${COMP_WORDS[COMP_CWORD]}
PREV_WORD=${COMP_WORDS[COMP_CWORD-1]}
COMMANDS="sub status help"
FLAG_OPTS="-h --help -V --version"
ARG_OPTS="-c --count"
compopt +o default
case ${PREV_WORD} in
-c|--count)
return
;;
esac
if [[ "${CURR_WORD}" == -* ]]; then
COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS}" -- ${CURR_WORD}) )
else
COMPREPLY=( $(compgen -W "${COMMANDS}" -- ${CURR_WORD}) )
fi
}
# Generates completions for the options and subcommands of the `sub` subcommand.
function _picocli_mykotlinapp_sub() {
# Get completion data
CURR_WORD=${COMP_WORDS[COMP_CWORD]}
PREV_WORD=${COMP_WORDS[COMP_CWORD-1]}
COMMANDS=""
FLAG_OPTS="-d --default"
ARG_OPTS=""
if [[ "${CURR_WORD}" == -* ]]; then
COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS}" -- ${CURR_WORD}) )
else
COMPREPLY=( $(compgen -W "${COMMANDS}" -- ${CURR_WORD}) )
fi
}
# Generates completions for the options and subcommands of the `status` subcommand.
function _picocli_mykotlinapp_status() {
# Get completion data
CURR_WORD=${COMP_WORDS[COMP_CWORD]}
PREV_WORD=${COMP_WORDS[COMP_CWORD-1]}
COMMANDS=""
FLAG_OPTS="-a --all"
ARG_OPTS="-o --object"
obj_OPTION_ARGS="OBJECT SOURCE URL" # --object values
compopt +o default
case ${PREV_WORD} in
-o|--object)
COMPREPLY=( $( compgen -W "${obj_OPTION_ARGS}" -- ${CURR_WORD} ) )
return $?
;;
esac
if [[ "${CURR_WORD}" == -* ]]; then
COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS}" -- ${CURR_WORD}) )
else
COMPREPLY=( $(compgen -W "${COMMANDS}" -- ${CURR_WORD}) )
fi
}
# Generates completions for the options and subcommands of the `help` subcommand.
function _picocli_mykotlinapp_help() {
# Get completion data
CURR_WORD=${COMP_WORDS[COMP_CWORD]}
PREV_WORD=${COMP_WORDS[COMP_CWORD-1]}
COMMANDS=""
FLAG_OPTS="-h --help"
ARG_OPTS=""
if [[ "${CURR_WORD}" == -* ]]; then
COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS}" -- ${CURR_WORD}) )
else
COMPREPLY=( $(compgen -W "${COMMANDS}" -- ${CURR_WORD}) )
fi
}
# Define a completion specification (a compspec) for the
# `mykotlinapp`, `mykotlinapp.sh`, and `mykotlinapp.bash` commands.
# Uses the bash `complete` builtin (see [6]) to specify that shell function
# `_complete_mykotlinapp` is responsible for generating possible completions for the
# current word on the command line.
# The `-o default` option means that if the function generated no matches, the
# default Bash completions and the Readline default filename completions are performed.
complete -F _complete_mykotlinapp -o default mykotlinapp mykotlinapp.sh mykotlinapp.bash