zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: zsh/datetime $EPOCHREALTIME
@ 2011-08-10 11:21 Peter Stephenson
  2011-08-10 11:37 ` Mikael Magnusson
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Stephenson @ 2011-08-10 11:21 UTC (permalink / raw)
  To: Zsh Hackers' List

I had a need for the current time to better than one second precision in
a shell function, which currently (as far as I can see) the shell
doesn't do.  It does for SECONDS, but that's not useful for comparison
with times used by the rest of the system.

Adding a floating point variable to zsh/datetime seems to be the natural
way to go.  It's called EPOCHREALTIME because it's using CLOCK_REALTIME,
which is a bit of arcane knowledge the shell user doesn't need to know,
and is tautologous since that by definition measures time since the
epoch, but since EPOCHSECONDS is already taken I had to make something
up.  The state of the art (POSIX) appears to be clock_gettime(), rather
than gettimeofday() that's used elsewhere in the shell, but it will
fall back if that's not available; we already assume gettimeofday() is
present so I haven't bothered testing for it.

Linux hides clock_gettime() in a library called librt.  I'm not sure how
standard that is, but it's another reason for the HAVE_... test.

Index: configure.ac
===================================================================
RCS file: /cvsroot/zsh/zsh/configure.ac,v
retrieving revision 1.136
diff -p -u -r1.136 configure.ac
--- configure.ac	14 May 2011 00:07:41 -0000	1.136
+++ configure.ac	10 Aug 2011 11:12:33 -0000
@@ -693,6 +693,8 @@ AC_CHECK_LIB(c, printf, [LIBS="$LIBS -lc
 
 AC_CHECK_LIB(m, pow)
 
+AC_CHECK_LIB(rt, clock_gettime)
+
 dnl Various features of ncurses depend on having the right header
 dnl (the system's own curses.h may well not be good enough).
 dnl So don't search for ncurses unless we found the header.
@@ -1170,7 +1172,7 @@ dnl need to integrate this function
 dnl AC_FUNC_STRFTIME
 
 AC_CHECK_FUNCS(strftime strptime mktime timelocal \
-	       difftime gettimeofday \
+	       difftime gettimeofday clock_gettime \
 	       select poll \
 	       readlink faccessx fchdir ftruncate \
 	       fstat lstat lchown fchown fchmod \
Index: Doc/Zsh/mod_datetime.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/mod_datetime.yo,v
retrieving revision 1.3
diff -p -u -r1.3 mod_datetime.yo
--- Doc/Zsh/mod_datetime.yo	17 Aug 2006 15:28:11 -0000	1.3
+++ Doc/Zsh/mod_datetime.yo	10 Aug 2011 11:12:33 -0000
@@ -30,9 +30,17 @@ in seconds if tt(-r) is given) to var(sc
 )
 enditem()
 
-The tt(zsh/datetime) module makes available one parameter:
+The tt(zsh/datetime) module makes available several parameters:
 
 startitem()
+vindex(EPOCHREALTIME)
+item(tt(EPOCHREALTIME))(
+A floating point value representing the number of seconds since
+the epoch.  The notional accuracy is to nanoseconds if the
+tt(clock_gettime) call is available and to microseconds otherwise,
+but in practice the range of double precision floating point and
+shell scheduling latencies may be significant effects.
+)
 vindex(EPOCHSECONDS)
 item(tt(EPOCHSECONDS))(
 An integer value representing the number of seconds since the
Index: Src/module.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/module.c,v
retrieving revision 1.42
diff -p -u -r1.42 module.c
--- Src/module.c	14 Jun 2010 11:57:08 -0000	1.42
+++ Src/module.c	10 Aug 2011 11:12:33 -0000
@@ -1081,6 +1081,11 @@ addparamdef(Paramdef d)
 	    pm->gsu.i = d->gsu ? (GsuInteger)d->gsu : &varinteger_gsu;
 	    break;
 
+	case PM_FFLOAT:
+	case PM_EFLOAT:
+	    pm->gsu.f = d->gsu;
+	    break;
+
 	case PM_ARRAY:
 	    pm->gsu.a = d->gsu ? (GsuArray)d->gsu : &vararray_gsu;
 	    break;
Index: Src/Modules/datetime.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/datetime.c,v
retrieving revision 1.22
diff -p -u -r1.22 datetime.c
--- Src/Modules/datetime.c	13 May 2011 18:12:06 -0000	1.22
+++ Src/Modules/datetime.c	10 Aug 2011 11:12:33 -0000
@@ -151,6 +151,28 @@ getcurrentsecs(UNUSED(Param pm))
     return (zlong) time(NULL);
 }
 
+static double
+getcurrentrealtime(UNUSED(Param pm))
+{
+#ifdef HAVE_CLOCK_GETTIME
+    struct timespec now;
+
+    if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
+	zwarn("EPOCHREALTIME: unable to retrieve time: %e", errno);
+	return (double)0.0;
+    }
+
+    return (double)now.tv_sec + (double)now.tv_nsec * 1e-9;
+#else
+    struct timeval now;
+    struct timezone dummy_tz;
+
+    gettimeofday(&now, &dummy_tz);
+
+    return (double)now.tv_sec + (double)now.tv_usec * 1e-6;
+#endif
+}
+
 static struct builtin bintab[] = {
     BUILTIN("strftime",    0, bin_strftime,    2,   2, 0, "qrs:", NULL),
 };
@@ -158,9 +180,14 @@ static struct builtin bintab[] = {
 static const struct gsu_integer epochseconds_gsu =
 { getcurrentsecs, NULL, stdunsetfn };
 
+static const struct gsu_float epochrealtime_gsu =
+{ getcurrentrealtime, NULL, stdunsetfn };
+
 static struct paramdef patab[] = {
     SPECIALPMDEF("EPOCHSECONDS", PM_INTEGER|PM_READONLY,
 		 &epochseconds_gsu, NULL, NULL),
+    SPECIALPMDEF("EPOCHREALTIME", PM_FFLOAT|PM_READONLY,
+		 &epochrealtime_gsu, NULL, NULL)
 };
 
 static struct features module_features = {


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 11:21 PATCH: zsh/datetime $EPOCHREALTIME Peter Stephenson
@ 2011-08-10 11:37 ` Mikael Magnusson
  2011-08-10 11:41   ` Peter Stephenson
  0 siblings, 1 reply; 10+ messages in thread
From: Mikael Magnusson @ 2011-08-10 11:37 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh Hackers' List

On 10 August 2011 13:21, Peter Stephenson <Peter.Stephenson@csr.com> wrote:
> I had a need for the current time to better than one second precision in
> a shell function, which currently (as far as I can see) the shell
> doesn't do.  It does for SECONDS, but that's not useful for comparison
> with times used by the rest of the system.

Curious, I made a similar patch last week but didn't post it yet :)
Your patch looks better though, my variable just had the nanoseconds
part in it, and no docs. I did put a --disable-rt option in mine
though.

http://cgit.mika.l3ib.org/cgit/zsh-cvs/patch/?id=975f61fe05a0bd79fe3c4ad86cbc5a9c02eca202

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 11:37 ` Mikael Magnusson
@ 2011-08-10 11:41   ` Peter Stephenson
  2011-08-10 15:30     ` Bart Schaefer
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Stephenson @ 2011-08-10 11:41 UTC (permalink / raw)
  To: Zsh Hackers' List

