summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_ln
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_ln')
-rw-r--r--Completion/Unix/Command/_ln76
1 files changed, 76 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_ln b/Completion/Unix/Command/_ln
new file mode 100644
index 000000000..89b7177ab
--- /dev/null
+++ b/Completion/Unix/Command/_ln
@@ -0,0 +1,76 @@
+#compdef ln gln
+
+local curcontext="$curcontext" state line ret=1
+local -A opt_args
+
+local -a args
+args=(
+ '-f[remove existing destination files]'
+ '-s[create symbolic links instead of hard links]')
+
+local -a opts
+
+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]'
+ '(-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]'
+ '-i[prompt before removing destination files]')
+elif [[ $OSTYPE == darwin* ]]; then
+ args+=(
+ '-F[remove existing destination directories]'
+ {-h,-n}'[do not dereference destination]'
+ '-i[prompt before removing destination files]'
+ '-v[print name of each linked file]')
+fi
+
+_arguments -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