mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			918 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			918 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| local output cmd pat
 | |
| local -a var
 | |
| local -A opts
 | |
| 
 | |
| (( $+_cmd_variant )) || typeset -gA _cmd_variant
 | |
| 
 | |
| zparseopts -D -A opts b: c: r:
 | |
| : ${opts[-c]:=$words[1]}
 | |
| 
 | |
| while [[ $1 = *=* ]]; do
 | |
|   var+=( "${1%%\=*}" "${1#*=}" )
 | |
|   shift
 | |
| done
 | |
| if (( $+_cmd_variant[$opts[-c]] )); then
 | |
|   (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}"
 | |
|   [[ $_cmd_variant[$opts[-c]] = "$1" ]] && return 1
 | |
|   return 0
 | |
| fi
 | |
| 
 | |
| if [[ $+opts[-b] -eq 1 && -n $builtins[$opts[-c]] ]]; then
 | |
|   _cmd_variant[$opts[-c]]=$opts[-b]
 | |
|   (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}"
 | |
|   return 0
 | |
| fi
 | |
| 
 | |
| output="$(_call_program variant $opts[-c] "${@[2,-1]}" </dev/null 2>&1)"
 | |
| 
 | |
| for cmd pat in "$var[@]"; do
 | |
|   if [[ $output = *$~pat* ]]; then
 | |
|     (( $+opts[-r] )) && eval "${opts[-r]}=$cmd"
 | |
|     _cmd_variant[$opts[-c]]="$cmd"
 | |
|     return 0
 | |
|   fi
 | |
| done
 | |
| 
 | |
| (( $+opts[-r] )) && eval "${opts[-r]}=$1"
 | |
| _cmd_variant[$opts[-c]]="$1"
 | |
| 
 | |
| return 1
 |