On Wed, 10 Aug 2011 13:37:15 +0200
Mikael Magnusson <mikachu@gmail.com> wrote:

> On 10 August 2011 13:21, Peter Stephenson <Peter.Stephenson@csr.com> wrote:
> > I had a need for the current time to better than one second precision in
> > a shell function, which currently (as far as I can see) the shell
> > doesn't do.  It does for SECONDS, but that's not useful for comparison
> > with times used by the rest of the system.
> 
> Curious, I made a similar patch last week but didn't post it yet :)
> Your patch looks better though, my variable just had the nanoseconds
> part in it, and no docs. I did put a --disable-rt option in mine
> though.

I'm actually wondering if we ought to be a bit smarter and add an
epochrealtime array with the seconds and nanoseconds as elements
(guaranteed to be consistent, obviously). Exercise for the reader.

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 11:41   ` Peter Stephenson
@ 2011-08-10 15:30     ` Bart Schaefer
  2011-08-10 15:38       ` Mikael Magnusson
  2011-08-10 15:41       ` Peter Stephenson
  0 siblings, 2 replies; 10+ messages in thread
From: Bart Schaefer @ 2011-08-10 15:30 UTC (permalink / raw)
  To: Zsh Hackers' List

On Aug 10, 12:41pm, Peter Stephenson wrote:
}
} I'm actually wondering if we ought to be a bit smarter and add an
} epochrealtime array with the seconds and nanoseconds as elements
} (guaranteed to be consistent, obviously). Exercise for the reader.

