linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ramkumar Ramachandra <artagnon@gmail.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Namhyung Kim <namhyung.kim@lge.com>,
	Frederic Weisbecker <fweisbec@gmail.com>
Subject: [PATCH 6/7] perf completion: strip dependency on bash-completion
Date: Thu,  4 Jul 2013 18:11:30 +0530	[thread overview]
Message-ID: <1372941691-14684-7-git-send-email-artagnon@gmail.com> (raw)
In-Reply-To: <1372941691-14684-1-git-send-email-artagnon@gmail.com>

The bash-completion package defines the _get_comp_words_by_ref
function.  There is no need to depend on it, as we can reimplement it
like git.git has.

Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 tools/perf/bash_completion | 83 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 77 insertions(+), 6 deletions(-)

diff --git a/tools/perf/bash_completion b/tools/perf/bash_completion
index 852d444..765fb2f 100644
--- a/tools/perf/bash_completion
+++ b/tools/perf/bash_completion
@@ -1,5 +1,81 @@
 # perf completion
 
+# Taken from git.git's completion script.
+__my_reassemble_comp_words_by_ref ()
+{
+	local exclude i j first
+	# Which word separators to exclude?
+	exclude="${1//[^$COMP_WORDBREAKS]}"
+	cword_=$COMP_CWORD
+	if [ -z "$exclude" ]; then
+		words_=("${COMP_WORDS[@]}")
+		return
+	fi
+	# List of word completion separators has shrunk;
+	# re-assemble words to complete.
+	for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
+		# Append each nonempty word consisting of just
+		# word separator characters to the current word.
+		first=t
+		while
+			[ $i -gt 0 ] &&
+			[ -n "${COMP_WORDS[$i]}" ] &&
+			# word consists of excluded word separators
+			[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
+		do
+			# Attach to the previous token,
+			# unless the previous token is the command name.
+			if [ $j -ge 2 ] && [ -n "$first" ]; then
+				((j--))
+			fi
+			first=
+			words_[$j]=${words_[j]}${COMP_WORDS[i]}
+			if [ $i = $COMP_CWORD ]; then
+				cword_=$j
+			fi
+			if (($i < ${#COMP_WORDS[@]} - 1)); then
+				((i++))
+			else
+				# Done.
+				return
+			fi
+		done
+		words_[$j]=${words_[j]}${COMP_WORDS[i]}
+		if [ $i = $COMP_CWORD ]; then
+			cword_=$j
+		fi
+	done
+}
+
+type _get_comp_words_by_ref &>/dev/null ||
+_get_comp_words_by_ref ()
+{
+	local exclude cur_ words_ cword_
+	if [ "$1" = "-n" ]; then
+		exclude=$2
+		shift 2
+	fi
+	__my_reassemble_comp_words_by_ref "$exclude"
+	cur_=${words_[cword_]}
+	while [ $# -gt 0 ]; do
+		case "$1" in
+		cur)
+			cur=$cur_
+			;;
+		prev)
+			prev=${words_[$cword_-1]}
+			;;
+		words)
+			words=("${words_[@]}")
+			;;
+		cword)
+			cword=$cword_
+			;;
+		esac
+		shift
+	done
+}
+
 type __ltrim_colon_completions &>/dev/null ||
 __ltrim_colon_completions ()
 {
@@ -19,12 +95,7 @@ _perf ()
 	local cur prev cmd
 
 	COMPREPLY=()
-	if function_exists _get_comp_words_by_ref; then
-		_get_comp_words_by_ref -n : cur prev
-	else
-		cur=$(_get_cword :)
-		prev=${COMP_WORDS[COMP_CWORD-1]}
-	fi
+	_get_comp_words_by_ref -n : cur prev
 
 	cmd=${COMP_WORDS[0]}
 
-- 
1.8.3.1.643.gebeea52.dirty


  parent reply	other threads:[~2013-07-04 12:45 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-04 12:41 [PATCH 0/7] Minor perf completion improvements Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 1/7] perf completion: don't dictate perf install location Ramkumar Ramachandra
2013-10-15  5:22   ` [tip:perf/core] perf completion: Don' t " tip-bot for Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 2/7] perf completion: update __ltrim_colon_completions Ramkumar Ramachandra
2013-10-15  5:22   ` [tip:perf/core] perf completion: Update __ltrim_colon_completions tip-bot for Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 3/7] perf completion: strip dependency on _filedir Ramkumar Ramachandra
2013-10-15  5:23   ` [tip:perf/core] perf completion: Strip " tip-bot for Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 4/7] perf completion: modernize style Ramkumar Ramachandra
2013-07-16 17:19   ` Arnaldo Carvalho de Melo
2013-07-16 17:22     ` Ramkumar Ramachandra
2013-08-07 20:26       ` Arnaldo Carvalho de Melo
2013-08-08  4:19         ` Ramkumar Ramachandra
2013-09-18 23:31         ` Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 5/7] perf completion: strip function_exists () Ramkumar Ramachandra
2013-10-15  5:23   ` [tip:perf/core] perf completion: Strip " tip-bot for Ramkumar Ramachandra
2013-07-04 12:41 ` Ramkumar Ramachandra [this message]
2013-10-15  5:23   ` [tip:perf/core] perf completion: Strip dependency on bash-completion tip-bot for Ramkumar Ramachandra
2013-07-04 12:41 ` [PATCH 7/7] perf completion: use more comp words Ramkumar Ramachandra
2013-10-15  5:23   ` [tip:perf/core] perf completion: Use " tip-bot for Ramkumar Ramachandra
2013-07-05  2:46 ` [PATCH 0/7] Minor perf completion improvements Namhyung Kim
2013-07-05 10:03   ` Ramkumar Ramachandra
2013-07-15  7:51 ` Ramkumar Ramachandra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1372941691-14684-7-git-send-email-artagnon@gmail.com \
    --to=artagnon@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung.kim@lge.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).