mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +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
 |