Download raw body.
cal's -y flag usage
2026-06-25T21:47:47+0200 Jeremie Courreges-Anglas <jca@wxcvbn.org>:
> On Thu, Jun 25, 2026 at 09:13:44AM +0000, Johannes Thyssen Tishman wrote:
> > While playing with cal I noticed that using the -y flag along with a
> > single non-numerical argument or with two arguments would essentially
> > cause the option to be ignored:
> >
> > $ cal -y jun
> > $ cal -y jun 2026
> > $ cal -y 06 2026
> >
> > All three commands output the calendar for June 2026 instead of the
> > entire year. Before I try to patch this, is this the desired/intended
> > behaviour?
>
> IMO -y should be ignored when a year is later specified on the command
> line (current behavior), and should conflict with specifying a month.
So, like this (diff below)?
$ cal -y # calendar for year 2026
$ cal -y 2000 # calendar for year 2000
$ cal -y jul # error
$ cal -y jul 2000 # error
> > In case a change is desired, would it make sense to split the SYNOPSIS
> > in the man page into two lines? E.g.:
> >
> > cal [-jmw] [month] [year]
> > cal [-jmwy] [year]
>
> It doesn't really make sense to specify [year] when you specify -y.
> I'm not sure the synopsis needs to be amended.
I agree, I forgot that cal yyyy would print the year calendar already.
Index: usr.bin/cal/cal.1
===================================================================
RCS file: /cvs/src/usr.bin/cal/cal.1,v
diff -u -p -r1.33 cal.1
--- usr.bin/cal/cal.1 31 Jul 2024 17:09:23 -0000 1.33
+++ usr.bin/cal/cal.1 26 Jun 2026 12:35:41 -0000
@@ -72,6 +72,10 @@ and
are mutually exclusive.
.It Fl y
Display a calendar for the current year.
+This option is ignored if
+.Ar year
+is specified and conflicts with specifying a
+.Ar month .
.El
.Pp
A single numerical parameter specifies the
Index: usr.bin/cal/cal.c
===================================================================
RCS file: /cvs/src/usr.bin/cal/cal.c,v
diff -u -p -r1.33 cal.c
--- usr.bin/cal/cal.c 26 Jun 2026 12:34:45 -0000 1.33
+++ usr.bin/cal/cal.c 26 Jun 2026 12:35:41 -0000
@@ -193,10 +193,14 @@ main(int argc, char *argv[])
month = 0;
switch(argc) {
case 2:
+ if (yflag)
+ errx(1, "illegal year value: use 1-9999");
month = parsemonth(*argv++);
/* FALLTHROUGH */
case 1:
if (argc == 1 && !isdigit((unsigned char)*argv[0])) {
+ if (yflag)
+ errx(1, "illegal year value: use 1-9999");
month = parsemonth(*argv);
(void)time(&now);
local_time = localtime(&now);
cal's -y flag usage