Nombres de días y meses en español en Emacs org-mode.

Espero que esta entrada sea corta, es un tema sencillo que creo que ya ha aparecido por algún sitio en este blog y que está perfectamente documentada en multitud de sitios. Sin embargo, alguno de los iniciandos en el mundo de Emacs y concretamente en el de org-mode , me hacen a veces una pregunta tal que: ¿Cómo haces para que te aparezcan las fechas en español?.

Algunas veces se refieren sólo a hacer que Emacs introduzca la fecha del día en el texto, y eso es bastante sencillo si utilizamos el comando date de GNU/Linux:

C-u M-! date

Ese comando nos devolverá el día y la hora del sistema. Si queremos un formato más específico podemos decírselo acompañándolo de una cadena específica.

C-u M-! date +"%d de %B de %Y"

Ese comando mostrará una fecha del estilo 14 de diciembre de 2018 . En este modo, la cadena la pone el comando de la consola y la fecha aparecerá en nuestro documento con la misma forma que la devuelva bash . Si lo utilizamos frecuentemente, podríamos automatizarlo un poco con una función de elisp en nuestra configuración, por ejemplo:

(defun insert-current-date () (interactive) (insert (shell-command-to-string "echo -n $(date +%Y-%m-%d)")))

Podemos utilizar, el comando del sistema, también podríamos aprovechar las facilidades que nos da el paquete calendar para trabajar con fechas:

(require 'calendar)

(defun insdate-insert-current-date (&optional omit-day-of-week-p) "Insertar la fecha del día con el formato local establecido. Añadiendo una opción se puede omitir el día de la semana de la cadena devuelta." (interactive "P*") (insert (calendar-date-string (calendar-current-date) nil omit-day-of-week-p)))

En mi caso, esa función me devolverá una cadena del estilo 2018-12-14 . ¿Por qué lo devuelve en formato ISO? Pues básicamente porque es el formato que tengo configurado es ese.

'(calendar-date-style (quote iso))

También se podría sustituir ese iso , que ordena «año - mes - día» por, european que ordena en «día - mes - año», o american que ordenará como «mes - día - año».

Ajustes del calendario Vale, vale... ¿pero cómo haces para que el calendario te ponga los nombres de meses y días de la semana en español? Sencillo: en mi init-el tengo configuradas las siguientes variables para «hispanizar» el nombre de meses y días. '(calendar-day-header-array ["Do" "Lu" "Ma" "Mi" "Ju" "Vi" "Sa"]) '(calendar-day-name-array ["domingo" "lunes" "martes" "miércoles" "jueves" "viernes" "sábado"]) '(calendar-month-abbrev-array ["Ene" "Feb" "Mar" "Abr" "May" "Jun" "Jul" "Ago" "Sep" "Oct" "Nov" "Dic"]) '(calendar-month-name-array ["enero" "febrero" "marzo" "abril" "mayo" "junio" "julio" "agosto" "septiembre" "octubre" "noviembre" "diciembre"]) '(calendar-week-start-day 1) Se puede apreciar que hay dos arrays por cada grupo de nombres, los abreviados y los largos. No hay que explicar mucho más. Además, me gustaría llamar la atención sobre la línea '(calendar-week-start-day 1) que establece que la semana comience en el día 1 (los lunes); por defecto comienzan el día 0 (el domingo). Por eso, también, los arrays de los nombres comienzan por el domingo y no por el lunes como estamos acostumbrados por estas latitudes.