Better (?) still:

Allow the user to apply typeset to EPOCHSECONDS.  If it's an int,
it is as it is now.  If it's a float, what you called EPOCHREALTIME.
If an array, elements for seconds and nanoseconds.  If a hash, the
keys are tv_sec and tv_nsec like a timespec (convert from tv_usec
when using gettimeofday).

Too bad that would require mucking about with whether it's special
and readonly, or else introducing provision for other special cases
into typeset ...


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 15:30     ` Bart Schaefer
@ 2011-08-10 15:38       ` Mikael Magnusson
  2011-08-10 16:19         ` Peter Stephenson
  2011-08-10 15:41       ` Peter Stephenson
  1 sibling, 1 reply; 10+ messages in thread
From: Mikael Magnusson @ 2011-08-10 15:38 UTC (permalink / raw)
  To: Zsh Hackers' List

On 10 August 2011 17:30, Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Aug 10, 12:41pm, Peter Stephenson wrote:
> }
> } I'm actually wondering if we ought to be a bit smarter and add an
> } epochrealtime array with the seconds and nanoseconds as elements
> } (guaranteed to be consistent, obviously). Exercise for the reader.
>
> Better (?) still:
>
> Allow the user to apply typeset to EPOCHSECONDS.  If it's an int,
> it is as it is now.  If it's a float, what you called EPOCHREALTIME.
> If an array, elements for seconds and nanoseconds.  If a hash, the
> keys are tv_sec and tv_nsec like a timespec (convert from tv_usec
> when using gettimeofday).
>
> Too bad that would require mucking about with whether it's special
> and readonly, or else introducing provision for other special cases
> into typeset ...

If it's an array, how do you get both elements at the 'same' time? I'm
guessing you would always have to copy the array in one step and then
access the elements in the copy.

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 15:30     ` Bart Schaefer
  2011-08-10 15:38       ` Mikael Magnusson
@ 2011-08-10 15:41       ` Peter Stephenson
  2011-08-10 16:08         ` Bart Schaefer
  1 sibling, 1 reply; 10+ messages in thread
From: Peter Stephenson @ 2011-08-10 15:41 UTC (permalink / raw)
  To: Zsh Hackers' List

On Wed, 10 Aug 2011 08:30:17 -0700
Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Aug 10, 12:41pm, Peter Stephenson wrote:
> }
> } I'm actually wondering if we ought to be a bit smarter and add an
> } epochrealtime array with the seconds and nanoseconds as elements
> } (guaranteed to be consistent, obviously). Exercise for the reader.
> 
> Better (?) still:
> 
> Allow the user to apply typeset to EPOCHSECONDS.  If it's an int,
> it is as it is now.  If it's a float, what you called EPOCHREALTIME.
> If an array, elements for seconds and nanoseconds.  If a hash, the
> keys are tv_sec and tv_nsec like a timespec (convert from tv_usec
> when using gettimeofday).
> 
> Too bad that would require mucking about with whether it's special
> and readonly, or else introducing provision for other special cases
> into typeset ...

