Package: bash-completion
Version: 1:1.3-1
Severity: normal
Tags: patch
When trying to complete the name of a script after "-d", I get no
completions. E.g.:
perl -d <tab>
The problem is that there are two cases:
1. We are at "-d*", so we shift that into $prev, put the rest of it in
$cur, and then look for ":*" in $cur.
2. We are at "-d ", and $prev remains "-d", but we still try to look
for ":*" in $cur.
So case (2) is wrong; we will complete "-d :DProf", which doesn't make
any sense (and isn't accepted by perl). And if you have no colon, you
get no completions at all.
There is a similar problem for "-V:" and "-M" (which will complete "-M
module", which perl complains about).
The attached patch fixes it for me. It looks for options in
$prev only if we did the $cur/$prev shift, and otherwise completes as
normal.
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.37-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages bash-completion depends on:
ii bash 4.1-3 The GNU Bourne Again SHell
bash-completion recommends no packages.
bash-completion suggests no packages.
-- no debconf information
diff --git a/completions/perl b/completions/perl
index 843e249..fca70fd 100644
--- a/completions/perl
+++ b/completions/perl
@@ -30,49 +30,48 @@ _perl()
optPrefix=-P$prev
optSuffix=-S/
prefix=$prev
- fi
- case $prev in
- -D|-e|-E|-i|-F|-l)
- return 0
- ;;
- -I|-x)
- local IFS=$'\n'
- _compopt_o_filenames
- COMPREPLY=( $( compgen -d $optPrefix $optSuffix -- "$cur" ) )
- return 0
- ;;
- -m|-M)
- temp="${cur#-}"
- prefix="$prefix${cur%$temp}"
- cur="$temp"
- _perlmodules $1
- return 0
- ;;
- -V)
- if [[ $cur == :* ]]; then
- temp="${cur##+(:)}"
- prefix="$prefix${cur%$temp}"
- local IFS=$'\n'
- COMPREPLY=( $( compgen -P "$prefix" -W \
- '$( $1 -MConfig -e "print join \"\\n\",
- keys %Config::Config" 2>/dev/null )' -- "$temp" ) )
- __ltrim_colon_completions "$prefix$temp"
- fi
- return 0
- ;;
- -d|-dt)
- if [[ $cur == :* ]]; then
- temp="${cur#:}"
- prefix="$prefix${cur%$temp}"
- cur="Devel::$temp"
- _perlmodules $1
- fi
- return 0
- ;;
- esac
+ case $prev in
+ -D|-e|-E|-i|-F|-l)
+ return 0
+ ;;
+ -I|-x)
+ local IFS=$'\n'
+ _compopt_o_filenames
+ COMPREPLY=( $( compgen -d $optPrefix $optSuffix -- "$cur" ) )
+ return 0
+ ;;
+ -m|-M)
+ temp="${cur#-}"
+ prefix="$prefix${cur%$temp}"
+ cur="$temp"
+ _perlmodules $1
+ return 0
+ ;;
+ -V)
+ if [[ $cur == :* ]]; then
+ temp="${cur##+(:)}"
+ prefix="$prefix${cur%$temp}"
+ local IFS=$'\n'
+ COMPREPLY=( $( compgen -P "$prefix" -W \
+ '$( $1 -MConfig -e "print join \"\\n\",
+ keys %Config::Config" 2>/dev/null )' -- "$temp" ) )
+ __ltrim_colon_completions "$prefix$temp"
+ fi
+ return 0
+ ;;
+ -d|-dt)
+ if [[ $cur == :* ]]; then
+ temp="${cur#:}"
+ prefix="$prefix${cur%$temp}"
+ cur="Devel::$temp"
+ _perlmodules $1
+ fi
+ return 0
+ ;;
+ esac
- if [[ "$cur" == -* ]]; then
+ elif [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '-C -s -T -u -U -W -X -h -v -V -c -w -d \
-D -p -n -a -F -l -0 -I -m -M -P -S -x -i -e ' -- "$cur" ) )
else
_______________________________________________
Bash-completion-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel