diff options
author | Peter Stephenson <pws@zsh.org> | 2015-03-16 15:07:35 +0000 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2015-03-16 15:09:16 +0000 |
commit | 235e9bd1bfe35caf51ba988268e075c24e3615fe (patch) | |
tree | 912e931b5c3b1a1663aa8a672d5b56f89ea18422 /Functions/Calendar/before | |
parent | 236da69842863691098c4b2b603b93d3fcb90bb6 (diff) | |
download | zsh-235e9bd1bfe35caf51ba988268e075c24e3615fe.tar.gz zsh-235e9bd1bfe35caf51ba988268e075c24e3615fe.tar.xz zsh-235e9bd1bfe35caf51ba988268e075c24e3615fe.zip |
34721: new glob qualifier functions before, after
Diffstat (limited to 'Functions/Calendar/before')
-rw-r--r-- | Functions/Calendar/before | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Functions/Calendar/before b/Functions/Calendar/before new file mode 100644 index 000000000..7fb0166f7 --- /dev/null +++ b/Functions/Calendar/before @@ -0,0 +1,67 @@ +# Glob qualifier function, e.g +# +# print *(e:after 2014/08/01:) +# print *(e-after today:12:00-) +# +# If named before: +# Match files modified before a given time. +# +# If named after: +# Match files modified after a given time. Use as glob qualifier. +# N.B.: "after" actually includes the given time as it is to second +# precision (it would be inconvenient to exclude the first second of a date). +# It should therefore more logically be called "from", but that's a less +# obvious name. +# +# File to test is in $REPLY. +# +# Similar to age, but only takes at most one data, which is +# compared directly with the current time. + +emulate -L zsh + +zmodload -F zsh/stat b:zstat +zmodload -i zsh/parameter + +autoload -Uz calendar_scandate + +local timefmt +local -a vals tmp + +[[ -e $REPLY ]] || return 1 +zstat -A vals +mtime -- $REPLY || return 1 + +if (( $# == 1 )); then + if [[ $1 = :* ]]; then + timefmt="%Y/%m/%d:%H:%M:%S" + zstat -A tmp -F $timefmt +mtime -- ${1#:} || return 1 + local AGEREF=$tmp[1] + else + local AGEREF=$1 + fi +fi + +integer mtime=$vals[1] date1 date2 +local REPLY REPLY2 + +# allow a time only (meaning today) +if calendar_scandate -t $AGEREF; then + date1=$REPLY + + case $0 in + (after) + (( mtime >= date1 )) + ;; + + (before) + (( mtime < date1 )) + ;; + + (*) + print "$0: must be named 'after' or 'before'" >&2 + return 1 + ;; + esac +else + return 1 +fi |