summaryrefslogtreecommitdiffstats
path: root/Completion/bashcompinit
diff options
context:
space:
mode:
authorOliver Kiddle <opk@users.sourceforge.net>2003-01-29 14:26:01 +0000
committerOliver Kiddle <opk@users.sourceforge.net>2003-01-29 14:26:01 +0000
commit456e958527cc432467a09aa08abe54ff6684f351 (patch)
treeefea7b6bfd525b298aa87a39768a55859e48767c /Completion/bashcompinit
parent18156: use reply array instead of ali for plugins and document new styles (diff)
downloadzsh-456e958527cc432467a09aa08abe54ff6684f351.tar
zsh-456e958527cc432467a09aa08abe54ff6684f351.tar.gz
zsh-456e958527cc432467a09aa08abe54ff6684f351.tar.bz2
zsh-456e958527cc432467a09aa08abe54ff6684f351.tar.lz
zsh-456e958527cc432467a09aa08abe54ff6684f351.tar.xz
zsh-456e958527cc432467a09aa08abe54ff6684f351.tar.zst
zsh-456e958527cc432467a09aa08abe54ff6684f351.zip
18149, 18153: new func for emulating bash's programmable completion system
Diffstat (limited to 'Completion/bashcompinit')
-rw-r--r--Completion/bashcompinit172
1 files changed, 172 insertions, 0 deletions
diff --git a/Completion/bashcompinit b/Completion/bashcompinit
new file mode 100644
index 000000000..5166b0368
--- /dev/null
+++ b/Completion/bashcompinit
@@ -0,0 +1,172 @@
+#autoload
+
+_bash_complete() {
+ local ret=1
+ local -a suf matches
+ local COMP_POINT COMP_CWORD
+ local -a COMP_WORDS COMPREPLY BASH_VERSINFO
+ local COMP_LINE="$words"
+ local -A savejobstates savejobtexts
+
+ (( COMP_POINT = 1 + ${#${(j. .)words[1,CURRENT-1]}} + $#QIPREFIX + $#IPREFIX + $#PREFIX ))
+ (( 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##*/} )
+ compset -S '/*' && matches=( ${matches%%/*} )
+ compadd -f "${suf[@]}" -a matches && ret=0
+ else
+ compadd "${suf[@]}" -a matches && ret=0
+ fi
+ fi
+
+ if (( ret )); then
+ if [[ ${argv[${argv[(I)default]:-0}-1]} = -o ]]; then
+ _default "${suf[@]}" && ret=0
+ elif [[ ${argv[${argv[(I)dirnames]:-0}-1]} = -o ]]; then
+ _directories "${suf[@]}" && ret=0
+ fi
+ fi
+
+ return ret
+}
+
+compgen() {
+ 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
+
+ shortopts=(
+ a alias b builtin c command d directory e export f file
+ g group j job k keyword u user v variable
+ )
+
+ while getopts "o:A:G:C:F:P:S:W:X:abcdefgjkuv" name; do
+ case $name in
+ [abcdefgjkuv]) OPTARG="${shortopts[$name]}" ;&
+ A)
+ case $OPTARG in
+ alias) results+=( "${(k)aliases[@]}" ) ;;
+ arrayvar) results+=( "${(k@)parameters[(R)array*]}" ) ;;
+ binding) results+=( "${(k)widgets[@]}" ) ;;
+ builtin) results+=( "${(k)builtins[@]}" "${(k)dis_builtins[@]}" ) ;;
+ command)
+ results+=(
+ "${(k)commands[@]}" "${(k)aliases[@]}" "${(k)builtins[@]}"
+ "${(k)functions[@]}" "${(k)reswords[@]}"
+ )
+ ;;
+ directory)
+ setopt bareglobqual
+ results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N-/) )
+ setopt nobareglobqual
+ ;;
+ disabled) results+=( "${(k)dis_builtins[@]}" ) ;;
+ enabled) results+=( "${(k)builtins[@]}" ) ;;
+ export) results+=( "${(k)parameters[(R)*export*]}" ) ;;
+ file)
+ setopt bareglobqual
+ results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N) )
+ setopt nobareglobqual
+ ;;
+ function) results+=( "${(k)functions[@]}" ) ;;
+ group)
+ emulate zsh
+ _groups -U -O res
+ emulate sh
+ setopt kshglob noshglob braceexpand
+ results+=( "${res[@]}" )
+ ;;
+ hostname)
+ emulate zsh
+ _hosts -U -O res
+ emulate sh
+ setopt kshglob noshglob braceexpand
+ results+=( "${res[@]}" )
+ ;;
+ job) results+=( "${savejobtexts[@]%% *}" );;
+ keyword) results+=( "${(k)reswords[@]}" ) ;;
+ running)
+ jids=( "${(@k)savejobstates[(R)running*]}" )
+ for job in "${jids[@]}"; do
+ results+=( ${savejobtexts[$job]%% *} )
+ done
+ ;;
+ stopped)
+ jids=( "${(@k)savejobstates[(R)suspended*]}" )
+ for job in "${jids[@]}"; do