All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] perf tools: Bash completion update
@ 2012-10-02 15:21 Namhyung Kim
  2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Namhyung Kim @ 2012-10-02 15:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Frederic Weisbecker, David Ahern, LKML

Hi,

This patchset improves bash completion support for perf tools.  Some
option names are really painful to type so here comes a support for
completing those long option names.  But I still think the
--showcpuutilization option needs to be renamed (at least adding a
couple of dashes in it).

Thanks,
Namhyung


Namhyung Kim (3):
  perf tools: Check existence of _get_comp_words_by_ref when bash completing
  perf tools: Complete long option names of perf command
  perf tools: Long option completion support for each subcommands

 tools/perf/bash_completion      |   36 +++++++++++++++++++++++++++++-------
 tools/perf/util/parse-options.c |    8 ++++++++
 tools/perf/util/parse-options.h |    1 +
 3 files changed, 38 insertions(+), 7 deletions(-)

-- 
1.7.9.2


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing
  2012-10-02 15:21 [PATCH 0/3] perf tools: Bash completion update Namhyung Kim
@ 2012-10-02 15:21 ` Namhyung Kim
  2012-10-02 15:54   ` Frederic Weisbecker
  2012-10-05  8:52   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2012-10-02 15:21 ` [PATCH 2/3] perf tools: Complete long option names of perf command Namhyung Kim
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 11+ messages in thread
From: Namhyung Kim @ 2012-10-02 15:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Frederic Weisbecker, David Ahern, LKML

The '_get_comp_words_by_ref' function is available from the bash
completion v1.2 so that earlier version emits following warning:

  $ perf re<TAB>_get_comp_words_by_ref: command not found

Use older '_get_cword' method when the above function doesn't exist.

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/bash_completion |   15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index 1958fa539d0f..3d48cee1b5e5 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -1,12 +1,23 @@
 # perf completion
 
+function_exists()
+{
+	declare -F $1 > /dev/null
+	return $?
+}
+
 have perf &&
 _perf()
 {
-	local cur cmd
+	local cur prev cmd
 
 	COMPREPLY=()
-	_get_comp_words_by_ref cur prev
+	if function_exists _get_comp_words_by_ref; then
+		_get_comp_words_by_ref cur prev
+	else
+		cur=$(_get_cword)
+		prev=${COMP_WORDS[COMP_CWORD-1]}
+	fi
 
 	cmd=${COMP_WORDS[0]}
 
-- 
1.7.9.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/3] perf tools: Complete long option names of perf command
  2012-10-02 15:21 [PATCH 0/3] perf tools: Bash completion update Namhyung Kim
  2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
@ 2012-10-02 15:21 ` Namhyung Kim
  2012-10-05  8:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2012-10-02 15:21 ` [PATCH 3/3] perf tools: Long option completion support for each subcommands Namhyung Kim
  2012-10-02 16:01 ` [PATCH 0/3] perf tools: Bash completion update Frederic Weisbecker
  3 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2012-10-02 15:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Frederic Weisbecker, David Ahern, LKML

The main perf binary can receive a number of options that configure
working environment.  Add them to the completion script.

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/bash_completion |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index 3d48cee1b5e5..bef06f0deeb5 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -21,10 +21,16 @@ _perf()
 
 	cmd=${COMP_WORDS[0]}
 
-	# List perf subcommands
+	# List perf subcommands or long options
 	if [ $COMP_CWORD -eq 1 ]; then
-		cmds=$($cmd --list-cmds)
-		COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		if [[ $cur == --* ]]; then
+			COMPREPLY=( $( compgen -W '--help --version \
+			--exec-path --html-path --paginate --no-pager \
+			--perf-dir --work-tree --debugfs-dir' -- "$cur" ) )
+		else
+			cmds=$($cmd --list-cmds)
+			COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		fi
 	# List possible events for -e option
 	elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
 		cmds=$($cmd list --raw-dump)
