[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Resolving quoted COMP_CWORD on bash-4
From: |
Freddy Vulto |
Subject: |
Resolving quoted COMP_CWORD on bash-4 |
Date: |
Thu, 17 Sep 2009 22:41:57 +0200 |
Configuration Information [Automatically generated, do not change]:
Machine: i686
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i686'
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i686-pc-linux-gnu'
-DCONF_VENDOR='pc' -DLOCALEDIR='/usr/local/share/locale'
-DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include
-I./lib -g -O2
uname output: Linux myhost 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18
18:40:08 UTC 2009 i686 GNU/Linux
Machine Type: i686-pc-linux-gnu
Bash Version: 4.0
Patch Level: 28
Release Status: release
On bash-4, when completing:
$ a 'b c
The COMP_CWORD variables contain:
COMP_CWORD: 3
COMP_CWORDS:
0: a
1: '
2: b
3: c
Whereas on bash-3 they contained:
COMP_CWORD: 1
COMP_CWORDS:
0: a
1: 'b c
I know that bash-4 has changed:
i. The programmable completion code now uses the same
set of characters as readline when breaking the command
line into a list of words.
But how is one to determine that the current word being completed is
"b c" and not "c"? Shouldn't the programmable completion code *not*
break the current word if it's quoted?
Steps to reproduce:
1. Create function `_cword' and let it complete `a':
_cword() {
echo
echo COMP_CWORD: $COMP_CWORD
echo COMP_CWORDS:
for ((i=0; i < ${#COMP_WORDS[@]}; i++)); do
echo $i: "${COMP_WORDS[$i]}"
done
}
complete -F _cword a
2. Complete `a':
$ a 'b c<TAB>
Regards,
Freddy Vulto
http://fvue.nl
- Resolving quoted COMP_CWORD on bash-4,
Freddy Vulto <=