summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-12-31 17:49:41 -0500
committerJune McEnroe <june@causal.agency>2019-12-31 17:49:41 -0500
commitf6d035f92e11e5432da3b9be2758ea619fb3cfbb (patch)
treea5d09ddf84d3d43b810d060ac3c31fa0dc577aff
parentRefactor binding in scoop (diff)
downloadlitterbox-f6d035f92e11e5432da3b9be2758ea619fb3cfbb.tar.gz
litterbox-f6d035f92e11e5432da3b9be2758ea619fb3cfbb.zip
Add strftime format string option
Diffstat (limited to '')
-rw-r--r--scoop.111
-rw-r--r--scoop.c6
2 files changed, 14 insertions, 3 deletions
diff --git a/scoop.1 b/scoop.1
index a9a40c0..2dfdf09 100644
--- a/scoop.1
+++ b/scoop.1
@@ -10,6 +10,7 @@
 .Nm
 .Op Fl gpqv
 .Op Fl D Ar date
+.Op Fl F Ar format
 .Op Fl N Ar network
 .Op Fl T Ar target
 .Op Fl c Ar context
@@ -47,6 +48,16 @@ of the format
 or the keyword
 .Cm now .
 .
+.It Fl F Ar format
+Format timestamps using the
+.Ar format
+string,
+similar to
+.Xr strftime 3 .
+The default format is ISO8601.
+See
+.Lk https://www.sqlite.org/lang_datefunc.html
+.
 .It Fl N Ar network
 Match events from contexts on
 .Ar network .
diff --git a/scoop.c b/scoop.c
index 2a78af8..d8e7607 100644
--- a/scoop.c
+++ b/scoop.c
@@ -29,8 +29,7 @@ static const char *Inner = SQL(
 	SELECT
 		contexts.network,
 		contexts.name AS context,
-		// TODO: Replace with a strftime and option.
-		date(events.time) || 'T' || time(events.time) || 'Z' AS time,
+		strftime(coalesce(:format, '%Y-%m-%dT%H:%M:%SZ'), events.time) AS time,
 		events.type,
 		names.nick,
 		CASE WHEN names.user = '*'
@@ -183,9 +182,10 @@ int main(int argc, char *argv[]) {
 	const char *search = NULL;
 
 	int opt;
-	while (0 < (opt = getopt(argc, argv, "D:N:T:c:d:gh:l:n:pqst:u:v"))) {
+	while (0 < (opt = getopt(argc, argv, "D:F:N:T:c:d:gh:l:n:pqst:u:v"))) {
 		switch (opt) {
 			break; case 'D': binds[n++] = Bind(":date", optarg, 0);
+			break; case 'F': binds[n++] = Bind(":format", optarg, 0);
 			break; case 'N': binds[n++] = Bind(":network", optarg, 0);
 			break; case 'T': binds[n++] = Bind(":target", optarg, 0);
 			break; case 'c': binds[n++] = Bind(":context", optarg, 0);