mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			179 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#autoload
 | 
						|
 | 
						|
_bash_complete() {
 | 
						|
  local ret=1
 | 
						|
  local -a suf matches
 | 
						|
  local -x COMP_POINT COMP_CWORD
 | 
						|
  local -a COMP_WORDS COMPREPLY BASH_VERSINFO
 | 
						|
  local -x COMP_LINE="$words"
 | 
						|
  local -A savejobstates savejobtexts
 | 
						|
 | 
						|
  (( COMP_POINT = 1 + ${#${(j. .)words[1,CURRENT]}} + $#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 $@ -- ${words[CURRENT]})"} )
 | 
						|
 | 
						|
  if [[ -n $matches ]]; then
 | 
						|
    if [[ ${argv[${argv[(I)filenames]:-0}-1]} = -o ]]; then
 | 
						|
      compset -P '*/' && matches=( ${matches##*/} )
 | 
						|
      compset -S '/*' && matches=( ${matches%%/*} )
 | 
						|
      compadd -Q -f "${suf[@]}" -a matches && ret=0
 | 
						|
    else
 | 
						|
      compadd -Q "${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
 | 
						|
 | 
						|
  # words changes behavior: words[1] -> words[0]
 | 
						|
  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
 | 
						|
	      results+=( ${savejobtexts[$job]%% *} )
 | 
						|
	    done
 | 
						|
	  ;;
 | 
						|
	  setopt|shopt) results+=( "${(k)options[@]}" ) ;;
 | 
						|
	  signal) results+=( "SIG${^signals[@]}" ) ;;
 | 
						|
	  user) results+=( "${(k)userdirs[@]}" ) ;;
 | 
						|
      	  variable) results+=( "${(k)parameters[@]}" ) ;;
 | 
						|
	  helptopic) ;;
 | 
						|
	esac
 | 
						|
      ;;
 | 
						|
      F)
 | 
						|
        COMPREPLY=()
 | 
						|
        local -a args
 | 
						|
        args=( "${words[0]}" "${@[-1]}" "${words[CURRENT-2]}" )
 | 
						|
        (){
 | 
						|
          # There may be more things we need to add to this typeset to
 | 
						|
          # protect bash functions from compsys special variable names
 | 
						|
          typeset -h words
 | 
						|
          $OPTARG "${args[@]}"
 | 
						|
        }
 | 
						|
	results+=( "${COMPREPLY[@]}" )
 | 
						|
      ;;
 | 
						|
      G)
 | 
						|
        setopt nullglob
 | 
						|
        results+=( ${~OPTARG} )
 | 
						|
	unsetopt nullglob
 | 
						|
      ;;
 | 
						|
      W) results+=( ${(Q)~=OPTARG} ) ;;
 | 
						|
      C) results+=( $(eval $OPTARG) ) ;;
 | 
						|
      P) prefix="$OPTARG" ;;
 | 
						|
      S) suffix="$OPTARG" ;;
 | 
						|
      X)
 | 
						|
        if [[ ${OPTARG[0]} = '!' ]]; then
 | 
						|
	  results=( "${(M)results[@]:#${OPTARG#?}}" )
 | 
						|
	else
 | 
						|
 	  results=( "${results[@]:#$OPTARG}" )
 | 
						|
	fi
 | 
						|
      ;;
 | 
						|
    esac
 | 
						|
  done
 | 
						|
  
 | 
						|
  # support for the last, `word' option to compgen. Zsh's matching does a
 | 
						|
  # better job but if you need to, comment this in and use compadd -U
 | 
						|
  # (( $# >= OPTIND)) && results=( "${(M)results[@]:#${@[-1]}*}" )
 | 
						|
 | 
						|
  print -l -r -- "$prefix${^results[@]}$suffix"
 | 
						|
}
 | 
						|
 | 
						|
complete() {
 | 
						|
  emulate -L zsh
 | 
						|
  local args void cmd print remove
 | 
						|
  args=( "$@" )
 | 
						|
  zparseopts -D -a void o: A: G: W: C: F: P: S: X: a b c d e f g j k u v \
 | 
						|
      p=print r=remove
 | 
						|
  if [[ -n $print ]]; then
 | 
						|
    printf 'complete %2$s %1$s\n' "${(@kv)_comps[(R)_bash*]#* }"
 | 
						|
  elif [[ -n $remove ]]; then
 | 
						|
    for cmd; do
 | 
						|
      unset "_comps[$cmd]"
 | 
						|
    done
 | 
						|
  else
 | 
						|
    compdef _bash_complete\ ${(j. .)${(q)args[1,-1-$#]}} "$@"
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
unfunction bashcompinit
 | 
						|
autoload -Uz bashcompinit
 | 
						|
return 0
 |