calendar


Por suerte o por desgracia, mi vida es tan rutinaria que no necesito una agenda. De hecho, mi último recordatorio fue de septiembre del año pasado (tenía que ir al dentista) pero hay mucha gente con vidas ajetreadas que necesitan organizar su valioso tiempo y para ello hacen uso de google calendar o de anacrónicas agendas de papel.

Los fans de UNIX tenemos a nuestra disposición una herramienta igual de potente que sus alternativas modernas, pero mucho más simple y ligera. calendar (no confundir con cal), es el programa que desde UNIX 7 soluciona este problema. No es el software más popular del mundo porque GNU no lo incluyó en sus coreutils y la versión que aparece instalada por defecto en Ubuntu es el port que Debian hizo de FreeBSD.

calendar es un programa perfecto, que permite separar nuestras agendas en varios archivos, para unirlos posteriormente según nuestras necesidades, compartirlos mediante git con colaboradores o sincronizarlo con otros dispositivos mediante rsync, generar emails automáticos o mostrarse al inicio de un login shell, notificaciones de Dbus... Las posibilidades son infinitas. Por ejemplo, estoy trabajando en un script que genere un calendario de novedades de los cantantes que sigo en Spotify. Todo esto se puede hacer fácilmente gracias al diseño de calendar, que utiliza el texto plano como interfaz, siguiendo las directrices de la filosofía UNIX.

El problema de este, como del resto de aplicaciones de UNIX es que hay que leerse primero el manual porque si ejecutamos calendar, lo que nos va a aparecer es un montón de basura como esta

mar 22  Abolition Day in Puerto Rico
mar 22  Ten Years After plays their last concert, 1974
mar 22  Brad Davis born in Farmington, New Mexico, United States, 1983
mar 22  Aujourd'hui, c'est la St(e) Léa.
mar 22  Beáta, Izolda
mar 22      Наурыз мейрамы
mar 23  Pakistan Day in Pakistan
mar 23* Ta'anit Esther
mar 23  Daniel C. Sobral born in Brasilia, Distrito Federal, Brazil, 1971
mar 23  Benno Rice born in Adelaide, South Australia, Australia, 1977
mar 23  N'oubliez pas les Victorien !
mar 23  Bonne fête aux Turibio !
mar 23  Quand à glace il gèle à la saint Victorien,
    En pêches et en abricots il n'y a rien.
mar 23  Rückgabe des Memelgebietes an Deutschland, 1939
mar 23  Annahme des Ermächtigungsgesetzes, 1933
mar 23  Emõke

Para utilizar nuestro propio calendario hay que crear un archivo ~/.calendar/calendar (esta localización no es obligatoria pero es la que recomiendo). En ese archivo pondremos nuestros eventos con el formato MM-DD\tevento, por ejemplo, voy a ir al teatro dentro de dos meses:

05-25   20:30   5 Horas con Mario #teatro_principal

El formato de la fecha que uso tampoco es obligatorio pero muy recomendable y todo lo que se muestra después del tabulador es libre.

Podemos ampliar nuestro calendario con alguno de los que vienen incluidos en el programa, pero como no me interesa ninguno, he creado uno con los festivos de España a partir del calendario laboral oficial del BOE, parametrizando las fechas de semana santa para que vayan cambiando cada año. Sólo hay que guardar el archivo como ~/.calendar/calendar.spain e incluir la línea #include en nuestro calendario principal. Si has reconocido la sintaxis de C es porque calendar utiliza el preprocesador de C para parsear las fechas, lo que es una salvajada y me encanta.

Para ver los eventos de la próxima semana podemos ejecutar calendar -l 7, que nos devuelve

mar 29*  Jueves Santo

El asterisco significa que no es un festivo fijo. Hay mucho más que hacer con calendar pero eso ya os lo dejo a vosotros.