-- 
1.7.9.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/3] perf tools: Long option completion support for each subcommands
  2012-10-02 15:21 [PATCH 0/3] perf tools: Bash completion update Namhyung Kim
  2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
  2012-10-02 15:21 ` [PATCH 2/3] perf tools: Complete long option names of perf command Namhyung Kim
@ 2012-10-02 15:21 ` Namhyung Kim
  2012-10-05  8:54   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2012-10-02 16:01 ` [PATCH 0/3] perf tools: Bash completion update Frederic Weisbecker
  3 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2012-10-02 15:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Frederic Weisbecker, David Ahern, LKML

Add internal --list-opts option to print all of long option names to
stdout so that it can be used for bash completion engine.

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/bash_completion      |    9 +++++++--
 tools/perf/util/parse-options.c |    8 ++++++++
 tools/perf/util/parse-options.h |    1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index bef06f0deeb5..5c355ababf80 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -33,8 +33,13 @@ _perf()
 		fi
 	# List possible events for -e option
 	elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
-		cmds=$($cmd list --raw-dump)
-		COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		evts=$($cmd list --raw-dump)
+		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
 	else
 		_filedir
diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index 443fc116512b..2bc9e70df7e2 100644
--- a/tools/perf/util/parse-options.c
+++ b/tools/perf/util/parse-options.c
@@ -384,6 +384,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
 			return usage_with_options_internal(usagestr, options, 1);
 		if (internal_help && !strcmp(arg + 2, "help"))
 			return parse_options_usage(usagestr, options);
+		if (!strcmp(arg + 2, "list-opts"))
+			return PARSE_OPT_LIST;
 		switch (parse_long_opt(ctx, arg + 2, options)) {
 		case -1:
 			return parse_options_usage(usagestr, options);
@@ -422,6 +424,12 @@ int parse_options(int argc, const char **argv, const struct option *options,
 		exit(129);
 	case PARSE_OPT_DONE:
 		break;
+	case PARSE_OPT_LIST:
+		while (options->type != OPTION_END) {
+			printf("--%s ", options->long_name);
+			options++;
+		}
+		exit(130);
 	default: /* PARSE_OPT_UNKNOWN */
 		if (ctx.argv[0][1] == '-') {
 			error("unknown option `%s'", ctx.argv[0] + 2);
diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h
index abc31a1dac1a..7bb5999940ca 100644
--- a/tools/perf/util/parse-options.h
+++ b/tools/perf/util/parse-options.h
@@ -140,6 +140,7 @@ extern NORETURN void usage_with_options(const char * const *usagestr,
 enum {
 	PARSE_OPT_HELP = -1,
 	PARSE_OPT_DONE,
+	PARSE_OPT_LIST,
 	PARSE_OPT_UNKNOWN,
 };
 
-- 
1.7.9.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing
  2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
@ 2012-10-02 15:54   ` Frederic Weisbecker
  2012-10-04  1:43     ` Namhyung Kim
  2012-10-05  8:52   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  1 sibling, 1 reply; 11+ messages in thread
From: Frederic Weisbecker @ 2012-10-02 15:54 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, David Ahern, LKML

On Wed, Oct 03, 2012 at 12:21:32AM +0900, Namhyung Kim wrote:
> The '_get_comp_words_by_ref' function is available from the bash
> completion v1.2 so that earlier version emits following warning:
> 
>   $ perf re<TAB>_get_comp_words_by_ref: command not found
> 
> Use older '_get_cword' method when the above function doesn't exist.

May be only use _get_cword then, if it works everywhere?

> 
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: David Ahern <dsahern@gmail.com>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  tools/perf/bash_completion |   15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
> index 1958fa539d0f..3d48cee1b5e5 100644
> --- a/tools/perf/bash_completion
> +++ b/tools/perf/bash_completion
> @@ -1,12 +1,23 @@
>  # perf completion
>  
> +function_exists()
> +{
> +	declare -F $1 > /dev/null
> +	return $?
> +}
> +
>  have perf &&
>  _perf()
>  {
> -	local cur cmd
> +	local cur prev cmd
>  
>  	COMPREPLY=()
> -	_get_comp_words_by_ref cur prev
> +	if function_exists _get_comp_words_by_ref; then
> +		_get_comp_words_by_ref cur prev
> +	else
> +		cur=$(_get_cword)
> +		prev=${COMP_WORDS[COMP_CWORD-1]}
> +	fi
>  
>  	cmd=${COMP_WORDS[0]}
>  
> -- 
> 1.7.9.2
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/3] perf tools: Bash completion update
  2012-10-02 15:21 [PATCH 0/3] perf tools: Bash completion update Namhyung Kim
                   ` (2 preceding siblings ...)
  2012-10-02 15:21 ` [PATCH 3/3] perf tools: Long option completion support for each subcommands Namhyung Kim
@ 2012-10-02 16:01 ` Frederic Weisbecker
  3 siblings, 0 replies; 11+ messages in thread
From: Frederic Weisbecker @ 2012-10-02 16:01 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, David Ahern, LKML

On Wed, Oct 03, 2012 at 12:21:31AM +0900, Namhyung Kim wrote:
> Hi,
> 
> This patchset improves bash completion support for perf tools.  Some
> option names are really painful to type so here comes a support for
> completing those long option names.  But I still think the
> --showcpuutilization option needs to be renamed (at least adding a
> couple of dashes in it).
> 
> Thanks,
> Namhyung

Acked-by: Frederic Weisbecker <fweisbec@gmail.com>

Thanks Namhyung!

> 
> 
> Namhyung Kim (3):
>   perf tools: Check existence of _get_comp_words_by_ref when bash completing
>   perf tools: Complete long option names of perf command
>   perf tools: Long option completion support for each subcommands
> 
>  tools/perf/bash_completion      |   36 +++++++++++++++++++++++++++++-------
>  tools/perf/util/parse-options.c |    8 ++++++++
>  tools/perf/util/parse-options.h |    1 +
>  3 files changed, 38 insertions(+), 7 deletions(-)
> 
> -- 
> 1.7.9.2
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing
  2012-10-02 15:54   ` Frederic Weisbecker
@ 2012-10-04  1:43     ` Namhyung Kim
  2012-10-04  8:44       ` Frederic Weisbecker
  0 siblings, 1 reply; 11+ messages in thread
From: Namhyung Kim @ 2012-10-04  1:43 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, David Ahern, LKML

Hi Frederic,

On Tue, 2 Oct 2012 17:54:10 +0200, Frederic Weisbecker wrote:
> On Wed, Oct 03, 2012 at 12:21:32AM +0900, Namhyung Kim wrote:
>> The '_get_comp_words_by_ref' function is available from the bash
>> completion v1.2 so that earlier version emits following warning:
>> 
>>   $ perf re<TAB>_get_comp_words_by_ref: command not found
>> 
>> Use older '_get_cword' method when the above function doesn't exist.
>
> May be only use _get_cword then, if it works everywhere?

It'll work but it's deprecated.

Thanks,
Namhyung

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing
  2012-10-04  1:43     ` Namhyung Kim
@ 2012-10-04  8:44       ` Frederic Weisbecker
  0 siblings, 0 replies; 11+ messages in thread
From: Frederic Weisbecker @ 2012-10-04  8:44 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, David Ahern, LKML

On Thu, Oct 04, 2012 at 10:43:03AM +0900, Namhyung Kim wrote:
> Hi Frederic,
> 
> On Tue, 2 Oct 2012 17:54:10 +0200, Frederic Weisbecker wrote:
> > On Wed, Oct 03, 2012 at 12:21:32AM +0900, Namhyung Kim wrote:
> >> The '_get_comp_words_by_ref' function is available from the bash
> >> completion v1.2 so that earlier version emits following warning:
> >> 
> >>   $ perf re<TAB>_get_comp_words_by_ref: command not found
> >> 
> >> Use older '_get_cword' method when the above function doesn't exist.
> >
> > May be only use _get_cword then, if it works everywhere?
> 
> It'll work but it's deprecated.

Ok.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [tip:perf/urgent] perf tools: Check existence of _get_comp_words_by_ref when bash completing
  2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
  2012-10-02 15:54   ` Frederic Weisbecker
@ 2012-10-05  8:52   ` tip-bot for Namhyung Kim
  1 sibling, 0 replies; 11+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-10-05  8:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, hpa, mingo, peterz, namhyung, fweisbec,
	dsahern, tglx

Commit-ID:  a1d668c3ffd38d611f8446615e8f797dcfdfc397
Gitweb:     http://git.kernel.org/tip/a1d668c3ffd38d611f8446615e8f797dcfdfc397
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Wed, 3 Oct 2012 00:21:32 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 2 Oct 2012 18:36:42 -0300

perf tools: Check existence of _get_comp_words_by_ref when bash completing

The '_get_comp_words_by_ref' function is available from the bash
completion v1.2 so that earlier version emits following warning:

  $ perf re<TAB>_get_comp_words_by_ref: command not found

Use older '_get_cword' method when the above function doesn't exist.

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-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/bash_completion |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index 1958fa5..3d48cee 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -1,12 +1,23 @@
 # perf completion
 
+function_exists()
+{
+	declare -F $1 > /dev/null
+	return $?
+}
+
 have perf &&
 _perf()
 {
-	local cur cmd
+	local cur prev cmd
 
 	COMPREPLY=()
-	_get_comp_words_by_ref cur prev
+	if function_exists _get_comp_words_by_ref; then
+		_get_comp_words_by_ref cur prev
+	else
+		cur=$(_get_cword)
+		prev=${COMP_WORDS[COMP_CWORD-1]}
+	fi
 
 	cmd=${COMP_WORDS[0]}
 

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip:perf/urgent] perf tools: Complete long option names of perf command
  2012-10-02 15:21 ` [PATCH 2/3] perf tools: Complete long option names of perf command Namhyung Kim
@ 2012-10-05  8:53   ` tip-bot for Namhyung Kim
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-10-05  8:53 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, hpa, mingo, peterz, namhyung, fweisbec,
	dsahern, tglx

Commit-ID:  35c2fde1155cc7225361edf43d8efd0aabd28a0c
Gitweb:     http://git.kernel.org/tip/35c2fde1155cc7225361edf43d8efd0aabd28a0c
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Wed, 3 Oct 2012 00:21:33 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 2 Oct 2012 18:36:43 -0300

perf tools: Complete long option names of perf command

The main perf binary can receive a number of options that configure
working environment.  Add them to the completion script.

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-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/bash_completion |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index 3d48cee..bef06f0 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -21,10 +21,16 @@ _perf()
 
 	cmd=${COMP_WORDS[0]}
 
-	# List perf subcommands
+	# List perf subcommands or long options
 	if [ $COMP_CWORD -eq 1 ]; then
-		cmds=$($cmd --list-cmds)
-		COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		if [[ $cur == --* ]]; then
+			COMPREPLY=( $( compgen -W '--help --version \
+			--exec-path --html-path --paginate --no-pager \
+			--perf-dir --work-tree --debugfs-dir' -- "$cur" ) )
+		else
+			cmds=$($cmd --list-cmds)
+			COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		fi
 	# List possible events for -e option
 	elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
 		cmds=$($cmd list --raw-dump)

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip:perf/urgent] perf tools: Long option completion support for each subcommands
  2012-10-02 15:21 ` [PATCH 3/3] perf tools: Long option completion support for each subcommands Namhyung Kim
@ 2012-10-05  8:54   ` tip-bot for Namhyung Kim
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Namhyung Kim @ 2012-10-05  8:54 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, hpa, mingo, peterz, namhyung, fweisbec,
	dsahern, tglx

