mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #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
 |