summaryrefslogtreecommitdiff
path: root/Functions/Calendar/after
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2015-03-16 15:07:35 +0000
committerPeter Stephenson <pws@zsh.org>2015-03-16 15:09:16 +0000
commit235e9bd1bfe35caf51ba988268e075c24e3615fe (patch)
tree912e931b5c3b1a1663aa8a672d5b56f89ea18422 /Functions/Calendar/after
parent236da69842863691098c4b2b603b93d3fcb90bb6 (diff)
downloadzsh-235e9bd1bfe35caf51ba988268e075c24e3615fe.tar.gz
zsh-235e9bd1bfe35caf51ba988268e075c24e3615fe.zip
34721: new glob qualifier functions before, after
Diffstat (limited to 'Functions/Calendar/after')
-rw-r--r--Functions/Calendar/after67
1 files changed, 67 insertions, 0 deletions
diff --git a/Functions/Calendar/after b/Functions/Calendar/after
new file mode 100644
index 000000000..7fb0166f7
--- /dev/null
+++ b/Functions/Calendar/after
@@ -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