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.