linux-kernel.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).