summary refs log tree commit diff
path: root/Completion/User/_diff_options
blob: 50ab4fde636d5c6e9594b2533c4d8297dbbf915b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#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 \
  --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 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)--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 smaller set of changes]' \
    '(--mininal)-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