#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) = *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 \ --changed-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 --changed-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 --changed-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 --changed-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)-f[output a reversed ed script]" \ "($of $ouc $oss)-e[output an 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 ouput commun 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)--changed-line-format=[set changed line format]:changed 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)--mininal[try to find a smaler set of changes]' \ '(--mininal)-d[try to find a smaler 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