Display a calendar for the next twelve months.
*-w*, *--week*[=_number_]::
-Display week numbers in the calendar (US or ISO-8601). See the *NOTES* section for more details.
+Display week numbers in the calendar according to the US or ISO-8601 format. If
+a _number_ is specified, the requested week will be printed in the desired or
+current year. The _number_ may be overwritten if _day_ and _month_ are also
+specified.
++
+See the *NOTES* section for more details.
*--color*[=_when_]::
Colorize the output. The optional argument _when_ can be *auto*, *never* or *always*. If the _when_ argument is omitted, it defaults to *auto*. The colors can be disabled; for the current built-in default see the *--help* output. See also the *COLORS* section.
The current day.
*weeknumber*::
+The week number requested by the --week=<number> command line option.
+
+*weeks*::
The number of the week.
*header*::
CAL_COLOR_TODAY,
CAL_COLOR_HEADER,
CAL_COLOR_WEEKNUMBER,
+ CAL_COLOR_WEEKS,
CAL_COLOR_WORKDAY,
CAL_COLOR_WEEKEND
};
static const struct { const char * const scheme; const char * dflt; } colors[] =
{
- [CAL_COLOR_TODAY] = { "today", UL_COLOR_REVERSE },
- [CAL_COLOR_WEEKNUMBER] = { "weeknumber", UL_COLOR_REVERSE },
- [CAL_COLOR_HEADER] = { "header", "" },
+ [CAL_COLOR_TODAY] = { "today", UL_COLOR_REVERSE },
+ [CAL_COLOR_WEEKNUMBER] = { "weeknumber", UL_COLOR_REVERSE }, /* requested week */
+ [CAL_COLOR_WEEKS] = { "weeks", "" }, /* week numbers */
+ [CAL_COLOR_HEADER] = { "header", "" },
[CAL_COLOR_WORKDAY] = { "workday", "" },
[CAL_COLOR_WEEKEND] = { "weekend", "" }
};
break;
case 'w':
if (optarg) {
+ if (*optarg == '=')
+ optarg++;
ctl.req.week = strtos32_or_err(optarg,
_("invalid week argument"));
if (ctl.req.week < 1 || 54 < ctl.req.week)
}
break;
case 0:
- ctl.req.day = local_time.tm_yday + 1;
+ if (!ctl.req.week) {
+ ctl.req.day = local_time.tm_yday + 1;
+ if (!ctl.req.month)
+ ctl.req.month = local_time.tm_mon + 1;
+ }
ctl.req.year = local_time.tm_year + 1900;
- if (!ctl.req.month)
- ctl.req.month = local_time.tm_mon + 1;
+
break;
default:
warnx(_("bad usage"));
const char *seq_we_start = cal_get_color_sequence(CAL_COLOR_WEEKEND);
const char *seq_we_end = cal_get_color_disable_sequence(CAL_COLOR_WEEKEND);
+ const char *seq_ws_start = NULL, *seq_ws_end = NULL;
+
+ if (ctl->weektype) {
+ seq_ws_start = cal_get_color_sequence(CAL_COLOR_WEEKS);
+ seq_ws_end = cal_get_color_disable_sequence(CAL_COLOR_WEEKS);
+ }
+
for (week_line = 0; week_line < MAXDAYS / DAYS_IN_WEEK; week_line++) {
for (i = month; i; i = i->next) {
/* Determine the day that should be highlighted. */
if (ctl->weektype) {
if (0 < i->weeks[week_line]) {
- if ((ctl->weektype & WEEK_NUM_MASK) == i->weeks[week_line])
- printf("%s%2d%s",
- cal_get_color_sequence(CAL_COLOR_WEEKNUMBER),
- i->weeks[week_line],
- cal_get_color_disable_sequence(CAL_COLOR_WEEKNUMBER));
+ const char *seq_start, *seq_end;
+
+ /* colorize by requested week-number or generic weeks color */
+ if (ctl->req.week &&
+ ctl->req.week == i->weeks[week_line]) {
+ seq_start = cal_get_color_sequence(CAL_COLOR_WEEKNUMBER);
+ seq_end = cal_get_color_disable_sequence(CAL_COLOR_WEEKNUMBER);
+ } else {
+ seq_start = seq_ws_start;
+ seq_end = seq_ws_end;
+ }
+
+ if (seq_start && *seq_start)
+ printf("%s%2d%s", seq_start,
+ i->weeks[week_line], seq_end);
else
printf("%2d", i->weeks[week_line]);
} else