mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-06-15 08:28:03 +02:00
91 lines
3.4 KiB
Text
91 lines
3.4 KiB
Text
#compdef ln gln zf_ln
|
|
|
|
local curcontext="$curcontext" state line ret=1 variant
|
|
local -A opt_args
|
|
|
|
local -a args opts=( -A '-*' )
|
|
args=(
|
|
'(-i)-f[remove existing destination files]'
|
|
'-s[create symbolic links instead of hard links]'
|
|
)
|
|
|
|
_pick_variant -r variant -b zsh gnu=gnu $OSTYPE --help
|
|
case $variant; in
|
|
gnu)
|
|
opts=()
|
|
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]')
|
|
;;
|
|
zsh)
|
|
args+=(
|
|
'-d[attempt to hard link directories]'
|
|
{-h,-n}'[do not dereference destination]'
|
|
'(-f)-i[prompt before removing destination files]')
|
|
;;
|
|
darwin*|dragonfly*|*bsd*)
|
|
args+=(
|
|
{-h,-n}"[don't dereference destination]"
|
|
'(-L)-P[create hard links directly to symbolic links]'
|
|
'(-P)-L[create hard links to symbolic link references]'
|
|
)
|
|
;|
|
|
darwin*|dragonfly*|freebsd*|netbsd*)
|
|
args+=(
|
|
'-F[remove existing destination directories]'
|
|
'(-f)-i[prompt before removing destination files]'
|
|
'-v[print name of each linked file]'
|
|
)
|
|
;|
|
|
dragonfly*|freebsd*|netbsd*)
|
|
args+=(
|
|
"-w[warn if source of a symbolic link doesn't currently exist]"
|
|
)
|
|
;;
|
|
esac
|
|
|
|
_arguments -C -s -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
|