mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-01 21:51:40 +02:00
45 lines
1.6 KiB
Text
45 lines
1.6 KiB
Text
#compdef head
|
|
|
|
local curcontext=$curcontext state state_descr line expl opts args ret=1
|
|
typeset -A opt_args
|
|
|
|
if _pick_variant gnu=GNU unix --version; then
|
|
args=(
|
|
'(-n --lines -c --bytes)'{-c+,--bytes=}'[print the first (or with -, all but the last) specified bytes]:number of bytes:->number'
|
|
'(-n --lines -c --bytes)'{-n+,--lines=}'[print the first (or with -, all but the last) specified lines]:number of lines:->number'
|
|
'(-q --quiet --silent -v --verbose)'{-q,--quiet,--silent}'[never print headers giving file names]'
|
|
'(-q --quiet --silent -v --verbose)'{-v,--verbose}'[always print headers giving file names]'
|
|
'(- *)--help[display help and exit]'
|
|
'(- *)--version[output version information and exit]'
|
|
)
|
|
else
|
|
opts=(-A '-*')
|
|
args=( '(-c)-n+[display the first specified lines]:number of lines' )
|
|
case $OSTYPE in
|
|
(freebsd*|darwin*|dragonfly*|netbsd*)
|
|
args+=( '(-n)-c+[display the first specified bytes]:number of bytes' )
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
_arguments -C -s -S $opts : $args '*:file:_files' && return 0
|
|
|
|
case $state in
|
|
(number)
|
|
local mlt sign digit
|
|
mlt='multiplier:multiplier:((b\:512 K\:1024 KB\:1000 M\:1024\^2'
|
|
mlt+=' MB\:1000\^2 G\:1024\^3 GB\:1000\^3 T\:1024\^4 TB\:1000\^4))'
|
|
sign='sign:sign:((-\:"print all but the last specified bytes/lines"'
|
|
sign+=' +\:"print the first specified bytes/lines (default)"))'
|
|
digit='digits:digit:(0 1 2 3 4 5 6 7 8 9)'
|
|
if compset -P '*[0-9]'; then
|
|
_alternative $mlt $digit && ret=0
|
|
elif [[ -z $PREFIX ]]; then
|
|
_alternative $sign $digit && ret=0
|
|
elif compset -P '(+|-)'; then
|
|
_alternative $digit && ret=0
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
return ret
|