That's the trick I did with SECONDS, but a utility library like
zsh/datetime might be called in lots of different places and come a
cropper if the type is wrong (e.g. supplying a float to strftime screws
up), so I thought it would be better to minimise the assumptions needed.

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 15:41       ` Peter Stephenson
@ 2011-08-10 16:08         ` Bart Schaefer
  2011-08-10 16:13           ` Mikael Magnusson
  0 siblings, 1 reply; 10+ messages in thread
From: Bart Schaefer @ 2011-08-10 16:08 UTC (permalink / raw)
  To: Zsh Hackers' List

On Aug 10,  4:41pm, Peter Stephenson wrote:
}
} On Wed, 10 Aug 2011 08:30:17 -0700
} Bart Schaefer <schaefer@brasslantern.com> wrote:
} > Allow the user to apply typeset to EPOCHSECONDS.  If it's an int,
} > it is as it is now.  If it's a float, what you called EPOCHREALTIME.
} > If an array, elements for seconds and nanoseconds.  If a hash, the
} > keys are tv_sec and tv_nsec like a timespec (convert from tv_usec
} > when using gettimeofday).
} 
} That's the trick I did with SECONDS, but a utility library like
} zsh/datetime might be called in lots of different places and
} come a cropper if the type is wrong (e.g. supplying a float to
} strftime screws up), so I thought it would be better to minimise the
} assumptions needed.

Good point regarding overloading EPOCHSECONDS.  So, introduce a new
variable EPOCHTIMESPEC (or just EPOCHTIME, I suppose).

Regarding Mikael's question ... is there any way for the getfn of an
array to know what array element has been accessed?  E.g. could the
function update the time only when the entire array or the first
(seconds) element is accessed, and return the previous value when
the nanoseconds is accessed?

If not, he's right, you'd always have to copy it (which is probably
not a big deal if you're already interested in each bit separately).

for sec nsec in $EPOCHTIME; do ...


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 16:08         ` Bart Schaefer
@ 2011-08-10 16:13           ` Mikael Magnusson
  0 siblings, 0 replies; 10+ messages in thread
From: Mikael Magnusson @ 2011-08-10 16:13 UTC (permalink / raw)
  To: Zsh Hackers' List

On 10 August 2011 18:08, Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Aug 10,  4:41pm, Peter Stephenson wrote:
> }
> } On Wed, 10 Aug 2011 08:30:17 -0700
> } Bart Schaefer <schaefer@brasslantern.com> wrote:
> } > Allow the user to apply typeset to EPOCHSECONDS.  If it's an int,
> } > it is as it is now.  If it's a float, what you called EPOCHREALTIME.
> } > If an array, elements for seconds and nanoseconds.  If a hash, the
> } > keys are tv_sec and tv_nsec like a timespec (convert from tv_usec
> } > when using gettimeofday).
> }
> } That's the trick I did with SECONDS, but a utility library like
> } zsh/datetime might be called in lots of different places and
> } come a cropper if the type is wrong (e.g. supplying a float to
> } strftime screws up), so I thought it would be better to minimise the
> } assumptions needed.
>
> Good point regarding overloading EPOCHSECONDS.  So, introduce a new
> variable EPOCHTIMESPEC (or just EPOCHTIME, I suppose).
>
> Regarding Mikael's question ... is there any way for the getfn of an
> array to know what array element has been accessed?  E.g. could the
> function update the time only when the entire array or the first
> (seconds) element is accessed, and return the previous value when
> the nanoseconds is accessed?
>
> If not, he's right, you'd always have to copy it (which is probably
> not a big deal if you're already interested in each bit separately).
>
> for sec nsec in $EPOCHTIME; do ...

Also, since we're dealing with nanoseconds it's nice if we don't spend
too many cycles mucking about, I know that is quite an optimistic
statement when talking about zsh, but still ;).

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 15:38       ` Mikael Magnusson
@ 2011-08-10 16:19         ` Peter Stephenson
  2011-08-11 18:33           ` Peter Stephenson
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Stephenson @ 2011-08-10 16:19 UTC (permalink / raw)
  To: Zsh Hackers' List

On Wed, 10 Aug 2011 17:38:52 +0200
Mikael Magnusson <mikachu@gmail.com> wrote:
> If it's an array, how do you get both elements at the 'same' time? I'm
> guessing you would always have to copy the array in one step and then
> access the elements in the copy.

I believe that's correct, yes.  I think copying the whole array is safe
since we only call the array get function once (line 2360 of subst.c
which ends up in getvaluearr() which performs one call to the
parameter-specific get function), but that could probably do with a
quick once over if this gets implemented.

-- 
Peter Stephenson <pws@csr.com>            Software Engineer
Tel: +44 (0)1223 692070                   Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: PATCH: zsh/datetime $EPOCHREALTIME
  2011-08-10 16:19         ` Peter Stephenson
@ 2011-08-11 18:33           ` Peter Stephenson
  0 siblings, 0 replies; 10+ messages in thread
From: Peter Stephenson @ 2011-08-11 18:33 UTC (permalink / raw)
  To: Zsh Hackers' List

Index: Doc/Zsh/mod_datetime.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/mod_datetime.yo,v
retrieving revision 1.4
diff -p -u -r1.4 mod_datetime.yo
--- Doc/Zsh/mod_datetime.yo	10 Aug 2011 11:31:19 -0000	1.4
+++ Doc/Zsh/mod_datetime.yo	11 Aug 2011 18:24:33 -0000
@@ -30,7 +30,8 @@ in seconds if tt(-r) is given) to var(sc
 )
 enditem()
 
