66
71
%(function_name)s ()
68
local cur cmds cmdIdx cmd cmdOpts fixedWords i globalOpts
73
cur=${COMP_WORDS[COMP_CWORD]}
76
globalOpts=( %(global_options)s )
78
# do ordinary expansion if we are anywhere after a -- argument
79
for ((i = 1; i < COMP_CWORD; ++i)); do
80
[[ ${COMP_WORDS[i]} == "--" ]] && return 0
83
# find the command; it's the first word not starting in -
85
for ((cmdIdx = 1; cmdIdx < ${#COMP_WORDS[@]}; ++cmdIdx)); do
86
if [[ ${COMP_WORDS[cmdIdx]} != -* ]]; then
87
cmd=${COMP_WORDS[cmdIdx]}
92
# complete command name if we are not already past the command
93
if [[ $COMP_CWORD -le cmdIdx ]]; then
94
COMPREPLY=( $( compgen -W "$cmds ${globalOpts[*]}" -- $cur ) )
98
# find the option for which we want to complete a value
100
if [[ $cur != -* ]] && [[ $COMP_CWORD -gt 1 ]]; then
101
curOpt=${COMP_WORDS[COMP_CWORD - 1]}
102
if [[ $curOpt == = ]]; then
103
curOpt=${COMP_WORDS[COMP_CWORD - 2]}
104
elif [[ $cur == : ]]; then
107
elif [[ $curOpt == : ]]; then
108
curOpt=${COMP_WORDS[COMP_CWORD - 2]}:
73
local cur cmds cmdIdx cmd cmdOpts fixedWords i globalOpts
78
cur=${COMP_WORDS[COMP_CWORD]}
81
globalOpts=( %(global_options)s )
83
# do ordinary expansion if we are anywhere after a -- argument
84
for ((i = 1; i < COMP_CWORD; ++i)); do
85
[[ ${COMP_WORDS[i]} == "--" ]] && return 0
88
# find the command; it's the first word not starting in -
90
for ((cmdIdx = 1; cmdIdx < ${#COMP_WORDS[@]}; ++cmdIdx)); do
91
if [[ ${COMP_WORDS[cmdIdx]} != -* ]]; then
92
cmd=${COMP_WORDS[cmdIdx]}
97
# complete command name if we are not already past the command
98
if [[ $COMP_CWORD -le cmdIdx ]]; then
99
COMPREPLY=( $( compgen -W "$cmds ${globalOpts[*]}" -- $cur ) )
103
# find the option for which we want to complete a value
105
if [[ $cur != -* ]] && [[ $COMP_CWORD -gt 1 ]]; then
106
curOpt=${COMP_WORDS[COMP_CWORD - 1]}
107
if [[ $curOpt == = ]]; then
108
curOpt=${COMP_WORDS[COMP_CWORD - 2]}
109
elif [[ $cur == : ]]; then
112
elif [[ $curOpt == : ]]; then
113
curOpt=${COMP_WORDS[COMP_CWORD - 2]}:
123
if [[ ${#fixedWords[@]} -eq 0 ]] && [[ ${#optEnums[@]} -eq 0 ]] && [[ $cur != -* ]]; then
126
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//; s/ /\\\\\\\\ /g;') )
131
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//; s/^/tag:/') )
134
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//') )
135
fixedWords=( $(for i in "${fixedWords[@]}"; do echo "${cur%%..tag:*}..tag:${i}"; done) )
138
elif [[ $cur == = ]] && [[ ${#optEnums[@]} -gt 0 ]]; then
139
# complete directly after "--option=", list all enum values
140
COMPREPLY=( "${optEnums[@]}" )
143
fixedWords=( "${cmdOpts[@]}"
149
if [[ ${#fixedWords[@]} -gt 0 ]]; then
150
COMPREPLY=( $( compgen -W "${fixedWords[*]}" -- $cur ) )
128
if [[ ${#fixedWords[@]} -eq 0 ]] && [[ ${#optEnums[@]} -eq 0 ]] && [[ $cur != -* ]]; then
131
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//; s/ /\\\\\\\\ /g;') )
136
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//; s/^/tag:/') )
139
fixedWords=( $(brz tags 2>/dev/null | sed 's/ *[^ ]*$//') )
140
fixedWords=( $(for i in "${fixedWords[@]}"; do echo "${cur%%..tag:*}..tag:${i}"; done) )
143
elif [[ $cur == = ]] && [[ ${#optEnums[@]} -gt 0 ]]; then
144
# complete directly after "--option=", list all enum values
145
COMPREPLY=( "${optEnums[@]}" )
148
fixedWords=( "${cmdOpts[@]}"
154
if [[ ${#fixedWords[@]} -gt 0 ]]; then
155
COMPREPLY=( $( compgen -W "${fixedWords[*]}" -- $cur ) )
156
161
"cmds": self.command_names(),
157
162
"function_name": self.function_name,
158
163
"cases": self.command_cases(),
172
# Debugging code enabled using the --debug command line switch.
173
# Will dump some variables to the top portion of the terminal.
175
for (( i=0; i < ${#COMP_WORDS[@]}; ++i)); do
176
echo "\$COMP_WORDS[$i]='${COMP_WORDS[i]}'"$'\e[K'
178
for i in COMP_CWORD COMP_LINE COMP_POINT COMP_TYPE COMP_KEY cur curOpt; do
179
echo "\$${i}=\"${!i}\""$'\e[K'
181
echo -ne '---\e[K\e[u'
177
# Debugging code enabled using the --debug command line switch.
178
# Will dump some variables to the top portion of the terminal.
180
for (( i=0; i < ${#COMP_WORDS[@]}; ++i)); do
181
echo "\$COMP_WORDS[$i]='${COMP_WORDS[i]}'"$'\e[K'
183
for i in COMP_CWORD COMP_LINE COMP_POINT COMP_TYPE COMP_KEY cur curOpt; do
184
echo "\$${i}=\"${!i}\""$'\e[K'
186
echo -ne '---\e[K\e[u'
184
189
def brz_version(self):
347
349
# ones while maintaining the actual command name unchanged.
348
350
cmd_data.aliases.extend(cmd.aliases)
349
351
cmd_data.aliases.extend(sorted([useralias
350
for cmdalias in cmd_data.aliases
351
if cmdalias in self.user_aliases
352
for useralias in self.user_aliases[cmdalias]
353
if useralias not in cmd_data.aliases]))
352
for cmdalias in cmd_data.aliases
353
if cmdalias in self.user_aliases
354
for useralias in self.user_aliases[cmdalias]
355
if useralias not in cmd_data.aliases]))
355
357
opts = cmd.options()
356
358
for optname, opt in sorted(opts.items()):
390
392
def wrap_parser(self, optswitches, parser):
391
393
orig_add_option_group = parser.add_option_group
393
394
def tweaked_add_option_group(*opts, **attrs):
394
395
return self.wrap_container(optswitches,
395
orig_add_option_group(*opts, **attrs))
396
orig_add_option_group(*opts, **attrs))
396
397
parser.add_option_group = tweaked_add_option_group
397
398
return self.wrap_container(optswitches, parser)
417
417
This command generates a shell function which can be used by bash to
418
418
automatically complete the currently typed command when the user presses
419
419
the completion key (usually tab).
421
421
Commonly used like this:
422
422
eval "`brz bash-completion`"
425
425
takes_options = [
426
option.Option("function-name", short_name="f", type=str, argname="name",
427
help="Name of the generated function (default: _brz)"),
426
option.Option("function-name", short_name="f", type=text_type, argname="name",
427
help="Name of the generated function (default: _brz)"),
428
428
option.Option("function-only", short_name="o", type=None,
429
help="Generate only the shell function, don't enable it"),
429
help="Generate only the shell function, don't enable it"),
430
430
option.Option("debug", type=None, hidden=True,
431
help="Enable shell code useful for debugging"),
432
option.ListOption("plugin", type=str, argname="name",
433
# param_name="selected_plugins", # doesn't work, bug #387117
434
help="Enable completions for the selected plugin"
435
+ " (default: all plugins)"),
431
help="Enable shell code useful for debugging"),
432
option.ListOption("plugin", type=text_type, argname="name",
433
# param_name="selected_plugins", # doesn't work, bug #387117
434
help="Enable completions for the selected plugin"
435
+ " (default: all plugins)"),
438
438
def run(self, **kwargs):