mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| local of ofwuc ouc oss ofwy ofwg ofwl cmd
 | |
| 
 | |
| (( $+_is_gnu )) || typeset -gA _is_gnu
 | |
| 
 | |
| cmd="$1"
 | |
| shift
 | |
| 
 | |
| if (( ! $+_is_gnu[$cmd] )); then
 | |
|   if [[ $(_call version $cmd -v </dev/null 2>/dev/null) = *GNU* ]]; then
 | |
|     _is_gnu[$cmd]=yes
 | |
|   else
 | |
|     _is_gnu[$cmd]=
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [[ -n "$_is_gnu[$cmd]" ]]; then
 | |
|   # output formats
 | |
|   of="-y --side-by-side -n --rcs -e -f --ed -q --brief -c -C --context -u -U \
 | |
|   --unified --old-group-format --new-group-format --changed-group-format \
 | |
|   --unchanged-group-format --line-format --old-line-format --new-line-format \
 | |
|   --unchanged-line-format"
 | |
| 
 | |
|   # output formats w/o unified and context
 | |
|   ofwuc="-y --side-by-side -n --rcs -e -f --ed -q --brief --old-group-format \
 | |
|   --new-group-format --changed-group-format --unchanged-group-format \
 | |
|   --line-format --old-line-format --new-line-format --unchanged-line-format"
 | |
| 
 | |
|   # option specific to unified or context diff
 | |
|   ouc='-L --label -p --show-c-function -F --show-function-line'
 | |
| 
 | |
|   # option specific to side by side
 | |
|   oss='-W --width --left-column --suppress-common-lines'
 | |
| 
 | |
|   # output formats w/o side by side
 | |
|   ofwy="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
 | |
|   --old-group-format --new-group-format --changed-group-format \
 | |
|   --unchanged-group-format --line-format --old-line-format \
 | |
|   --new-line-format --unchanged-line-format"
 | |
| 
 | |
|   # output formats w/o group format
 | |
|   ofwg="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
 | |
|   --line-format --old-line-format --new-line-format --unchanged-line-format"
 | |
| 
 | |
|   # output formats w/o line format
 | |
|   ofwl="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
 | |
|   --old-group-format --new-group-format --changed-group-format \
 | |
|   --unchanged-group-format"
 | |
| 
 | |
|   _arguments -s \
 | |
|     '(-i)--ignore-case[case insensitive]' \
 | |
|     '(--ignore-case)-i[case insensitive]' \
 | |
|     '(-w)--ignore-all-space[ignore all white space]' \
 | |
|     '(--ignore-all-space)-w[ignore all white space]' \
 | |
|     '(-b)--ignore-space-change[ignore changes in the amount of white space]' \
 | |
|     '(--ignore-space-change)-b[ignore changes in the amount of white space]' \
 | |
|     '(-B)--ignore-blank-lines[ignore lines that are all blank]' \
 | |
|     '(--ignore-blank-lines)-B[ignore lines that are all blank]' \
 | |
|     '(-I)--ignore-matching-lines=[ignore lines that match regex]:line exclusion regex:' \
 | |
|     '(--ignore-matching-lines)-I+[ignore lines that match regex]:line exclusion regex:' \
 | |
|     '(-a)--text[treat all files as text]' \
 | |
|     '(--text)-a[treat all files as text]' \
 | |
|     "($of $oss)--context=-[context diff]:number of lines of copied context:" \
 | |
|     "($of $oss)-C+[output a context diff]:number of lines of copied context:" \
 | |
|     "($of $oss)-c[output a context diff]" \
 | |
|     "($of $oss)--unified=-[output a unified diff]:number of lines of unified context:" \
 | |
|     "($of $oss)-U+[output a unified diff]:number of lines of unified context:" \
 | |
|     "($of $oss)-u[output a unified diff]" \
 | |
|     "($ofwuc $oss -L)--label=[set label to use instead of file name]:label:" \
 | |
|     "($ofwuc $oss --label)-L+[set label to use instead of file name]:label:" \
 | |
|     "($ofwuc $oss -p)--show-c-function[show C function of each change]" \
 | |
|     "($ofwuc $oss --show-c-function)-p[show C function of each change]" \
 | |
|     "($ofwuc $oss -F)--show-function-line=[show the most recent line matching regex]:regex:" \
 | |
|     "($ofwuc $oss --show-function-line)-F+[show the most recent line matching regex]:regex:" \
 | |
|     "($of $ouc $oss)--brief[output only whether files differ]" \
 | |
