about summary refs log tree commit diff
path: root/Completion/Unix/Command/_ls
blob: ca20107c2cdab9c9eb2f3787f4ef5d4f9b555b5c (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#compdef ls gls

local arguments is_gnu datef

if ! _pick_variant gnu=gnu unix --help; then
  arguments=(
    '(-A)-a[list entries starting with .]'
    '(-a)-A[list all except . and ..]'
    '-d[list directory entries instead of contents]'
    '-L[list referenced file for sym link]'
    '-R[list subdirectories recursively]'

    '(-k)-h[print sizes in human readable form]'

    '-i[print file inode numbers]'
    '(-l -g -1 -C -m -x)-l[long listing]'
    '(-l -1 -C -m -x)-g[long listing but without owner information]'
    '(-l -g -C -m -x)-1[single column output]'
    '(-l -g -1 -m -x)-C[list entries in columns sorted vertically]'
    '(-l -g -1 -C -x)-m[comma separated]'
    '(-l -g -1 -C -m)-x[sort horizontally]'

    '-s[display size of each file in blocks]'

    '(-u)-c[status change time]'
    '(-c)-u[access time]'

    '-r[reverse sort order]'

    '(-S)-t[sort by modification time]'

    '(-p)-F[append file type indicators]'
    '(-F)-p[append file type indicators for directory]'

    '-n[numeric uid, gid]'

    '(-B -b -w -q)-b[as -B, but use C escape codes whenever possible]'
    '(-B -b -w -q)-q[hide control chars]'

    '*:files:_files'
  )
  if [[ "$OSTYPE" = (netbsd*|dragonfly*|freebsd*|openbsd*|darwin*) ]]; then
    arguments+=(
      '(-h)-k[print sizes of 1k]'
      '(-t)-S[sort by size]'
      '-T[show complete time information]'
      '-o[display file flags]'
      '-f[output is not sorted]'
      '(-B -b -w -q)-w[print raw characters]'
      '(-B -b -w -q)-B[print octal escapes for control characters]'
    )
  fi
  if [[ "$OSTYPE" = (freebsd*|darwin*) ]]; then
    arguments+=(
      '-G[enable colorized output]'
      '-H[follow symlinks on the command line]'
      '-P[do not follow symlinks]'
    )
  fi
  if [[ $OSTYPE = solaris* ]]; then
    arguments+=(
      '(-l -1 -C -m -x)-o[long listing but without group information]'
      '(-l -t -s -r -a)-f[interpret each argument as a directory]'
      '(-E -l)-e[long listing with full and consistent date/time]'
      '(-e -l)-E[long listing with ISO format date/time]'
      '-H[follow symlinks on the command line]'
      '-v[long listing with verbose ACL information]'
      '-V[long listing with compact ACL information]'
      '-@[long listing with marker for extended attribute information]'
    )
  fi
else
  [[ $PREFIX = *+* ]] && datef='formats:format: _date_formats'
  arguments=(
    '(--all -a -A --almost-all)'{--all,-a}'[list entries starting with .]'
    '(--almost-all -A -a --all)'{--almost-all,-A}'[list all except . and ..]'
    '--author[print the author of each file]'
    '(--ignore-backups -B)'{--ignore-backups,-B}"[don't list entries ending with ~]"
    '(--directory -d)'{--directory,-d}'[list directory entries instead of contents]'
    '(--dired -D)'{--dired,-D}"[generate output designed for Emacs' dired mode]"
    '(--ignore -I)'{--ignore,-I}"[don't list entire matching pattern]:pattern:"
    '(--dereference -L --dereference-command-line --dereference-command-line-symlink-to-dir)'{--dereference,-L}'[list referenced file for sym link]'
    '(--dereference -L --dereference-command-line --dereference-command-line-symlink-to-dir)'{--dereference-command-line,--dereference-command-line-symlink-to-dir}
    '(--recursive -R)'{--recursive,-R}'[list subdirectories recursively]'

    '(--no-group -G)'{--no-group,-G}'[inhibit display of group information]'
    '(--human-readable -h -H --si)'{--human-readable,-h}'[print sizes in human readable form]'
    '(--si -H -h --human-readable)'{--si,-H}'[sizes in human readable form; powers of 1000]'
    '(--inode -i)'{--inode,-i}'[print file inode numbers]'

    '(--format -l -g -o -1 -C -m -x)-l[long listing]'
    '(--format -l -1 -C -m -x)-g[long listing but without owner information]'
    --group-directories-first
    '(--format -l --no-group -G -1 -C -m -x)-o[no group, long]'
    '(--format -l -g -o -C -m -x)-1[single column output]'
    '(--format -l -g -o -1 -m -x)-C[list entries in columns sorted vertically]'
    '(--format -l -g -o -1 -C -x)-m[comma separated]'
    '(--format -l -g -o -1 -C -m)-x[sort horizontally]'
    '(-l -g -o -1 -C -m -x)--format=:format:(verbose long commas horizontal across vertical single-column)'

    '(--size -s -f)'{--size,-s}'[display size of each file in blocks]'

    '(--time -u)-c[status change time]'
    '(--time -c)-u[access time]'
    '(-c -u)--time=[specify time to show]:time:(ctime status use atime access)'
    '--time-style=[show times using specified style]:style: _alternative "time-styles\:time style\:(full-iso long-iso iso locale)" $datef'

    '(-a --all -U -l --format -s --size -t --sort --full-time)-f[unsorted, all, short list]'
    '(--reverse)'{--reverse,-r}'[reverse sort order]'

    '(--sort -t -U -v -X)-S[sort by size]'
    '(--sort -S -U -v -X)-t[sort by modification time]'
    '(--sort -S -t -v -X)-U[unsorted]'
    '(--sort -S -t -U -X)-v[sort by version (filename treated numerically)]'
    '(--sort -S -t -U -v)-X[sort by extension]'
    '(-S -t -U -v -X)--sort=:sort:(size time none version extension)'

    '--color=-[control use of color]:color:(never always auto)'
    "--hide=[don't list entries matching pattern]:pattern"
    '(--classify -F --indicator-style -p --file-type)'{--classify,-F}'[append file type indicators]'
    '(--file-type -p --indicator-style -F --classify)'{--file-type,-p}'[append file type indicators except *]'
    '(-F --classify -p --file-type)--indicator-style=:indicator style:(none file-type classify slash)'

    '(-f)--full-time[list both full date and full time]'

    '(--kilobytes -k --block-size)'{--kilobytes,-k}'[use block size of 1k]'
    '(-k --kilobytes)--block-size=[specify block size]:block size (bytes):(1024)'

    '(--numeric-uid-gid -n)'{--numeric-uid-gid,-n}'[numeric uid, gid]'
    '(--tabsize -T)'{--tabsize=,-T+}'[specify tab size]:tab size'
    '(--width -w)'{--width=,-w+}'[specify screen width]:screen width'

    '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--escape,-b}'[print octal escapes for control characters]'
    '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--literal,-N}'[print entry names without quoting]'
    '(--quoting-style -b --escape -N --literal -Q --quote-name)'{--quote-name,-Q}'[quote names]'
    '(-b --escape -N --literal -Q --quote-name)--quoting-style=:quoting style:(literal shell shell-always c escape clocale locale)'

    '(--hide-control-chars -q --show-control-chars)'{--hide-control-chars,-q}'[hide control chars]'
    '(-q --hide-control-chars)--show-control-chars'
    '(- :)--help[display help information]'
    '(- :)--version[display version information]'
    '*:files:_files'
  )
  if [[ $OSTYPE = linux* ]]; then
    arguments+=(
      '(-Z --context)'{-Z,--context}'[print any security context of each file]'
    )
  fi
fi

_arguments -s $arguments