aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2021-01-30 21:26:54 +0100
committerLeah Neukirchen <leah@vuxu.org>2021-01-30 21:27:40 +0100
commit7021f4b452b385d16bb7d057ad9fc31d0528bef1 (patch)
tree1c7bc5d7a3dc701c871cb64ddb471b0f05c9e4d4
parent5a8259226e0d21331da7e594a80c49add3e2721f (diff)
downloadwcal-7021f4b452b385d16bb7d057ad9fc31d0528bef1.tar.gz
wcal-7021f4b452b385d16bb7d057ad9fc31d0528bef1.tar.xz
wcal-7021f4b452b385d16bb7d057ad9fc31d0528bef1.zip
also highlight current week day and current week
-rw-r--r--wcal.15
-rw-r--r--wcal.c35
2 files changed, 33 insertions, 7 deletions
diff --git a/wcal.1 b/wcal.1
index 4da0c16..60142bd 100644
--- a/wcal.1
+++ b/wcal.1
@@ -1,4 +1,4 @@
-.Dd December 12, 2020
+.Dd January 30, 2021
.Dt WCAL 1
.Os
.Sh NAME
@@ -14,7 +14,8 @@ The
utility prints a week-oriented calendar.
Each week is prefixed with its ISO week number.
.Pp
-When outputting to a TTY, the current day is shown in reverse video.
+When outputting to a TTY,
+the current day, week day, and week are shown in reverse video.
.Pp
The options are as follows:
.Bl -tag -width Ds
diff --git a/wcal.c b/wcal.c
index c00d740..86298de 100644
--- a/wcal.c
+++ b/wcal.c
@@ -29,6 +29,11 @@ const char monthname[13][4] = {
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
+const char wdayname[8][3] = {
+ " ",
+ "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"
+};
+
/* all args are 1-indexed */
long
ymd2jd(int year, int month, int day)
@@ -112,6 +117,8 @@ main(int argc, char *argv[])
int d = tm->tm_mday;
int w;
int i;
+ int cw;
+ int ci;
int c;
while ((c = getopt(argc, argv, "13cCid:y")) != -1)
@@ -127,6 +134,7 @@ main(int argc, char *argv[])
}
long today = ymd2jd(y, m, d);
+ jd2ymdwi(today, &y, &m, &d, &cw, &ci);
int max_weeks = 1;
int max_months = 0;
@@ -151,14 +159,31 @@ main(int argc, char *argv[])
int color = isatty(1) || flagC;
- printf(" %sMo Tu We Th Fr Sa Su%s\n",
- color ? "\e[4m" : "",
- color ? "\e[0m" : "");
+ printf(" ");
+ if (color)
+ printf("\e[4m");
+ for (int wd = 1; wd <= 7; wd++) {
+ if (color && wd == cw)
+ printf("\e[7m");
+ printf("%s", wdayname[wd]);
+ if (color && wd == cw)
+ printf("\e[27m");
+ if (wd < 7)
+ printf(" ");
+ }
+ if (color)
+ printf("\e[0m");
+ printf("\n");
for (int weeks = 0, months = 0;
flagi || (max_months && months < max_months) || (weeks < max_weeks);
weeks++) {
- printf("%02d ", i);
+ if (color && i == ci)
+ printf("\e[7m");
+ printf("%02d", i);
+ if (color && i == ci)
+ printf("\e[27m");
+ printf(" ");
int ey, em, ed, ew, ei;
jd2ymdwi(jd + 6, &ey, &em, &ed, &ew, &ei); /* end of week */
@@ -176,7 +201,7 @@ main(int argc, char *argv[])
printf(" %s%2d%s",
color && (jd == today) ? "\e[7m" : "",
d,
- color && (jd == today) ? "\e[0m" : "");
+ color && (jd == today) ? "\e[27m" : "");
jd++;
jd2ymdwi(jd, &y, &m, &d, &w, &i);