[Bash-completion-commits] ./current r1129: fixed _get_cword()
David Paleino
d.paleino at gmail.com
Mon Jun 23 09:09:32 UTC 2008
------------------------------------------------------------
revno: 1129
committer: David Paleino <d.paleino at gmail.com>
branch nick: current
timestamp: Mon 2008-06-23 11:09:32 +0200
message:
fixed _get_cword()
modified:
bash_completion
debian/changelog
-------------- next part --------------
=== modified file 'bash_completion'
--- a/bash_completion 2008-06-23 09:03:01 +0000
+++ b/bash_completion 2008-06-23 09:09:32 +0000
@@ -221,29 +221,33 @@
# for things like scp where we want to return host:path and not only path.
_get_cword()
{
- local i
- local LC_CTYPE=C
- local WORDBREAKS=${COMP_WORDBREAKS}
- if [ -n $1 ]; then
- for (( i=0; i<${#1}; ++i )); do
- local char=${1:$i:1}
- WORDBREAKS=${WORDBREAKS//$char/}
+ if [[ "${#COMP_WORDS[COMP_CWORD]}" -eq 0 ]] || [[ "$COMP_POINT" == "${#COMP_LINE}" ]]; then
+ echo "${COMP_WORDS[COMP_CWORD]}"
+ else
+ local i
+ local cur="$COMP_LINE"
+ local index="$COMP_POINT"
+ for (( i = 0; i <= COMP_CWORD; ++i )); do
+ while [[ "${#cur}" -ge ${#COMP_WORDS[i}} ]] && [[ "${cur:0:${#COMP_WORDS[i]}}" != "${COMP_WORDS{i]}" ]]; do
+ cur="${cur:1}"
+ index="$(( index - 1 ))"
+ done
+ if [[ "$i" -lt "$COMP_CWORD" ]]; then
+ local old_size="${#cur}"
+ cur="${cur#${COMP_WORDS[i]}}"
+ local new_size="${#cur}"
+ index="$(( index - old_size + new_size ))"
+ fi
done
+
+ if [[ "${COMP_WORDS[COMP_CWORD]:0:${#cur}}" != "$cur" ]]; then
+ # We messed up! At least return the whole word so things
+ # keep working
+ echo "${COMP_WORDS[COMP_CWORD]}"
+ else
+ echo "${cur:0:$index}"
+ fi
fi
- local cur=${COMP_LINE:0:$COMP_POINT}
- local tmp="${cur}"
- local word_start=`expr "$tmp" : '.*['"${WORDBREAKS}"']'`
- while [ "$word_start" -ge 2 ]; do
- local char=${cur:$(( $word_start - 2 )):1}
- if [ "$char" != "\\" ]; then
- break
- fi
- tmp=${COMP_LINE:0:$(( $word_start - 2 ))}
- word_start=`expr "$tmp" : '.*['"${WORDBREAKS}"']'`
- done
-
- cur=${cur:$word_start}
- echo "$cur"
}
# This function performs file and directory completion. It's better than
=== modified file 'debian/changelog'
--- a/debian/changelog 2008-06-23 09:03:01 +0000
+++ b/debian/changelog 2008-06-23 09:09:32 +0000
@@ -2,8 +2,9 @@
* Merged Ubuntu changes:
- added quote(), quote_readline(), dequote() helper functions.
+ - fixed _get_cword()
- -- David Paleino <d.paleino at gmail.com> Mon, 23 Jun 2008 11:00:04 +0200
+ -- David Paleino <d.paleino at gmail.com> Mon, 23 Jun 2008 11:09:09 +0200
bash-completion (20080617.3) unstable; urgency=low
More information about the Bash-completion-commits
mailing list