|     "($of $ouc $oss)-q[output only whether files differ]" \
 | |
|     "($of $ouc $oss)--ed[output an ed script]" \
 | |
|     "($of $ouc $oss)-e[output an ed script]" \
 | |
|     "($of $ouc $oss)--forward-ed[output a reversed ed script]" \
 | |
|     "($of $ouc $oss)-f[output a reversed ed script]" \
 | |
|     "($of $ouc $oss)--rcs[RCS format diff]" \
 | |
|     "($of $ouc $oss)-n[RCS format diff]" \
 | |
|     "($of $ouc)--side-by-side[output in two columns]" \
 | |
|     "($of $ouc)-y[output in two columns]" \
 | |
|     "($ofwy $ouc -W)--width=[set size of line]:number of characters per line:" \
 | |
|     "($ofwy $ouc --width)-W+[set size of line]:number of characters per line:" \
 | |
|     "($ofwy $ouc)--left-column[output only left column of common lines]" \
 | |
|     "($ofwy $ouc)--suppress-common-lines[do not output common lines]" \
 | |
|     "($ofwg $ouc $oss)--old-group-format=[set old group format]:old group format:" \
 | |
|     "($ofwg $ouc $oss)--new-group-format=[set new group format]:new group format:" \
 | |
|     "($ofwg $ouc $oss)--changed-group-format=[set changed group format]:changed group format:" \
 | |
|     "($ofwg $ouc $oss)--unchanged-group-format=[set unchanged group format]:unchanged group format:" \
 | |
|     "($ofwl $ouc $oss)--line-format=[set line format]:line format:" \
 | |
|     "($ofwl $ouc $oss)--old-line-format=[set old line format]:old line format:" \
 | |
|     "($ofwl $ouc $oss)--new-line-format=[set new line format]:new line format:" \
 | |
|     "($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format:" \
 | |
|     '(-l)--paginate[output through pr]' \
 | |
|     '(--paginate)-l[output through pr]' \
 | |
|     '(-t)--expand-tabs[expand tabs to spaces]' \
 | |
|     '(--expand-tabs)-t[expand tabs to spaces]' \
 | |
|     '(-T)--initial-tab[prepend a tab]' \
 | |
|     '(--initial-tab)-T[prepend a tab]' \
 | |
|     '(-r)--recursive[recursively compare subdirectories]' \
 | |
|     '(--recursive)-r[recursively compare subdirectories]' \
 | |
|     '(-N)--new-file[treat absent files as empty]' \
 | |
|     '(--new-file)-N[treat absent files as empty]' \
 | |
|     '(-P)--unidirectional-new-file[treat absent first files as empty]' \
 | |
|     '(--unidirectional-new-file)-P[treat absent first files as empty]' \
 | |
|     '(-s)--report-identical-files[report when two files are the same]' \
 | |
|     '(--report-identical-files)-s[report when two files are the same]' \
 | |
|     '(-x)--exclude=[exclude files matching pattern]:exclusion pattern:' \
 | |
|     '(--exclude)-x+[exclude files matching pattern]:exclusion pattern:' \
 | |
|     '(-X)--exclude-from=[exclude files matching pattern in file]:exclude file:_files' \
 | |
|     '(--exclude-from)-X+[exclude files matching pattern in file]:exclude file:_files' \
 | |
|     '(-S)--starting-file=[set first file in comparison]:start with file:_files' \
 | |
|     '(--starting-file)-S+[set first file in comparison]:start with file:_files' \
 | |
|     '--horizon-lines=[set number of lines to keep in prefix and suffix]:number of horizon lines:' \
 | |
|     '(-d)--minimal[try to find a smaller set of changes]' \
 | |
|     '(--minimal)-d[try to find a smaller set of changes]' \
 | |
|     '(-H)--speed-large-files[assume large files and many small changes]' \
 | |
|     '(--speed-large-files)-H[assume large files and many small changes]' \
 | |
|     '(--version)-v[output version info]' \
 | |
|     '(-v)--version[output version info]' \
 | |
|     '--help[help text]' \
 | |
|     $@
 | |
| else
 | |
|   _arguments \
 | |
|     "(-e -f)-c[output a context diff]" \
 | |
|     "(-c -f)-e[output an ed script]" \
 | |
|     "(-c -e)-f[output a reversed ed script]" \
 | |
|     '-b[skip trailing white spaces]' \
 | |
|     '-r[recursively compare subdirectories]' \
 | |
|     $@
 | |
| fi
 |