summaryrefslogtreecommitdiff
path: root/Completion
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2011-05-04 08:53:53 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2011-05-04 08:53:53 +0000
commit2e25dfb8fd38dbef0a306282ffab1d343ce3ad8d (patch)
treea878e23f4ce106b82449d6515d9f5e220f76fe31 /Completion
parent3355155e825504462167731696345093cae3697e (diff)
downloadzsh-2e25dfb8fd38dbef0a306282ffab1d343ce3ad8d.tar.gz
zsh-2e25dfb8fd38dbef0a306282ffab1d343ce3ad8d.zip
Rocky Bernstein: 29135 (plus tweaks): compgen -W in bash completion
Diffstat (limited to 'Completion')
-rw-r--r--Completion/bashcompinit21
1 files changed, 14 insertions, 7 deletions
diff --git a/Completion/bashcompinit b/Completion/bashcompinit
index cba436a55..2ccc94de9 100644
--- a/Completion/bashcompinit
+++ b/Completion/bashcompinit
@@ -12,14 +12,14 @@ _bash_complete() {
(( COMP_CWORD = CURRENT - 1))
COMP_WORDS=( $words )
BASH_VERSINFO=( 2 05b 0 1 release )
-
+
savejobstates=( ${(kv)jobstates} )
savejobtexts=( ${(kv)jobtexts} )
-
+
[[ ${argv[${argv[(I)nospace]:-0}-1]} = -o ]] && suf=( -S '' )
-
+
matches=( ${(f)"$(compgen $@)"} )
-
+
if [[ -n $matches ]]; then
if [[ ${argv[${argv[(I)filenames]:-0}-1]} = -o ]]; then
compset -P '*/' && matches=( ${matches##*/} )
@@ -41,11 +41,18 @@ _bash_complete() {
return ret
}
+_compgen_opt_words() {
+ typeset -a words
+ words=( ${~=1} )
+ local find="$2"
+ results=(${(M)words[@]:#$find*})
+}
+
compgen() {
- local opts prefix suffix job OPTARG OPTIND ret=1
+ local opts prefix suffix job OPTARG OPTIND ret=1
local -a name res results jids
local -A shortopts
-
+
emulate -L sh
setopt kshglob noshglob braceexpand nokshautoload
@@ -128,7 +135,7 @@ compgen() {
results+=( ${~OPTARG} )
unsetopt nullglob
;;
- W) eval "results+=( $OPTARG )" ;;
+ W) _compgen_opt_words "$OPTARG" "${@[-1]}" ;;
C) results+=( $(eval $OPTARG) ) ;;
P) prefix="$OPTARG" ;;
S) suffix="$OPTARG" ;;