perf tools: Long option completion support for each subcommands
Add internal --list-opts option to print all of long option names to stdout so that it can be used for bash completion engine. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1349191294-6926-4-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
35c2fde115
commit
4d8061faca
@@ -33,8 +33,13 @@ _perf()
|
|||||||
fi
|
fi
|
||||||
# List possible events for -e option
|
# List possible events for -e option
|
||||||
elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
|
elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
|
||||||
cmds=$($cmd list --raw-dump)
|
evts=$($cmd list --raw-dump)
|
||||||
COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '$evts' -- "$cur" ) )
|
||||||
|
# List long option names
|
||||||
|
elif [[ $cur == --* ]]; then
|
||||||
|
subcmd=${COMP_WORDS[1]}
|
||||||
|
opts=$($cmd $subcmd --list-opts)
|
||||||
|
COMPREPLY=( $( compgen -W '$opts' -- "$cur" ) )
|
||||||
# Fall down to list regular files
|
# Fall down to list regular files
|
||||||
else
|
else
|
||||||
_filedir
|
_filedir
|
||||||
|
@@ -384,6 +384,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
|
|||||||
return usage_with_options_internal(usagestr, options, 1);
|
return usage_with_options_internal(usagestr, options, 1);
|
||||||
if (internal_help && !strcmp(arg + 2, "help"))
|
if (internal_help && !strcmp(arg + 2, "help"))
|
||||||
return parse_options_usage(usagestr, options);
|
return parse_options_usage(usagestr, options);
|
||||||
|
if (!strcmp(arg + 2, "list-opts"))
|
||||||
|
return PARSE_OPT_LIST;
|
||||||
switch (parse_long_opt(ctx, arg + 2, options)) {
|
switch (parse_long_opt(ctx, arg + 2, options)) {
|
||||||
case -1:
|
case -1:
|
||||||
return parse_options_usage(usagestr, options);
|
return parse_options_usage(usagestr, options);
|
||||||
@@ -422,6 +424,12 @@ int parse_options(int argc, const char **argv, const struct option *options,
|
|||||||
exit(129);
|
exit(129);
|
||||||
case PARSE_OPT_DONE:
|
case PARSE_OPT_DONE:
|
||||||
break;
|
break;
|
||||||
|
case PARSE_OPT_LIST:
|
||||||
|
while (options->type != OPTION_END) {
|
||||||
|
printf("--%s ", options->long_name);
|
||||||
|
options++;
|
||||||
|
}
|
||||||
|
exit(130);
|
||||||
default: /* PARSE_OPT_UNKNOWN */
|
default: /* PARSE_OPT_UNKNOWN */
|
||||||
if (ctx.argv[0][1] == '-') {
|
if (ctx.argv[0][1] == '-') {
|
||||||
error("unknown option `%s'", ctx.argv[0] + 2);
|
error("unknown option `%s'", ctx.argv[0] + 2);
|
||||||
|
@@ -140,6 +140,7 @@ extern NORETURN void usage_with_options(const char * const *usagestr,
|
|||||||
enum {
|
enum {
|
||||||
PARSE_OPT_HELP = -1,
|
PARSE_OPT_HELP = -1,
|
||||||
PARSE_OPT_DONE,
|
PARSE_OPT_DONE,
|
||||||
|
PARSE_OPT_LIST,
|
||||||
PARSE_OPT_UNKNOWN,
|
PARSE_OPT_UNKNOWN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user