On Monday 22 January 2018, J William Piggott wrote: > I don't know if this was an oversight or an overzealous > interpretation of POSIX. Just in case, I'll address the > POSIX possibility. POSIX description for cal(1) says: > > If only the year operand is given, cal shall produce a > calendar for all twelve months in the given calendar year. > > It also says that cal(1) has no options, so in that context > if an option is given then it should be expected to override > POSIX behavior. We still don't need to fight against POSIX. "cal -1" behaves like POSIX cal without options. "cal -3" behaves like POSIX except that it prints 3 months whereever POSIX would print only 1. > Before patched all of these command displayed a full year: > cal -1 2020 > cal -3 2020 > cal -n6 2020 Seriously, I find the new behavior quiet useless and unwanted. In past it seemed to work fine to have such alias in ~./profile alias cal="cal -3" But now "cal -3 2019" always shows Dec, Jan, Feb. Can't believe that any user finds this useful. At least it should output of the "current" months of the given year. But I wouldn't change this at all. It's just an annoying incompatible change without any benefit. cu, Rudi > Patched the number of months options are honored. > > This patch also fixes the -1 option which was a no-op. > > Signed-off-by: J William Piggott <elseifthen@xxxxxxx> > --- > misc-utils/cal.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/misc-utils/cal.c b/misc-utils/cal.c > index 5a6364a27..8a715d94c 100644 > --- a/misc-utils/cal.c > +++ b/misc-utils/cal.c > @@ -267,7 +267,6 @@ int main(int argc, char **argv) > static struct cal_control ctl = { > .reform_year = DEFAULT_REFORM_YEAR, > .weekstart = SUNDAY, > - .num_months = 1, /* default is "cal -1" */ > .span_months = 0, > .colormode = UL_COLORMODE_UNDEF, > .weektype = WEEK_NUM_DISABLED, > @@ -363,7 +362,7 @@ int main(int argc, char **argv) > > switch(ch) { > case '1': > - /* default */ > + ctl.num_months = 1; > break; > case '3': > ctl.num_months = 3; > @@ -536,7 +535,8 @@ int main(int argc, char **argv) > > if (yflag || Yflag) { > ctl.gutter_width = 3; > - ctl.num_months = MONTHS_IN_YEAR; > + if (!ctl.num_months) > + ctl.num_months = MONTHS_IN_YEAR; > if (yflag) { > ctl.req.start_month = 1; /* start from Jan */ > ctl.header_year = 1; /* print year number */ > @@ -549,6 +549,9 @@ int main(int argc, char **argv) > else if (!ctl.months_in_row) > ctl.months_in_row = 1; > > + if (!ctl.num_months) > + ctl.num_months = 1; /* display at least one month */ > + > if (yflag || Yflag) > yearly(&ctl); > else > -- > To unsubscribe from this list: send the line "unsubscribe util-linux" > in the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html