1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-01 05:16:05 +01:00

40005: call _date_formats from _date

also update both files for darwin etc.
This commit is contained in:
Jun-ichi Takimoto 2016-11-24 21:33:15 +09:00
parent b3a88a53d3
commit fe2d87767d
3 changed files with 83 additions and 37 deletions

View file

@ -1,3 +1,9 @@
2016-11-24 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* 40005: Completion/Unix/Command/_date,
Completion/Unix/Type/_date_formats: call _date_formats from _date.
Update both files for darwin etc.
2016-11-24 Daniel Shahaf <d.s@daniel.shahaf.name>
* 39982: README, Src/utils.c: $SPROMPT: Don't accept a spelling

View file

@ -1,57 +1,98 @@
#compdef date gdate
local -a args alts
local curcontext="$curcontext" state state_descr line ret=1
local -A opt_args
local -a opts args
opts=( -s -w -C )
if _pick_variant gnu="Free Software Foundation" unix --version; then
local d='(-d --date -f --file -r --reference -s --set)'
local f='(-I --iso-8601 -R --rfc-2822 --rfc-3339)'
args=(
'-d[output specified date]:time string'
'-f[output dates specified in file]:file:_files'
'-I-[iso-8601]:precision:(date hours minutes seconds)'
'-r[reference]:file:_files'
'-R[RFC2822 format]'
'-s[set]:time string'
'--rfc-3339=-[output date and time in RFC 3339 format]:output type:(date seconds ns)'
--
'*=FILE*:file:_files'
'*=DATEFILE*:date file:_files'
$d{-d+,--date=}'[output date specified by string]:time string'
$d{-f+,--file=}'[output dates specified in file]:file:_files'
$d{-r+,--reference=}'[output last modification time of specified file]:file:_files'
$d{-s+,--set=}'[set time]:time string'
$f{-I-,--iso-8601=-}'[display in ISO 8601 format]::precision:(date hours minutes seconds ns)'
$f{-R,--rfc-2822}'[display in RFC2822 format]'
$f'--rfc-3339=-[display in RFC 3339 format]:precision:(date seconds ns)'
'(-u --utc --universal)'{-u,--utc,--universal}'[display or set time in UTC]'
'(- :)--help[output help and exit]'
'(- :)--version[output version info and exit]'
)
else
args=( '-u[display or set time in UTC]' )
case "$OSTYPE" in
solaris*)
args=( '-a:adjustment' )
args+=( '-a:adjustment' )
;;
darwin*|dragonfly*|netbsd*|openbsd*)
args+=( '-r[specify reference time]:seconds since epoch' )
;|
freebsd*|darwin*|dragonfly*|netbsd*|openbsd*)
args=(
'-n[only set time on current machine]'
'-d:daylight saving time value'
freebsd*|dragonfly*|darwin*|netbsd*|openbsd*)
opts+=( -A '-*' )
args+=(
'-j[do not try to set date]'
'-t:minutes west of GMT'
'2:format or date:->fmt_date'
)
;|
freebsd*|dragonfly*|darwin*|netbsd*)
args+=( '-n[only set time on current machine]' )
;|
freebsd*|dragonfly*|darwin*|openbsd*)
args+=(
'-d+:daylight saving time value'
'-t+:minutes west of GMT'
)
;|
dragonfly*|darwin*|netbsd*|openbsd*)
args+=(
'-r+[output date specified by reference time]:seconds since epoch'
)
;|
freebsd*)
local -a alts
alts=(
'seconds:sec:_guard "(0x[0-9a-fA-F]#|[0-9]#)" "seconds since epoch"'
'files:file:_files'
)
args+=(
'-r[reference time: file modification or literal time]:reference: _alternative $alts'
'-R[RFC2822 format]'
'-r+[reference time: file modification or literal time]:reference: _alternative $alts'
)
;|
freebsd*|dragonfly*|darwin*)
args+=( '-f:parsing format' '-v:adjustment value' )
args+=(
'-f+[use specified format for input]:parsing format:_date_formats:new date:'
'*-v+[adjust and print (but not set) date]:[+-]value[ymwdHMS]:'
)
;;
freebsd*|dragonfly*)
args+=( '-R[display in RFC2822 format]' )
;|
openbsd*|netbsd*) args=+( '-a[gradually skew]' )
;|
openbsd*)
args+=( '-z[specify timezone for output]:time zone:_time_zone')
;|
openbsd*|netbsd*) args=( '-a[gradually skew]' ) ;;
netbsd*)
args+=( '-d[output date specified by string]:time string:' )
;;
esac
fi
_arguments \
'-u[display or set time in UTC]' \
': :_guard "^--*" "format or date"' \
"$args[@]"
_arguments $opts : $args \
'1:format or date:->fmt_date' && ret=0
case $state in
(fmt_date)
local expl
if compset -P '+'; then
_wanted date-formats expl 'output format' _date_formats && ret=0
elif [[ $words[CURRENT] != -* ]]; then
# TODO: in most cases it should be possible to determine which
# (or both or neither) of the +format and/or date is allowed
# depending on the options already on the command line
_message -e date-formats '+format or date' && ret=0
fi
;;
esac
return ret

View file

@ -19,18 +19,16 @@ compset -S '%*'
specs=(
'a:abbreviated day name'
'A:full day name'
'b:abbreviated month name'
{b,h}':abbreviated month name'
'B:full month name'
'c:preferred locale date and time'
'C:2-digit century'
'd:day of month (01-31)'
'D:american format month/day/year (%m/%d/%y)'
'e:day of month ( 1-31)'
'E:alternate representation'
'F:ISO 8601 year-month-date (%Y-%m-%d)'
'G:4-digit ISO 8601 week-based year'
'g:2-digit ISO 8601 week-based year'
'h:abbreviated month name'
'H:hour (00-23)'
'I:hour (01-12)'
'j:day of year (001-366)'
@ -39,7 +37,6 @@ specs=(
'm:month (01-12)'
'M:minute (00-59)'
'n:newline'
'O:alternative format modifier'
'p:locale dependent AM/PM'
'r:locale dependent a.m. or p.m. time (%I:%M:%S %p)'
'R:24-hour notation time (%H:%M)'
@ -62,24 +59,26 @@ specs=(
)
case $OSTYPE in
freebsd*|linux-gnu|solaris2.<11->)
freebsd*|dragonfly*|darwin*|linux-gnu|solaris2.<11->)
specs+=(
'E:alternate representation'
'O:alternative format modifier'
"-:don't pad numeric values"
'#:swap case of alphabetic characters'
'0:left pad numeric values with zeroes'
'^:convert lowercase characters to uppercase'
'_:left pad numeric values with spaces'
)
;|
linux-gnu|solaris2.<11->)
specs+=(
'#:swap case of alphabetic characters'
'^:convert lowercase characters to uppercase'
'P:lower case locale dependent am/pm'
)
;|
freebsd*)
freebsd*|dragonfly*|darwin*|openbsd*|netbsd*)
specs+=( 'v:date in short form (%e-%b-%Y)' )
;|
solaris2.<11->|freebsd*)
solaris2.<11->|freebsd*|dragonfly*|darwin*|openbsd*)
specs+=( '+:localized representation of date and time' )
;;
solaris2.<-10>)