apt-get install libdate-calc-perl
#!/usr/bin/perl -w
use strict;
use Date::Calc qw(Day_of_Week check_date Day_of_Year leap_year Easter_Sunday Week_Number Today);
my $key;
my $jahr;
my $mon_ende;
my $mon;
my $tg = 1;
my $sj;
my $year;
my $month;
my $day;
my $os;
my @tag = ("","Mo","Di","Mi","Do","Fr","Sa","So");
my @monat = ("","Januar","Februar","Maerz","April","Mai","Juni", "Juli","August","September","Oktober","November","Dezember");
($year,$month,$day) = Today();
if (! defined $ARGV[0] ) {$jahr = $year;}
else {$jahr = $ARGV[0];}
if (leap_year($jahr)) {$sj = 1;} else {$sj = 0;}
$os = Day_of_Year(Easter_Sunday($jahr));
print "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n";
if ($jahr == $year){
printf("|\e[7m \e[0m %2s %2d. %-10s %4d \e[7m \e[0m|\n",$tag[Day_of_Week($year,$month,$day)],$day,$monat[$month],$year);}
else {print "|\e[7m \e[0m $jahr \e[7m \e[0m|\n";}
print "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n|";
foreach $mon (1..12) {
printf(" %2d %-10s|",$mon,$monat[$mon]);
};
print "\n|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|\n|";
foreach $tg (1..31) {
foreach $mon (1..12) {
if (check_date($jahr,$mon,$tg)) {
if (Day_of_Week($jahr,$mon,$tg) == 7){printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}
elsif (Day_of_Week($jahr,$mon,$tg) == 6){printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}
elsif (Day_of_Year($jahr,$mon,$tg) == 1){ # Neujahr
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 6){ # Hl. 3 Koenige
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == $os-47) {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Faschingsdienstag
elsif (Day_of_Year($jahr,$mon,$tg) == $os-2) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Karfreitag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));} # Ostermontag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+39) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Christi Himmelfahrt
elsif (Day_of_Year($jahr,$mon,$tg) == $os+50) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));} # Pfingstmontag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+60) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Fronleichnam
elsif (Day_of_Year($jahr,$mon,$tg) == 121+$sj){ # Tag der Arbeit
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 276+$sj){ # Tag der Dt. Einheit
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 305+$sj){ # Allerheiligen
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 358+$sj){ # Hl. Abend
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s \e[0m %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 359+$sj){ # 1. Weihnachtstag
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 360+$sj){ # 2. Weihnachtstag
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 365+$sj){ # Silvester
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s \e[0m %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
else {
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf(" %2d %2s %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf(" %2d %2s |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}}
else {print " |";}
};
print "\n|";
};
print "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n";
==== Auf CTRL-F3-Taste ====
apt-get install libdate-calc-perl
apt-get install libterm-readkey-perl
$HOME/.fluxbox/keys
Control F3 :execCommand xterm -T `date +%Y` -g 181x38+110+100 -e /home/ms/bin/kal-f3.pl
#!/usr/bin/perl -w
use strict;
use Date::Calc qw(Day_of_Week check_date Day_of_Year leap_year Easter_Sunday Week_Number Today);
use Term::ReadKey;
my $key;
my $jahr;
my $mon_ende;
my $mon;
my $tg = 1;
my $sj;
my $year;
my $month;
my $day;
my $os;
my @tag = ("","Mo","Di","Mi","Do","Fr","Sa","So");
my @monat = ("","Januar","Februar","Maerz","April","Mai","Juni", "Juli","August","September","Oktober","November","Dezember");
($year,$month,$day) = Today();
$jahr = $year;
if (leap_year($jahr)) {$sj = 1;} else {$sj = 0;}
$os = Day_of_Year(Easter_Sunday($jahr));
print "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n";
if ($jahr == $year){
printf("|\e[7m \e[0m %2s %2d. %-10s %4d \e[7m \e[0m|\n",$tag[Day_of_Week($year,$month,$day)],$day,$monat[$month],$year);}
else {print "|\e[7m \e[0m $jahr \e[7m \e[0m|\n";}
print "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n|";
foreach $mon (1..12) {
printf(" %2d %-10s|",$mon,$monat[$mon]);
};
print "\n|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|\n|";
foreach $tg (1..31) {
foreach $mon (1..12) {
if (check_date($jahr,$mon,$tg)) {
if (Day_of_Week($jahr,$mon,$tg) == 7){printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}
elsif (Day_of_Week($jahr,$mon,$tg) == 6){printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}
elsif (Day_of_Year($jahr,$mon,$tg) == 1){ # Neujahr
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 6){ # Hl. 3 Koenige
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == $os-47) {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Faschingsdienstag
elsif (Day_of_Year($jahr,$mon,$tg) == $os-2) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Karfreitag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));} # Ostermontag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+39) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Christi Himmelfahrt
elsif (Day_of_Year($jahr,$mon,$tg) == $os+50) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));} # Pfingstmontag
elsif (Day_of_Year($jahr,$mon,$tg) == $os+60) {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);} # Fronleichnam
elsif (Day_of_Year($jahr,$mon,$tg) == 121+$sj){ # Tag der Arbeit
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 276+$sj){ # Tag der Dt. Einheit
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 305+$sj){ # Allerheiligen
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 358+$sj){ # Hl. Abend
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s \e[0m %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 359+$sj){ # 1. Weihnachtstag
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 360+$sj){ # 2. Weihnachtstag
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s %2d\e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
elsif (Day_of_Year($jahr,$mon,$tg) == 365+$sj){ # Silvester
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf("\e[44m %2d %2s \e[0m %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf("\e[44m %2d %2s \e[0m |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}
else {
if (Day_of_Week($jahr,$mon,$tg) == 1) {printf(" %2d %2s %2d|",$tg,$tag[Day_of_Week($jahr,$mon,$tg)],Week_Number($jahr,$mon,$tg));}
else {printf(" %2d %2s |",$tg,$tag[Day_of_Week($jahr,$mon,$tg)]);}}}
else {print " |";}
};
print "\n|";
};
print "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n";
ReadMode 'cbreak'; $key = ReadKey(0); ReadMode 'normal';