Commit-ID:  4d8061faca7a50010f037374410f0c3647c3ecf8
Gitweb:     http://git.kernel.org/tip/4d8061faca7a50010f037374410f0c3647c3ecf8
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Wed, 3 Oct 2012 00:21:34 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 2 Oct 2012 18:36:44 -0300

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>
---
 tools/perf/bash_completion      |    9 +++++++--
 tools/perf/util/parse-options.c |    8 ++++++++
 tools/perf/util/parse-options.h |    1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index bef06f0..5c355ab 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -33,8 +33,13 @@ _perf()
 		fi
 	# List possible events for -e option
 	elif [[ $prev == "-e" && "${COMP_WORDS[1]}" == @(record|stat|top) ]]; then
-		cmds=$($cmd list --raw-dump)
-		COMPREPLY=( $( compgen -W '$cmds' -- "$cur" ) )
+		evts=$($cmd list --raw-dump)
+		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
 	else
 		_filedir
diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index 443fc11..2bc9e70 100644
--- a/tools/perf/util/parse-options.c
+++ b/tools/perf/util/parse-options.c
@@ -384,6 +384,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
 			return usage_with_options_internal(usagestr, options, 1);
 		if (internal_help && !strcmp(arg + 2, "help"))
 			return parse_options_usage(usagestr, options);
+		if (!strcmp(arg + 2, "list-opts"))
+			return PARSE_OPT_LIST;
 		switch (parse_long_opt(ctx, arg + 2, options)) {
 		case -1:
 			return parse_options_usage(usagestr, options);
@@ -422,6 +424,12 @@ int parse_options(int argc, const char **argv, const struct option *options,
 		exit(129);
 	case PARSE_OPT_DONE:
 		break;
+	case PARSE_OPT_LIST:
+		while (options->type != OPTION_END) {
+			printf("--%s ", options->long_name);
+			options++;
+		}
+		exit(130);
 	default: /* PARSE_OPT_UNKNOWN */
 		if (ctx.argv[0][1] == '-') {
 			error("unknown option `%s'", ctx.argv[0] + 2);
diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h
index abc31a1..7bb5999 100644
--- a/tools/perf/util/parse-options.h
+++ b/tools/perf/util/parse-options.h
@@ -140,6 +140,7 @@ extern NORETURN void usage_with_options(const char * const *usagestr,
 enum {
 	PARSE_OPT_HELP = -1,
 	PARSE_OPT_DONE,
+	PARSE_OPT_LIST,
 	PARSE_OPT_UNKNOWN,
 };
 

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-10-05  8:54 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-02 15:21 [PATCH 0/3] perf tools: Bash completion update Namhyung Kim
2012-10-02 15:21 ` [PATCH 1/3] perf tools: Check existence of _get_comp_words_by_ref when bash completing Namhyung Kim
2012-10-02 15:54   ` Frederic Weisbecker
2012-10-04  1:43     ` Namhyung Kim
2012-10-04  8:44       ` Frederic Weisbecker
2012-10-05  8:52   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2012-10-02 15:21 ` [PATCH 2/3] perf tools: Complete long option names of perf command Namhyung Kim
2012-10-05  8:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2012-10-02 15:21 ` [PATCH 3/3] perf tools: Long option completion support for each subcommands Namhyung Kim
2012-10-05  8:54   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2012-10-02 16:01 ` [PATCH 0/3] perf tools: Bash completion update Frederic Weisbecker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.