mirror of
git://git.code.sf.net/p/zsh/code
synced 2026-01-03 20:51:07 +01:00
34721: new glob qualifier functions before, after
This commit is contained in:
parent
236da69842
commit
235e9bd1bf
4 changed files with 166 additions and 8 deletions
|
|
@ -1,3 +1,8 @@
|
|||
2015-03-16 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* 34721: Doc/Zsh/calsys.yo, Functions/Calendar/after,
|
||||
Functions/Calendar/before: new glob qualifier functions.
|
||||
|
||||
2015-03-16 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||
|
||||
* 34671 plus tweaks: Completion/Base/Utility/_describe
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ or future events, details of which are stored in a text file (typically
|
|||
tt(calendar) in the user's home directory). The version provided here
|
||||
includes a mechanism for alerting the user when an event is due.
|
||||
|
||||
In addition a function tt(age) is provided that can be used in a glob
|
||||
qualifier; it allows files to be selected based on their modification
|
||||
times.
|
||||
In addition functions tt(age), tt(before) and tt(after) are provided
|
||||
that can be used in a glob qualifier; they allow files to be selected
|
||||
based on their modification times.
|
||||
|
||||
The format of the tt(calendar) file and the dates used there in and in
|
||||
the tt(age) function are described first, then the functions that can
|
||||
|
|
@ -122,10 +122,10 @@ enditemize()
|
|||
Here, square brackets indicate optional elements, possibly with
|
||||
alternatives. Fractions of a second are recognised but ignored. For
|
||||
absolute times (the normal format require by the tt(calendar) file and the
|
||||
tt(age) function) a date is mandatory but a time of day is not; the time
|
||||
returned is at the start of the date. One variation is allowed: if
|
||||
tt(a.m.) or tt(p.m.) or one of their variants is present, an hour without a
|
||||
minute is allowed, e.g. tt(3 p.m.).
|
||||
tt(age), tt(before) and tt(after) functions) a date is mandatory but a
|
||||
time of day is not; the time returned is at the start of the date. One
|
||||
variation is allowed: if tt(a.m.) or tt(p.m.) or one of their variants
|
||||
is present, an hour without a minute is allowed, e.g. tt(3 p.m.).
|
||||
|
||||
Time zones are not handled, though if one is matched following a time
|
||||
specification it will be removed to allow a surrounding date to be
|
||||
|
|
@ -605,8 +605,10 @@ left in a file with the suffix tt(.old).
|
|||
enditem()
|
||||
|
||||
subsect(Glob qualifiers)
|
||||
findex(age)
|
||||
|
||||
startitem()
|
||||
item(tt(age))(
|
||||
findex(age)
|
||||
The function tt(age) can be autoloaded and use separately from
|
||||
the calendar system, although it uses the function tt(calendar_scandate)
|
||||
for date formatting. It requires the tt(zsh/stat) builtin, but uses
|
||||
|
|
@ -675,6 +677,23 @@ example(print *+LPAR()e-age :file1 :file2-+RPAR())
|
|||
|
||||
matches all files modified no earlier than tt(file1) and
|
||||
no later than tt(file2); precision here is to the nearest second.
|
||||
)
|
||||
xitem(tt(after))
|
||||
item(tt(before))(
|
||||
findex(after)
|
||||
findex(before)
|
||||
The functions tt(after) and tt(before) are simpler versions of tt(age)
|
||||
that take just one argument. The argument is parsed similarly to an
|
||||
argument of tt(age); if it is not given the variable tt(AGEREF) is
|
||||
consulted. As the names of the functions suggest, a file matches if its
|
||||
modification time is after or before the time and date specified. If
|
||||
a time only is given the date is today.
|
||||
|
||||
The two following examples are therefore equivalent:
|
||||
example(print *+LPAR()e-after 12:00-RPAR()
|
||||
print *+LPAR()e-after today:12:00-RPAR())
|
||||
)
|
||||
enditem()
|
||||
|
||||
texinode(Calendar Styles)(Calendar Utility Functions)(Calendar System User Functions)(Calendar Function System)
|
||||
sect(Styles)
|
||||
|
|
|
|||
67
Functions/Calendar/after
Normal file
67
Functions/Calendar/after
Normal file
|
|
@ -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
|
||||
67
Functions/Calendar/before
Normal file
67
Functions/Calendar/before
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue