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
|
#compdef ln gln zf_ln
local curcontext="$curcontext" state line ret=1
local -A opt_args
local -a args opts
args=(
'(-i)-f[remove existing destination files]'
'-s[create symbolic links instead of hard links]'
)
local variant
_pick_variant -r variant gnu=gnu unix --help
if [[ $variant == gnu ]]; then
opts=(-S)
args=(
'(-b --backup)-b[create a backup of each existing destination file]' \
'(-b --backup)--backup=[create a backup of each existing destination file]::method:((
none\:"never create backups"
off\:"never create backups"
numbered\:"create numbered backup"
t\:"create numbered backup"
existing\:"same as numbered if numbered backups exist, otherwise same as simple"
nil\:"same as numbered if numbered backups exist, otherwise same as simple"
simple\:"always create simple backups"
never\:"always create simple backups"))'
'(-d -F --directory)'{-d,-F,--directory}'[allow the superuser to attempt to hard link directories]'
'(-f --force)'{-f,--force}'[remove existing destination files]'
'(-i --interactive)'{-i,--interactive}'[prompt before removing destination files]'
'(-L --logical)'{-L,--logical}'[create hard links to symbolic link references]'
'(-n --no-dereference)'{-n,--no-dereference}'[treat destination symbolic link to a directory as if it were a normal file]'
'(-P --physical)'{-P,--physical}'[create hard links directly to symbolic links]'
'(-r --relative)'{-r,--relative}'[create symbolic links relative to link location]'
'(-s --symbolic)'{-s,--symbolic}'[create symbolic links instead of hard links]'
'(-S --suffix)'{-S,--suffix=}'[override default backup suffix]:suffix'
'(-t --target-directory)'{-t,--target-directory=}'[specify directory in which to create the links]: :_directories'
'(-T --no-target-directory)'{-T,--no-target-directory}'[treat destination as a normal file]'
'(-v --verbose)'{-v,--verbose}'[print name of each linked file]'
'--help[display usage information and exit]'
'--version[display version information and exit]')
elif (( ${+builtins[ln]} )); then
args+=(
'-d[attempt to hard link directories]'
{-h,-n}'[do not dereference destination]'
'(-f)-i[prompt before removing destination files]')
else
case $OSTYPE in
darwin*|dragonfly*|freebsd*|netbsd*|openbsd*)
args+=(
{-h,-n}'[do not dereference destination]'
)
;|
darwin*|dragonfly*|freebsd*|netbsd*)
args+=(
'(-f)-i[prompt before removing destination files]'
'-v[print name of each linked file]'
)
;|
darwin*|dragonfly*|freebsd*)
args+=(
'-F[remove existing destination directories]'
)
;|
dragonfly*|freebsd*|openbsd*)
args+=(
'(-L)-P[create hard links directly to symbolic links]'
'(-P)-L[create hard links to symbolic link references]'
)
;|
dragonfly*|freebsd*)
args+=(
"-w[warn if source of a symbolic link doesn't currently exist]"
)
;;
esac
fi
_arguments -C -s $opts : \
$args \
':link target:_files' \
'*:: :->files' && ret=0
case $state in
(files)
if [[ $variant == gnu && -n ${opt_args[(I)-t|--target-directory]} ]]; then
_wanted files expl 'link target' _files && ret=0
else
if (( CURRENT == 2 )); then
local expl
_wanted files expl 'additional link target or link name' _files && ret=0
else
_alternative \
'link-targets:additional link target:_files' \
'target-directories:target directory:_directories' && ret=0
fi
fi
;;
esac
return ret
|