summary refs log tree commit diff
path: root/Functions/Calendar/before
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/before
parent236da69842863691098c4b2b603b93d3fcb90bb6 (diff)
downloadzsh-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/before67
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