diff options
author | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2016-11-24 21:33:15 +0900 |
---|---|---|
committer | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2016-11-24 21:33:15 +0900 |
commit | fe2d87767ddf4f6d325dbc76a0b6e6dc624ce556 (patch) | |
tree | 90f25792625267a9b8663aff185b2cef6435e3ac /Completion/Unix/Command | |
parent | b3a88a53d379d6b59ccee468723a034f65fd757d (diff) | |
download | zsh-fe2d87767ddf4f6d325dbc76a0b6e6dc624ce556.tar.gz zsh-fe2d87767ddf4f6d325dbc76a0b6e6dc624ce556.tar.xz zsh-fe2d87767ddf4f6d325dbc76a0b6e6dc624ce556.zip |
40005: call _date_formats from _date
also update both files for darwin etc.
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r-- | Completion/Unix/Command/_date | 97 |
1 files changed, 69 insertions, 28 deletions
diff --git a/Completion/Unix/Command/_date b/Completion/Unix/Command/_date index ff3bac398..16b34d7d6 100644 --- a/Completion/Unix/Command/_date +++ b/Completion/Unix/Command/_date @@ -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 |