-The tt(zsh/datetime) module makes available several parameters:
+The tt(zsh/datetime) module makes available several parameters;
+all are readonly:
 
 startitem()
 vindex(EPOCHREALTIME)
@@ -46,4 +47,18 @@ item(tt(EPOCHSECONDS))(
 An integer value representing the number of seconds since the
 epoch.
 )
+vindex(epochtime)
+item(tt(epochtime))(
+An array value containing the number of seconds since the epoch
+in the first element and the remainder of the time since the epoch
+in nanoseconds in the second element.  To ensure the two elements
+are consistent the array should be copied or otherwise referenced
+as a single substitution before the values are used.  The following
+idiom may be used:
+
+example(for secs nsecs in $epochtime; do
+  ...
+done)
+
+)
 enditem()
Index: Src/Modules/datetime.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/datetime.c,v
retrieving revision 1.23
diff -p -u -r1.23 datetime.c
--- Src/Modules/datetime.c	10 Aug 2011 11:31:19 -0000	1.23
+++ Src/Modules/datetime.c	11 Aug 2011 18:24:33 -0000
@@ -173,6 +173,45 @@ getcurrentrealtime(UNUSED(Param pm))
 #endif
 }
 
+static char **
+getcurrenttime(UNUSED(Param pm))
+{
+    char **arr;
+    char buf[DIGBUFSIZE];
+
+#ifdef HAVE_CLOCK_GETTIME
+    struct timespec now;
+
+    if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
+	zwarn("EPOCHREALTIME: unable to retrieve time: %e", errno);
+	return NULL;
+    }
+
+    arr = (char **)zhalloc(3 * sizeof(*arr));
+    sprintf(buf, "%ld", (long)now.tv_sec);
+    arr[0] = dupstring(buf);
+    sprintf(buf, "%ld", now.tv_nsec);
+    arr[1] = dupstring(buf);
+    arr[2] = NULL;
+
+    return arr;
+#else
+    struct timeval now;
+    struct timezone dummy_tz;
+
+    gettimeofday(&now, &dummy_tz);
+
+    arr = (char **)zhalloc(3 * sizeof(*arr));
+    sprintf(buf, "%ld", (long)now.tv_sec);
+    arr[0] = dupstring(buf);
+    sprintf(buf, "%ld", (long)now.tv_usec * 1000);
+    arr[1] = dupstring(buf);
+    arr[2] = NULL;
+
+    return arr;
+#endif
+}
+
 static struct builtin bintab[] = {
     BUILTIN("strftime",    0, bin_strftime,    2,   2, 0, "qrs:", NULL),
 };
@@ -183,11 +222,16 @@ static const struct gsu_integer epochsec
 static const struct gsu_float epochrealtime_gsu =
 { getcurrentrealtime, NULL, stdunsetfn };
 
+static const struct gsu_array epochtime_gsu =
+{ getcurrenttime, NULL, stdunsetfn };
+
 static struct paramdef patab[] = {
     SPECIALPMDEF("EPOCHSECONDS", PM_INTEGER|PM_READONLY,
 		 &epochseconds_gsu, NULL, NULL),
     SPECIALPMDEF("EPOCHREALTIME", PM_FFLOAT|PM_READONLY,
-		 &epochrealtime_gsu, NULL, NULL)
+		 &epochrealtime_gsu, NULL, NULL),
+    SPECIALPMDEF("epochtime", PM_ARRAY|PM_READONLY,
+		 &epochtime_gsu, NULL, NULL)
 };
 
 static struct features module_features = {

-- 
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-08-11 18:34 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-10 11:21 PATCH: zsh/datetime $EPOCHREALTIME Peter Stephenson
2011-08-10 11:37 ` Mikael Magnusson
2011-08-10 11:41   ` Peter Stephenson
2011-08-10 15:30     ` Bart Schaefer
2011-08-10 15:38       ` Mikael Magnusson
2011-08-10 16:19         ` Peter Stephenson
2011-08-11 18:33           ` Peter Stephenson
2011-08-10 15:41       ` Peter Stephenson
2011-08-10 16:08         ` Bart Schaefer
2011-08-10 16:13           ` Mikael Magnusson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).