[PATCH] highlight today

From: Greg Reagle <greg.reagle_AT_umbc.edu>
Date: Fri, 20 Nov 2015 11:36:37 -0500

---
 cal.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/cal.c b/cal.c
index 740dc02..b9eb1b9 100644
--- a/cal.c
+++ b/cal.c
_AT_@ -3,10 +3,14 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <term.h>
 #include <time.h>
+#include <unistd.h>
 
 #include "util.h"
 
+static struct {size_t y; int m, d;} today;
+
 enum { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };
 enum caltype { JULIAN, GREGORIAN };
 enum { TRANS_YEAR = 1752, TRANS_MONTH = SEP, TRANS_DAY = 2 };
_AT_@ -56,6 +60,15 @@ printgrid(size_t year, int month, int fday, int line)
 {
 	enum caltype cal;
 	int offset, dom, d = 0, trans; /* are we in the transition from Julian to Gregorian? */
+	char *term_so, *term_se;
+	char tbuf[1024], cbuf[512], *b;
+
+	term_se = term_so = "";
+	if (isatty(STDOUT_FILENO) && tgetent(tbuf, NULL) == 1) {
+		b = cbuf;
+		term_so = tgetstr("so", &b);
+		term_se = tgetstr("se", &b);
+	}
 
 	cal = (year < TRANS_YEAR || (year == TRANS_YEAR && month <= TRANS_MONTH)) ? JULIAN : GREGORIAN;
 	trans = (year == TRANS_YEAR && month == TRANS_MONTH);
_AT_@ -73,7 +86,10 @@ printgrid(size_t year, int month, int fday, int line)
 			dom += 11;
 	}
 	for (; d < 7 && dom <= monthlength(year, month, cal); ++d, ++dom) {
-		printf("%2d ", dom);
+		if (dom == today.d && month == today.m && year == today.y)
+			printf("%s%2d%s ", term_so, dom, term_se);
+		else
+			printf("%2d ", dom);
 		if (trans && dom == TRANS_DAY)
 			dom += 11;
 	}
_AT_@ -145,6 +161,9 @@ main(int argc, char *argv[])
 	ltime = localtime(&now);
 	year  = ltime->tm_year + 1900;
 	month = ltime->tm_mon + 1;
+	today.y = year;
+	today.m = month - 1;
+	today.d = ltime->tm_mday;
 	fday  = 0;
 
 	ncols = 3;
-- 
1.9.1
--------------010009050605030702010408--
Received on Mon Sep 17 2001 - 00:00:00 CEST

This archive was generated by hypermail 2.3.0 : Fri Nov 20 2015 - 19:36:10 CET