32 El Calendario y la Agenda
Emacs proporciona las funciones de un calendario de escritorio, con una agenda de eventos planificados o pasados. También tiene facilidades para gestionar sus citas, y llevar la cuenta de cuánto tiempo pasa trabajando en ciertos proyectos.
Para acceder al calendario, escriba Alt-x calenadr
(M-x calendar
). Esto muestra un calendario de tres meses centrado en el mes actual, con el punto en la fecha actual. Con un argumento numérico, como: C-u M-x calendar
, le pregunta por el mes y el año que serán el centro del calendario de tres meses. El calendario usa su propio búfer, cuyo modo principal es el modo Calendario (Calendar mode).
Clicando con ratón-3
en el calendario aparece un menú de operaciones sobre una fecha concreta; con ratón-2
aparece un menú de funciones de calendario de uso común que son independientes de cualquier fecha concreta. Para salir del calendario, escriba q (q
).
32.1 Movimiento en el Calendario
El modo Calendario (Calendar mode) proporciona comandos para desplazarse por el calendario en unidades lógicas de tiempo como días, semanas, meses y años. Si se desplaza fuera de los tres meses mostrados originalmente, la pantalla del calendario se desplaza automáticamente en el tiempo para hacer visible la fecha seleccionada. Desplazarse a una fecha le permite ver sus días festivos o entradas de agenda, o convertirla a otros calendarios; moverse por largos periodos de tiempo también es útil simplemente para desplazarse por el calendario.
32.1.1 Movimiento por Períodos de Tiempo Estándar
Los comandos de movimiento en el búfer de calendario son paralelos a los comandos de movimiento en texto. Puede avanzar y retroceder por días, semanas, meses y años.
Ctrl-f (C-f
)
Mueve el punto un día hacia adelante (
calendar-forward-day
).
Ctrl-b (C-b
)
Mueve el punto un día hacia atrás (
calendar-backward-day
).
Ctrl-n (C-n
)
Mueve el punto una semana hacia adelante (
calendar-forward-week
).
Ctrl-p (C-p
)
Mueve el punto una semana hacia atrás (
calendar-backward-week
).
Alt-} (M-}
)
Desplaza el punto un mes hacia adelante (
calendar-forward-month
).
Alt-{ (M-{
)
Mueve el punto un mes hacia atrás (
calendar-backward-month
).
Ctrl-x ] (C-x ]
)
Desplaza el punto un año hacia adelante (
calendar-forward-year
).
Ctrl-x [ (C-x [
)
Desplaza el punto un año hacia atrás (
calendar-backward-year
).
Los comandos de día y semana son análogos naturales de los comandos habituales de Emacs para moverse por caracteres y por líneas. Del mismo modo que C-n
normalmente se mueve a la misma columna de la línea siguiente, en modo Calendario se mueve al mismo día de la semana siguiente. Y C-p
se mueve al mismo día de la semana anterior.
Las teclas de flecha equivalen a C-f
, C-b
, C-n
y C-p
, igual que normalmente en otros modos.
Los comandos para moverse por meses y años funcionan como los de las semanas, pero se mueven una distancia mayor. Los comandos de mes M-}
y M-{
avanzan o retroceden un mes entero. Los comandos de año C-x ]
y C-x [
avanzan o retroceden un año entero.
La forma más fácil de recordar estos comandos es considerar los meses y los años análogos a párrafos y páginas de texto, respectivamente. Pero los comandos de movimiento del calendario en sí no son del todo paralelos a los de movimiento a través del texto: los comandos de párrafo ordinarios de Emacs se mueven al principio o al final de un párrafo, mientras que estos comandos de mes y año se mueven por un mes o un año entero, manteniendo la misma fecha dentro del mes o el año.
Todos estos comandos aceptan un argumento numérico como contador de repeticiones. Para mayor comodidad, las teclas de dígitos y el signo menos especifican argumentos numéricos en el modo Calendario incluso sin el modificador Meta. Por ejemplo, 100 C-f
mueve el punto 100 días hacia adelante desde su ubicación actual.
32.1.2 Comienzo o Fin de Semana, Mes o Año
Una semana (o un mes, o un año) no es sólo una cantidad de días; pensamos que las semanas (los meses, los años) empiezan en fechas concretas. Por ello, el modo Calendario proporciona comandos para desplazarse al principio o al final de una semana, mes o año:
Ctrl-a (C-a
)
Mueve el punto al inicio de la semana (
calendar-beginning-of-week
).
Ctrl-e (C-e
)
Mueve el punto al final de la semana (
calendar-end-of-week
).
Alt-a (M-a
)
Mueve el punto al principio del mes (
calendar-beginning-of-month
).
Alt-e (M-e
)
Mueve el punto a final de mes (
calendar-end-of-month
).
Alt-< (M-<
)
Mueve el punto al principio del año (
calendar-beginning-of-year
).
Alt-> (M->
)
Mueve el punto a final de año (
calendar-end-of-year
).
Estos comandos también toman argumentos numéricos como cuentas de repetición, con la cuenta de repetición indicando cuántas semanas, meses o años avanzar o retroceder.
Por defecto, las semanas comienzan en domingo. Para que empiecen el lunes, establezca la variable calendar-week-start-day
en 1. Para cambiar qué días se resaltan como días de fin de semana, establezca la variable calendar-weekend-days
.
32.1.3 Fechas Especificadas
El modo Calendario (Calendar mode) proporciona comandos para desplazarse a una fecha concreta especificada de varias maneras.
gd (g d
)
Mueve el punto a la fecha especificada (
calendar-goto-date
).
gD (g D
)
Mueve el punto al día del año especificado (
calendar-goto-day-of-year
).
gw (g w
)
Mueve el punto a la semana especificada del año (
calendar-iso-goto-week
).
o (o
)
Centra el calendario en torno al mes especificado (
calendar-other-month
).
. (.
)
Mueve el punto a la fecha de hoy (
calendar-goto-today
).
g d
(calendar-goto-date
) solicita un año, un mes y un día del mes, y luego se desplaza a esa fecha. Como el calendario incluye todas las fechas desde el principio de la era actual, debe escribir el año completo; es decir, escriba 2010
, no 10
.
g D
(calendar-goto-day-of-year
) solicita un número de año y día, y se mueve a esa fecha. Los números de día negativos cuentan hacia atrás desde el final del año. g w
(calendar-iso-goto-week
) solicita un año y un número de semana, y se desplaza a esa semana.
o
(calendario-otro-mes
) solicita un mes y un año, y centra el calendario de tres meses alrededor de ese mes.
Puede volver a la fecha actual con .
(calendar-goto-today
).
32.2 Desplazarse por el Calendario
La visualización del calendario se desplaza automáticamente en el tiempo cuando se sale de la parte visible. También puede desplazarse manualmente. Imagine que la ventana del calendario contiene una larga tira de papel con los meses. Desplazarse por el calendario significa mover la tira horizontalmente, de modo que los nuevos meses se hacen visibles en la ventana.
> (>
)
Desplaza el calendario un mes hacia adelante (
calendar-scroll-left
).
< (<
)
Desplaza el calendario un mes hacia atrás (
calendar-scroll-right
).
C-v
)PageDown
next
Desplaza tres meses hacia delante (
calendar-scroll-left-three-months
).
M-v
)PageUp
prior
Desplaza tres meses hacia atrás (
calendar-scroll-right-three-months
).
Los comandos de desplazamiento de calendario más básicos se desplazan de mes en mes. Esto significa que hay dos meses de solapamiento entre la visualización anterior al comando y la visualización posterior. > (>
) desplaza el contenido del calendario un mes hacia delante. < (<
) desplaza el contenido un mes hacia atrás.
Los comandos C-v
y M-v
desplazan el calendario una pantalla entera tres meses en analogía con el significado habitual de estos comandos. C-v
hace visibles las fechas posteriores y M-v
las anteriores. Estos comandos toman un argumento numérico como cuenta de repetición; en particular, dado que C-u
multiplica el siguiente comando por cuatro, al teclear Ctrl-u Ctrl-v (C-u C-v
) se desplaza el calendario un año hacia delante y al teclear Ctrl-u Alt-v (C-u M-v
) se desplaza el calendario un año hacia atrás.
Las teclas de función PageDown
(o siguiente) y PageUp
(o anterior) equivalen a C-v
y M-v
, igual que en otros modos.
32.3 Conteo de Días
Alt-= (M-=
)
Muestra el número de días de la región actual (
calendar-count-days-region
).
Para determinar el número de días de un intervalo, coloque la marca en una fecha utilizando Ctrl-SPC (C-SPC
), mueva el punto a otra fecha y escriba Alt-= (M-=
, calendar-count-days-region
). El número de días mostrado es inclusivo, es decir, incluye los días especificados por la marca y el punto.
32.4 Otros Comandos del Calendario
pd (p d
)
Muestra el día en el año (
calendar-print-day-of-year
).
Ctrl-c Ctrl-l (C-c C-l
)
Regenera la ventana del calendario (
calendar-redraw
).
SPACE (SPC
)
Desplaza la ventana siguiente hacia arriba (
scroll-other-window
).
DEL
)S-SPC
)Desplaza la ventana siguiente hacia abajo (
scroll-other-window-down
).
q (q
)
Sale del calendario (
calendar-exit
).
Para visualizar el número de días transcurridos desde el comienzo del año, o el número de días que quedan del año, escriba el comando pd (p d
, calendar-print-day-of-year
). Esto muestra ambos números en el área de eco. El recuento de días transcurridos incluye la fecha seleccionada. El recuento de días restantes no incluye esa fecha.
Si el texto de la ventana del calendario se corrompe, escriba Ctrl-c Ctrl-l (C-c C-l
, calendar-redraw
) para redibujarlo. (Esto sólo puede ocurrir si usa comandos de edición que no estén en modo Calendario (Caldendar mode)).
En el modo Calendario, puede usar SPC
(scroll-other-window
) y DEL
(scroll-other-window-down
) para desplazar la otra ventana (si la hay) hacia arriba o hacia abajo, respectivamente. Esto resulta útil cuando visualiza una lista de días festivos o entradas de agenda en otra ventana.
Para salir de la agenda, escribe q (q
, calendar-exit
). Esto entierra todos los búferes relacionados con el calendario, seleccionando otros búferes. (Si un marco contiene una ventana dedicada al calendario, salir del calendario borra o iconifica ese marco dependiendo del valor de calendar-remove-frame-by-deleting
).
32.5 Escribir archivos de Calendario
Puede escribir calendarios y entradas de diario en archivos HTML y LaTeX.
Los comandos HTML de Calendario producen archivos de código HTML que contienen entradas de calendario, vacaciones y diario. Cada archivo se aplica a un mes y tiene un nombre con el formato aaaa-mm.html
, donde aaaa y mm son los cuatro dígitos del año y los dos dígitos del mes, respectivamente. La variable cal-html-directory
especifica el directorio de salida por defecto para los archivos HTML. Para evitar que se muestren los días festivos, personalice cal-html-holidays
.
Las entradas de diario encerradas por <
y >
se interpretan como etiquetas HTML (por ejemplo: esta es una entrada de diario con <font color=»red»>algo de texto rojo</font>). Puede cambiar la apariencia general de las páginas HTML mostradas (por ejemplo, el color de varios elementos de la página, estilos de cabecera) mediante una hoja de estilo cal.css en el directorio que contiene los archivos HTML (consulte el valor de la variable cal-html-css-default
para conocer los ajustes de estilo relevantes).
Hm (H m
)
Genera un calendario de un mes (
cal-html-cursor-month
).
Hy (H y
)
Genera un archivo de calendario para cada mes de un año, así como una página de índice (
cal-html-cursor-year
). Por defecto, este comando escribe los archivos en un subdirectorio aaaa; si se modifica, algunos hipervínculos entre años no funcionarán.
Si la variable cal-html-print-day-number-flag
no es nula, los calendarios mensuales muestran el número del día del año. La variable cal-html-year-index-cols
especifica el número de columnas de la página de índice anual.
Los comandos LaTeX de calendario producen un búfer de código LaTeX que se imprime como un calendario. Dependiendo del comando que use, el calendario impreso cubre el día, la semana, el mes o el año en que se encuentra ese punto.
tm (t m
)
Genera un calendario de un mes (
cal-tex-cursor-month
).
tM (t M
)
Genera un calendario de un mes de impresión lateral (
cal-tex-cursor-month-landscape
).
td (t d
)
Genera un calendario de un día (
cal-tex-cursor-day
).
tw1 (t w 1
)
Genera un calendario de una página para una semana, con horas (
cal-tex-cursor-week
).
tw2 (t w 2
)
Genera un calendario de dos páginas para una semana, con horas (
cal-tex-cursor-week2
).
tw3 (t w 3
)
Genera un calendario estilo ISO para una semana, sin horas (
cal-tex-cursor-week-iso
).
tw4 (t w 4
)
Genera un calendario para una semana a partir del lunes, con horas (
cal-tex-cursor-week-monday
).
twW (t w W
)
Genera un calendario de dos páginas para una semana, sin horas (
cal-tex-cursor-week2-summary
).
tfw (t f w
)
Genera un calendario de dos semanas de un vistazo al estilo Filofax (
cal-tex-cursor-filofax-2week
).
tfW (t f W
)
Genera un calendario de una semana al estilo Filofax (
cal-tex-cursor-filofax-week
).
ty (t y
)
Genera un calendario para un año (
cal-tex-cursor-year
).
tY (t Y
)
Genera un calendario de impresión lateral para un año (
cal-tex-cursor-year-landscape
).
tfy (t f y
)
Genera un calendario estilo Filofax para un año (
cal-tex-cursor-filofax-year
).
Algunos de estos comandos imprimen el calendario de lado (en modo horizontal), por lo que puede ser más ancho que largo. Algunos de ellos usan el tamaño de papel Filofax (3.75in x 6.75in). Todos estos comandos aceptan un argumento prefijo, que especifica cuántos días, semanas, meses o años se van a imprimir (empezando siempre por el seleccionado).
Si la variable cal-tex-holidays
no es nula (por defecto), los calendarios impresos muestran los días festivos en calendar-holidays
. Si la variable cal-tex-diary
no es nula (por defecto es nula), las entradas del diario también se incluyen (sólo en calendarios mensuales, Filofax e iso-semanales). Si la variable cal-tex-rules no es nula (por defecto es nula), el calendario muestra las páginas con reglas en los estilos que tienen espacio suficiente. Consulte la documentación de las funciones cal-tex individuales para ver qué calendarios admiten qué características.
Puede usar la variable cal-tex-preamble-extra
para insertar comandos LaTeX extra en el preámbulo del documento generado si lo necesita.
32.6 Días Festivos
El calendario Emacs conoce muchos días festivos mayores y menores, y puede mostrarlos. Puede añadir sus propios días festivos a la lista por defecto.
mouse-3
Holidays``h
)Muestra los días festivos de la fecha seleccionada (
calendar-cursor-holidays
).
x (x
)
Marca los días festivos en la ventana de calendario (
calendar-mark-holidays
).
u (u
)
Desmarca la ventana del calendario (
calendar-unmark
).
a (a
)
Lista todos los días festivos de los tres meses mostrados en otra ventana (
calendar-list-holidays
).
Alt-x holydays
(M-x holidays
)
Enumera todos los días festivos de tres meses alrededor de la fecha de hoy en otra ventana.
Alt-x list-holidays
(M-x list-holidays
)
Enumera las vacaciones en otra ventana para un intervalo de años especificado.
Para ver si algún día festivo cae en una fecha determinada, sitúe el punto sobre esa fecha en la ventana del calendario y use el comando h
. Alternativamente, haga clic en esa fecha 20con ratón-3
y luego elija holidays
(Días Festivos) en el menú que aparece. De cualquier forma, se mostrarán los días festivos de esa fecha, en el área de eco si caben allí, si no, en una ventana aparte.
Para ver la distribución de los días festivos para todas las fechas mostradas en el calendario, use el comando x
. Esto muestra las fechas que son festivas en una cara diferente. Véase 32.13.1 Personalizar el Calendario. El comando se aplica tanto a los meses visibles actualmente como a otros meses que se hagan visibles posteriormente al desplazarse. Para desactivar el marcado y borrar las marcas actuales, escriba u (u
), que también borra cualquier marca de la agenda (véase 32.10. La Agenda). Si la variable calendar-mark-holidays-flag
no es nula, al crear o actualizar el calendario se marcan automáticamente los días festivos.
Para obtener información aún más detallada, use el comando a
, que muestra un búfer separado que contiene una lista de todos los días festivos en el intervalo actual de tres meses. Puede usar SPC
y DEL
en la ventana del calendario para desplazar la lista hacia arriba y hacia abajo, respectivamente.
32.7 Horas de Salida y Puesta del Sol
Los comandos especiales del calendario pueden indicarle, con una precisión de uno o dos minutos, las horas de salida y puesta del sol para cualquier fecha.
ratón-3 Sunrise/sunset
S
)Muestra las horas de salida y puesta del sol para la fecha seleccionada (
calendar-sunrise-sunset
).
Alt-x sunrise-sunset
(M-x sunrise-sunset
)
Muestra las horas de salida y puesta del sol para la fecha de hoy.
Ctrl-u Alt-x (C-u M-x
)
Muestra las horas de salida y puesta del sol para una fecha determinada.
Alt-x calendar-sunrise-sunset-month
(M-x calendar-sunrise-sunset-month
)
Muestra las horas de salida y puesta del sol del mes seleccionado.
Dentro del calendario, para mostrar las horas locales de salida y puesta del sol en el área de eco, mueva el punto a la fecha que desee y escriba S (S
). Alternativamente, haga clic con ratón-3
en la fecha y, a continuación, elija Sunrise/sunset
(salida/puesta del sol) en el menú que aparece. El comando M-x sunrise-sunset
está disponible fuera del calendario para mostrar esta información para la fecha de hoy o una fecha especificada. Para especificar una fecha que no sea hoy, use C-u M-x sunrise-sunset
, que le pedirá el año, el mes y el día.
Puede visualizar las horas de salida y puesta del sol para cualquier lugar y cualquier fecha con C-u C-u M-x sunrise-sunset
. Esto le pide una longitud, latitud, número de minutos de diferencia del Tiempo Universal Coordinado, y la fecha, y luego le dice las horas de salida y puesta del sol para esa ubicación en esa fecha.
Como las horas de salida y puesta del sol dependen de la ubicación en la tierra, necesita decirle a Emacs tu latitud, longitud y nombre de ubicación antes de usar estos comandos. Aquí hay un ejemplo de lo que hay que configurar:
(setq calendar-latitude 40.1)
(setq calendar-longitude -88.2)
(setq calendar-location-name "Urbana, IL")
Use un decimal en los valores de calendar-latitude
y calendar-longitude
.
Su zona horaria también afecta a la hora local de salida y puesta del sol. Emacs normalmente obtiene la información de la zona horaria del sistema operativo, pero si estos valores no son los que desea (o si el sistema operativo no los suministra), debe establecerlos Usted mismo. He aquí un ejemplo:
(setq calendar-time-zone -360)
(setq calendar-standard-time-zone-name "CST")
(setq calendar-daylight-time-zone-name "CDT")
El valor de calendar-time-zone
es el número de minutos de diferencia entre su hora estándar local y el Tiempo Universal Coordinado (hora de Greenwich). Los valores de calendar-standard-time-zone-name
y calendar-daylight-time-zone-name
son las abreviaturas usadas en su zona horaria. Emacs muestra las horas de salida y puesta del sol corregidas para el horario de verano. Consulte 32.11 Horario de Verano (Horario de Verano), para saber cómo se determina el horario de verano.
Si desea mostrar zonas horarias numéricas (como "+0100"
) en lugar de simbólicas (como "CET"
), configure esta opción como numérica.
Como Usuario, puede resultarle conveniente configurar las variables de ubicación del calendario para su ubicación física habitual en su archivo .emacs. Si Usted es un administrador del sistema, puede que desee establecer estas variables para todos los Usuarios en un archivo default.el. Ver 50.4. El Archivo de Inicialización de Emacs.
32.8 Fases de la Luna
Estos comandos de calendario muestran las fechas y horas de las fases de la luna (luna nueva, primer cuarto, luna llena, último cuarto). Esta función es útil para depurar problemas que dependen de la fase de la luna.
M (M
)
Muestra las fechas y horas de todos los cuartos de luna para el periodo de tres meses indicado (
calendar-lunar-phases
).
Alt-x lunar-phases
(M-x lunar-phases
)
Muestra las fechas y horas de los cuartos de luna de tres meses alrededor de la fecha de hoy.
Dentro del calendario, use el comando M
para mostrar un búfer separado de las fases de la luna para el intervalo actual de tres meses. Las fechas y horas indicadas tienen una precisión de pocos minutos.
Fuera del calendario, use el comando M-x lunar-phases
para ver la lista de las fases lunares del mes en curso y de los meses anterior y posterior. Para obtener información sobre un mes diferente, use C-u M-x lunar-phases
, que le pedirá el mes y el año.
Las fechas y horas indicadas para las fases de la luna se dan en hora local (corregidas para el horario de verano, cuando proceda). Véase la discusión en la sección anterior. Véase 32.7 Horas de Salida y Puesta del Sol.
32.9 Conversión a y desde Otros Calendarios
El calendario de Emacs que se muestra es siempre el calendario gregoriano, a veces llamado calendario del Nuevo Estilo, que se usa en la mayor parte del mundo hoy en día. Sin embargo, este calendario no existía antes del siglo XVI y no fue ampliamente usado antes del siglo XVIII; no desplazó completamente al calendario Juliano y no ganó aceptación universal hasta principios del siglo XX. El calendario de Emacs puede mostrar cualquier mes desde enero del año 1 de la era actual, pero el calendario mostrado es siempre el gregoriano, incluso para una fecha en la que no existía el calendario gregoriano.
Aunque Emacs no puede mostrar otros calendarios, puede convertir fechas a y desde varios otros calendarios.
32.9.1 Sistemas de Calendario Compatibles
En las empresas se suele usar el calendario comercial ISO.
El calendario juliano, que debe su nombre a Julio César, fue el que se usó en Europa durante la época medieval y en muchos países hasta el siglo XIX.
Los astrónomos usan un simple recuento de los días transcurridos desde el mediodía del lunes 1 de enero de 4713 a.C. en el calendario juliano. El número de días transcurridos se denomina número de día juliano o número de día Astronómico.
El Calendario Hebreo se usa por tradición en la religión judía. El programa de calendario de Emacs usa el calendario hebreo para determinar las fechas de las fiestas judías. Las fechas del calendario hebreo comienzan y terminan al atardecer.
El Calendario Islámico se usa en muchos países de mayoría islámica. Emacs lo usa para determinar las fechas de las fiestas islámicas. No existe un acuerdo universal en el mundo islámico sobre el calendario; Emacs usa una versión ampliamente aceptada, pero las fechas precisas de las festividades islámicas dependen a menudo de la proclamación de las autoridades religiosas, no de cálculos. Como consecuencia, las fechas reales de observancia pueden variar ligeramente de las fechas calculadas por Emacs. Las fechas del calendario islámico comienzan y terminan al atardecer.
El Calendario Revolucionario Francés fue creado por los jacobinos tras la revolución de 1789, para representar una visión más secular y basada en la naturaleza del ciclo anual, e instaurar una semana de 10 días en una medida de racionalización similar al sistema métrico decimal. El gobierno francés abandonó oficialmente este calendario a finales de 1805.
Los Mayas de América Central usaban tres sistemas de calendario separados y superpuestos, la cuenta larga, el tzolkin y el haab. Emacs conoce estos tres calendarios. Los expertos discuten la correlación exacta entre el calendario maya y nuestro calendario; Emacs usa la correlación Goodman-Martínez-Thompson en sus cálculos.
Los Coptos usan un calendario basado en el antiguo calendario solar egipcio. Su calendario consta de doce meses de 30 días seguidos de un periodo extra de cinco días. Una vez cada cuatro años, añaden un día bisiesto a este periodo extra para convertirlo en seis días. El calendario Etíope tiene una estructura idéntica, pero los números de los años y los nombres de los meses son diferentes.
Los Persas usan un calendario solar basado en un diseño de Omar Khayyam. Su calendario consta de doce meses, de los cuales los seis primeros tienen 31 días, los cinco siguientes 30 y el último 29 en los años ordinarios y 30 en los bisiestos. Los años bisiestos se suceden de forma complicada cada cuatro o cinco años. El calendario aplicado aquí es el calendario aritmético Persa defendido por Birashk, basado en un ciclo de 2.820 años. Difiere del calendario persa astronómico, que se basa en acontecimientos astronómicos. En el momento de escribir estas líneas se prevé que la primera discrepancia futura se produzca el 20 de marzo de 2025. Actualmente no está claro cuál será el calendario oficial de Irán en ese momento.
El calendario Chino es un complicado sistema de meses lunares ordenados en años solares. Los años transcurren en ciclos de sesenta, cada uno de los cuales contiene doce meses en un año ordinario o trece meses en un año bisiesto; cada mes tiene 29 o 30 días. Los años, los meses ordinarios y los días se nombran combinando uno de los diez tallos celestes con una de las doce ramas terrestres para un total de sesenta nombres que se repiten en un ciclo de sesenta.
El sistema del calendario Bahá’í se basa en un ciclo solar de 19 meses con 19 días cada uno. Los cuatro días intercalares restantes se sitúan entre los meses 18 y 19.
32.9.2 Conversión a otros Calendarios
Los siguientes comandos describen la fecha seleccionada (la fecha en el punto) en varios otros sistemas de calendario:
po (p o
)
Muestra la fecha seleccionada en otros calendarios. (
calendar-print-other-dates
).
pc (p c
)
Muestra el equivalente del calendario comercial ISO para el día seleccionado (
calendar-iso-print-date
).
pj (p j
)
Muestra la fecha juliana del día seleccionado (
calendar-julian-print-date
).
pa (p a
)
Muestra el número de día astronómico (juliano) del día seleccionado (
calendar-astro-print-day-number
).
ph (p h
)
Muestra la fecha Hebrea del día seleccionado (
calendar-hebrew-print-date
).
pi (p i
)
Muestra la fecha Islámica para el día seleccionado (
calendar-islamic-print-date
).
pf (p f
)
Muestra la fecha de la Revolución Francesa para el día seleccionado (
calendar-french-print-date
).
pb (p b
)
Muestra la fecha Bahá’í del día seleccionado (
calendar-bahai-print-date
).
pC (p C
)
Muestra la fecha China del día seleccionado (
calendar-chinese-print-date
).
pk ((p k)
)
Muestra la fecha Coptic del día seleccionado (
calendar-coptic-print-date
).
pe (p e
)
Muestra la fecha etíope del día seleccionado (
calendar-ethiopic-print-date
).
pp (p p
)
Muestra la fecha persa del día seleccionado (
calendar-persian-print-date
).
pm (p m
)
Muestra la fecha maya del día seleccionado (
calendar-mayan-print-date
).
De lo contrario, mueva el punto a la fecha que desea convertir, a continuación, escriba el comando apropiado comenzando con p (p
) de la tabla anterior. El prefijo p
es un mnemónico para «print» (imprimir), ya que Emacs «imprime» la fecha equivalente en el área de eco. p o
muestra la fecha en todas las formas conocidas por Emacs. También puede usar ratón-3
y luego elegir Otros calendarios en el menú que aparece. Esto muestra las formas equivalentes de la fecha en todos los calendarios que Emacs entiende, en forma de menú. (Elegir una alternativa de este menú en realidad no hace nada, el menú se usa sólo para mostrar).
32.9.3 Conversión desde Otros Calendarios
Puede usar otros calendarios soportados para especificar una fecha a la que moverse. Esta sección describe los comandos para hacer esto usando calendarios distintos al Maya; para éste, vea la siguiente sección.
gc (g c
)
Se desplaza a una fecha especificada en el calendario comercial ISO (
calendar-iso-goto-date
).
gw (g w
)
Pasa a una semana especificada en el calendario comercial ISO (
calendar-iso-goto-week
).
gj (g j
)
Pasa a una fecha especificada en el calendario juliano (
calendar-julian-goto-date
).
ga (g a
)
Se mueve a una fecha especificada con un número de día astronómico (Juliano) (
calendar-astro-goto-day-number
).
gb (g b
)
Pasa a una fecha especificada en el calendario Bahá’í (
calendar-bahai-goto-date
).
gh (g h
)
Se desplaza a una fecha especificada en el calendario hebreo (
calendar-hebrew-goto-date
).
gi (g i
)
Se desplaza a una fecha especificada en el calendario islámico (
calendar-islamic-goto-date
).
gf (g f
)
Se desplaza a una fecha especificada en el calendario de la Revolución Francesa (
calendar-french-goto-date
).
gC (g C
)
Se mueve a una fecha especificada en el calendario Chino (
calendar-chinese-goto-date
).
gp (g p
)
Se desplaza a una fecha especificada en el calendario persa (
calendar-persian-goto-date
).
gk (g k
)
Se desplaza a una fecha especificada en el calendario copto (
calendar-coptic-goto-date
).
ge (g e
)
Pasa a una fecha especificada en el calendario de Etiopía (
calendar-ethiopic-goto-date
).
Estos comandos le piden una fecha en el otro calendario, mueven el punto a la fecha del calendario gregoriano equivalente a esa fecha, y muestran la fecha del otro calendario en el área de eco. Emacs usa el completado estricto (ver 9.4.3 Salida del Completado) siempre que le pide que escriba el nombre de un mes, por lo que no tiene que preocuparse por la ortografía de los nombres Hebreos, Islámicos o Franceses.
Un problema común relacionado con el calendario Hebreo es el cómputo del aniversario de una fecha de muerte, llamada yahrzeit. El calendario Emacs incluye una facilidad para tales cálculos. Si está en el calendario, el comando M-x calendar-hebrew-list-yahrzeits
le pide un rango de años y luego muestra una lista de las fechas de yahrzeit de esos años para la fecha dada por punto. Si no está en el calendario, este comando le pide primero la fecha de fallecimiento y el intervalo de años, y luego muestra la lista de fechas de yahrzeit.
32.10. La Agenda
La agenda de Emacs mantiene un registro de las citas u otros eventos diarios, en conjunción con el calendario. Para usar la agenda, primero puede crear un archivo que contenga una lista de eventos y sus fechas. Entonces Emacs puede seleccionar y mostrar automáticamente los eventos para hoy, para el futuro inmediato o para cualquier fecha especificada.
Aunque probablemente empiece creando una agenda manualmente, Emacs proporciona una serie de comandos que le permiten ver, añadir y cambiar entradas de la misma.
32.10.1 El archivo de la Agenda
El archivo de la agenda es un archivo que registra los eventos asociados a fechas concretas. El nombre de este archivo se especifica con la variable diary-file
. Por defecto es ~/.emacs.d/diary
, aunque por compatibilidad con versiones anteriores Emacs usará ~/diary
si existe.
Cada entrada en el archivo de agenda describe un evento y consiste en una o más líneas. Una entrada siempre comienza con una especificación de fecha en el margen izquierdo. El resto de la entrada es simplemente texto para describir el evento. Si la entrada tiene más de una línea, las líneas posteriores a la primera deben comenzar con un espacio en blanco para indicar que continúan una entrada anterior. Las líneas que no comienzan con fechas válidas y no continúan una entrada anterior se ignoran. He aquí un ejemplo:
22/12/2015 ¡Veinte aniversario de boda!
22/10 Cumpleaños de Ruth.
* 21, *: Día de pago
Martes--reunión semanal con estudiantes de posgrado a las 10am.
Supowit, Shen, Bitner y Kapoor asistirán.
13/1/89 ¡¡¡Viernes trece!!!
thu 4pm partido de squash con Lloyd.
mar 16 Cumpleaños de papá.
15 de abril de 2016 Vencimiento del impuesto sobre la renta.
* 15 vencimiento de las tarjetas.
Este ejemplo usa espacios extra para alinear las descripciones de los eventos de la mayoría de las entradas. Este formato es cuestión de gustos.
También puede usar un formato en el que la primera línea de una entrada de la agenda consista sólo en la fecha o el nombre del día (sin espacios en blanco ni signos de puntuación a continuación). Por ejemplo:
02/11/2012
Bill B. visita hoy Princeton
14:00 Reunión del comité de estudios cognitivos
2:30-5:30 Liz en Lawrenceville
16:00 Cita con el dentista
7:30pm Cena en George's
8:00-10:00pm concierto
Esta entrada tendrá un aspecto diferente si usa la visualización simple de la agenda (véase 32.13.8 Visualización de la Agenda). La visualización simple de la agenda omite la línea de la fecha al principio; sólo aparecen las líneas de continuación. Este estilo de entrada tiene un aspecto más ordenado cuando se muestran las entradas de un solo día, pero puede causar confusión si se piden las entradas de más de un día.
32.10.2 Visualización de la Agenda
Una vez que haya creado un archivo de agenda, puede utilizar el calendario para visualizarlo. También puede ver los eventos del día fuera del modo Calendario. A continuación, las combinaciones de teclas se refieren a la memoria intermedia de la Agenda.
ratón-3 Diary
d
)Mostrar todas las entradas de la agenda de la fecha seleccionada (
diary-view-entries
).
s (s
)
Visualiza todo el archivo de la agenda (
diary-show-all-entries
).
m (m
)
Marca todas las fechas visibles que tengan entradas en el diario (
diary-mark-entries
).
u (u
)
Desmarca la ventana del calendario (
calendar-unmark
).
Alt-x diary-print-entries
(M-x diary-print-entries
)
Imprima una copia en papel de la representación de la agenda tal y como aparece.
Alt-x diary
(M-x diary
)
Muestra todas las entradas de la agenda para la fecha de hoy.
Alt-x diary-mail-entries
(M-x diary-mail-entries
)
Envíese recordatorios por correo electrónico sobre las próximas entradas de la agenda.
Visualizar las entradas de la agenda con d
muestra en un búfer separado las entradas de la agenda para la fecha seleccionada en el calendario. La línea de modo del nuevo búfer muestra la fecha de las entradas de la agenda. Los días festivos se muestran en el búfer o en la línea de modo, dependiendo del método de visualización que elija (véase 32.13.8 Visualización de la Agenda). Si especifica un argumento numérico con d
, se muestran todas las entradas de la agenda para ese número de días sucesivos. Así, 2 d
muestra todas las entradas de la fecha seleccionada y del día siguiente.
Otra forma de mostrar las entradas de la agenda para una fecha es hacer clic con ratón-3
en la fecha y, a continuación, seleccionar Entradas de la agenda en el menú que aparece. Si la variable calendar-view-diary-initially-flag
no es nula, la creación del calendario muestra las entradas de la agenda para la fecha actual (siempre que la fecha actual sea visible).
Para obtener una visión más amplia de los días que se mencionan en la agenda, utilice el comando m
. Esto marca las fechas que tienen entradas de diario en una cara diferente. Véase 32.13.1 Personalizar el Calendario.
Este comando se aplica tanto a los meses que están visibles en ese momento como a los que se hacen visibles posteriormente tras el desplazamiento. Para desactivar el marcado y borrar las marcas actuales, escriba u (u
), que también desactiva las marcas de vacaciones (véase 32.6 Días Festivos). Si la variable calendar-mark-diary-entries-flag
no es nula, al crear o actualizar el calendario se marcan automáticamente las fechas de la agenda.
Para evitar que una entrada individual de la agenda se marque en el calendario, inserte la cadena que especifica diary-nonmarking-symbol (por defecto es &
) al principio de la entrada, antes de la fecha. Esto no afecta a la visualización de la entrada en el búfer de la agenda; sólo afecta a las marcas de las fechas en el calendario. Las entradas sin marca pueden ser útiles para entradas genéricas que, de otro modo, marcarían muchas fechas diferentes.
Para ver el archivo de agenda completo, en lugar de sólo algunas de las entradas, utilice el comando s
.
El comando M-x diary
muestra las entradas del diario para la fecha actual, independientemente de la visualización del calendario, y opcionalmente también para los días siguientes; la variable diary-number-of-entries
especifica cuántos días incluir. Ver 32.13.6 Personalizar la Agenda.
Si escribe (diary
) en su archivo .emacs
, automáticamente se mostrará una ventana con las entradas del diario del día cuando inicie Emacs.
A algunas personas les gusta recibir notificaciones por correo electrónico de los eventos de su diario. Para enviarle este tipo de correos a ti mismo, utilice el comando M-x diary-mail-entries
. Un argumento prefijo especifica cuántos días (empezando por hoy) hay que comprobar; si no, la variable diary-mail-days
dice cuántos días.
32.10.3 Formatos de las Fechas
A continuación se muestran algunos ejemplos de entradas de agenda, que ilustran diferentes formas de dar formato a una fecha. Todos los ejemplos muestran fechas en orden americano (mes, día, año), pero el modo Calendario (Calendar mode) admite como opciones el orden europeo (día, mes, año) y el orden ISO (año, mes, día).
20/4/12 Cambio al nuevo sistema de tabulación
25/04 Inicio de la tabulación de los resultados anuales
4/30 Entrega de los resultados de abril
*/25 Finaliza el ciclo mensual
Viernes No se vaya sin hacer copias de seguridad de los archivos
La primera entrada sólo aparece una vez, el 20 de abril de 2012. La segunda y la tercera aparecen cada año en las fechas especificadas, y la cuarta usa un comodín (asterisco) para el mes, de modo que aparece el día 25 de cada mes. La última entrada aparece el viernes de cada semana.
Puede usar sólo números para expresar una fecha, como en month/day
(mes/día) o month/day/year
(mes/día/año). Debe ir seguida de una cifra. En la fecha propiamente dicha, el mes y el día son números de una o dos cifras. El año opcional también es un número, y puede abreviarse a los dos últimos dígitos; es decir, puede usar 11/12/2012
o 11/12/12
.
Las fechas también pueden tener la forma monthname day
(nombre-mes día) o monthname day, year
(nombre-mes día, año), donde el nombre del mes puede escribirse completo o abreviado (con o sin punto). Las abreviaturas preferidas para los nombres de mes y día pueden usarse con las variables calendar-abbrev-length
, calendar-month-abbrev-array
y calendar-day-abbrev-array
. Por defecto, se usan las tres primeras letras del nombre como abreviatura. Las mayúsculas y minúsculas no son significativas.
Una fecha puede ser genérica; es decir, parcialmente no especificada. Entonces la entrada se aplica a todas las fechas que coincidan con la especificación. Si la fecha no contiene un año, es genérica y se aplica a cualquier año. Alternativamente, el mes (month
), el día day
(día) o el año (year
) pueden ser *
; esto se aplica a cualquier mes, día o año, respectivamente. Así, una entrada de diario 3/*/*
coincide con cualquier día de marzo de cualquier año; lo mismo ocurre con march *
(marzo *).
Si prefiere el estilo europeo de escribir fechas (en el que el día va antes que el mes), o el estilo ISO (en el que el orden es año, mes, día), escriba Alt-x calendar-set-date-style
(M-x calendar-set-date-style
) en el calendario, o personalice la variable calendar-date-style
. Esto afecta al modo en que se interpretan las fechas de la agenda, a la visualización de las fechas y al orden en que algunos comandos esperan que se proporcionen sus argumentos.
Puede usar el nombre de un día de la semana como una fecha genérica que se aplica a cualquier fecha que caiga en ese día de la semana. Puede abreviar el día de la semana como se ha descrito anteriormente, o escribirlo completo; las mayúsculas y minúsculas no son significativas.
32.10.4 Comandos para Añadir a la Agenda
En la agenda, hay varios comandos para crear entradas de diario. Los comandos básicos se enumeran aquí; los comandos más sofisticados se encuentran en la siguiente sección (véase 32.10.5 Entradas Especiales en la Agenda). Las entradas también pueden basarse en calendarios no Gregorianos. Consulte Entradas de la Agenda Usando Calendarios no-Gregorianos.
id (i d
)
Añade una entrada en la agenda para la fecha seleccionada (
diary-insert-entry
).
iw (i w
)
Añade una entrada de diario para el día de la semana seleccionado (
diary-insert-weekly-entry
).
im (i m
)
Añade una entrada de diario para el día del mes seleccionado (
diary-insert-monthly-entry
).
iy (i y
)
Añade una entrada de diario para el día del año seleccionado (
diary-insert-yearly-entry
).
Puede crear una entrada de agenda para una fecha concreta seleccionando esa fecha en la ventana de calendario y escribiendo el comando i d
. Este comando muestra el final del archivo de la agenda en otra ventana e inserta la fecha; a continuación, puede escribir el resto de la entrada de la agenda.
Si desea hacer una entrada de agenda que se aplique a un día específico de la semana, seleccione ese día de la semana (cualquier ocurrencia servirá) y escriba iw (i w
). Esto inserta el día de la semana como una fecha genérica; a continuación, puede escribir el resto de la entrada de la agenda. Puede crear una entrada mensual de la misma forma: seleccione el día del mes, use el comando i m
y escriba el resto de la entrada. Del mismo modo, puede insertar una entrada anual en la agenda con el comando i y
.
Todos los comandos anteriores realizan entradas de diario de marcado por defecto. Para crear una entrada no marcada, introduzca un prefijo como argumento de la orden. Por ejemplo, C-u i w
hace una entrada semanal no marcada.
Cuando modifique el archivo de la agenda, asegúrese de guardar el archivo antes de salir de Emacs. Guardar el archivo de la agenda después de usar cualquiera de los comandos de inserción anteriores actualizará automáticamente las marcas de la agenda en la ventana del calendario, si procede. Puede usar el comando calendar-redraw
para forzar una actualización en cualquier momento.
32.10.5 Entradas Especiales en la Agenda
Además de entradas basadas en fechas de calendario, el archivo de agenda puede contener entradas sexp para eventos regulares como aniversarios. Estas entradas se basan en expresiones Lisp (sexps) que Emacs evalúa a medida que escanea el archivo de la agenda. En lugar de una fecha, una entrada sexp contiene %%
seguido de una expresión Lisp que debe empezar y terminar con paréntesis. Esta expresión Lisp determina a qué fechas se aplica la entrada.
El modo Calendario proporciona comandos para insertar ciertas entradas sexp de uso común:
ia (i a
)
Añade una entrada de diario de aniversario para la fecha seleccionada (
diary-insert-anniversary-entry
).
ib (i b
)
Añade una entrada de diario en bloque para la región actual (
diary-insert-block-entry
).
ic (i c
)
Añade una entrada de diario cíclica a partir de la fecha (
diary-insert-cyclic-entry
).
Si quiere hacer una entrada en la agenda que se aplique al aniversario de una fecha concreta, mueva el punto a esa fecha y use el comando i a
. Esto muestra el final de su archivo de diario en otra ventana e inserta la descripción del aniversario; entonces puede escribir el resto de la entrada del diario. La entrada tendrá el siguiente aspecto:
%%(diario-aniversario 10 31 1988) Cumpleaños de Arthur
Esta entrada se aplica al 31 de octubre de cualquier año posterior a 1988; 10 31 1988
especifica la fecha. (Si está usando el estilo de calendario europeo o ISO, el orden de entrada de mes, día y año es diferente). La razón por la que esta expresión requiere un año de inicio es que las funciones de agenda avanzadas pueden usarlo para calcular el número de años transcurridos.
Una entrada de agenda en bloque se aplica a un intervalo especificado de fechas consecutivas. A continuación se muestra una entrada de agenda en bloque que se aplica a todas las fechas desde el 24 de junio de 2012 hasta el 10 de julio de 2012:
%%( diario-block 6 24 2012 7 10 2012) Vacaciones
6 24 2012
indica la fecha de inicio y 7 10 2012
indica la fecha final. (De nuevo, si está usando el estilo de calendario europeo o ISO, el orden de entrada de mes, día y año es diferente).
Para insertar una entrada en bloque, coloque el punto y la marca en las dos fechas que comienzan y terminan el intervalo, y escriba i b
. Este comando muestra el final de su archivo de agenda en otra ventana e inserta la descripción del bloque; a continuación, puede escribir la entrada de la agenda.
Las entradas de diario cíclicas se repiten tras un intervalo fijo de días. Para crear una, seleccione la fecha de inicio y use el comando i c
. El comando solicita la duración del intervalo y luego inserta la entrada, que tiene el siguiente aspecto:
%%(diary-cyclic 50 3 1 2012 Renovar medicación
Esta entrada se aplica al 1 de marzo de 2012 y todos los 50 días siguientes; 3 1 2012
especifica la fecha de inicio. (Si está usando el estilo de calendario europeo o ISO, el orden de entrada de mes, día y año es diferente).
Estos tres comandos permiten marcar entradas en el diario. Para insertar una entrada no marcada, dé un argumento de prefijo al comando. Por ejemplo, C-u i a
crea una entrada de diario de aniversario no marcada.
Marcar las entradas de la agenda sexp en el calendario puede llevar mucho tiempo, ya que cada fecha visible en la ventana del calendario debe comprobarse individualmente. Por lo tanto, es una buena idea hacer que las entradas de la agenda sexp no estén marcadas (con &
) siempre que sea posible.
Otro tipo sofisticado de entrada sexp, una entrada de agenda flotante, especifica un evento que se produce regularmente mediante desfases especificados en días, semanas y meses. Es comparable a una entrada crontab interpretada por la utilidad cron. A continuación se muestra una entrada de diario flotante no marcada que se aplica al cuarto jueves de noviembre:
&%%(diary-float 17 10 4) Día Peronista
El 10 especifica octubre (el décimo mes), el 4 especifica jueves (el cuarto día de la semana, donde el domingo se numera cero), y el segundo 4 especifica el cuarto jueves (1 significaría «primero», 2 significaría «segundo», -2 significaría «penúltimo», y así sucesivamente). El mes puede ser un único mes o una lista de meses. Así, puede cambiar el 10 anterior por '(1 2 3)
y hacer que la entrada se aplique al último jueves de enero, febrero y marzo. Si el mes es t, la entrada se aplica a todos los meses del año.
%%(diary-offset '(diary-float t 3 4) 2) Reunión mensual del comité
Esta entrada se aplica al sábado siguiente al tercer jueves de cada mes. El 2 especifica el número de días después de cuando el sexp '(diario-float t 3 4)
se evaluaría a t
. Esto es útil cuando, por ejemplo, su organización tiene una reunión del comité dos días después de cada reunión mensual que tiene lugar el tercer jueves, o si desea asistir a una reunión virtual programada en una zona horaria diferente causando una diferencia en la fecha.
Cada una de las entradas estándar de la agenda sexp recibe un parámetro opcional que especifica el nombre de una cara o una cadena de un solo carácter que se usará al marcar la entrada en la agenda. En general, las entradas de la agenda sexp pueden realizar cálculos arbitrarios para determinar cuándo se aplican. Véase 32.13.10. Entradas Sexp y la Visualización de la Agenda Elegante.
32.10.6 Citas
Si tiene una entrada en la agenda para una cita, y esa entrada empieza con una hora reconocible del día, Emacs puede avisarle con antelación de que hay una cita pendiente. Le avisa de la cita mostrando un mensaje en el formato que elija, especificado por la variable appt-display-format
. Si el valor de appt-audible
es distinto de cero, el aviso incluye un recordatorio audible. Además, si appt-display-mode-line
no es nulo, el Editor muestra el número de minutos que faltan para la cita en la línea de modo.
Si appt-display-format
tiene el valor window
, entonces la variable appt-display-duration
controla el tiempo que la ventana de recordatorio está visible; y las variables appt-disp-window-function
y appt-delete-window-function
dan los nombres de las funciones usadas para crear y destruir la ventana, respectivamente.
Para activar la notificación de citas, escriba Alt-x appt-active
(M-x appt-activate
). Con un argumento positivo, activa la notificación; con un argumento negativo, la desactiva; sin argumento, la alterna. Al activar la notificación también se crea una lista de citas para hoy a partir del archivo de la agenda, con todas las entradas de la agenda encontradas con horas del día reconocibles, y se le recuerda justo antes de cada una de ellas.
Por ejemplo, suponga que el archivo de la agenda contiene estas líneas:
Lunes
9:30h Pausa café
12:00 Almuerzo
Entonces, los lunes, se le recordará alrededor de las 9:20am sobre su pausa para el café y alrededor de las 11:50am sobre el almuerzo. La variable appt-message-warning-time
especifica con cuántos minutos de antelación (por defecto 12) se le avisará. Esta es la hora de aviso por defecto. Cada cita puede especificar una hora de aviso diferente añadiendo un fragmento que coincida con appt-warning-time-regexp
(consulte la documentación de esa variable para más detalles).
Puede escribir las horas en el estilo am/pm (con 12:00am
para medianoche y 12:00pm
para mediodía), o en el estilo europeo/militar de 24 horas. No es necesario que sea consistente; su archivo de agenda puede tener una mezcla de los dos estilos. Las horas deben figurar al principio de las entradas para que sean reconocidas.
Emacs actualiza la lista de citas del archivo de la agenda automáticamente justo después de medianoche. Puede forzar una actualización en cualquier momento volviendo a activar la notificación de citas. Ambas acciones también muestran el búfer de la agenda del día, a menos que establezca appt-display-diary
a nil
. La lista de citas también se actualiza cada vez que se guarda el archivo de la agenda (o un archivo que incluya; ver 32.13.9 Agenda Elegante). Si usa el Org Mode y mantiene citas en sus archivos de agenda Org, puede añadir esas citas a la lista usando el comando org-agenda-to-appt
. Ver Recordatorios de citas en El Manual Org, para mas sobre ese comando.
También puede usar la facilidad de notificación de citas como un despertador. El comando M-x appt-add
añade entradas a la lista de citas sin afectar a su archivo de agenda. Puede borrar entradas de la lista de citas con M-x appt-delete
.
32.10.7. Importar y Exportar entradas de la Agenda
Puede transferir entradas de agenda entre archivos de agenda de Emacs y una variedad de otros formatos.
Puede importar entradas de agenda desde mensajes de cita generados por Outlook. Mientras visualiza un mensaje de este tipo en Rmail o Gnus, haga M-x diary-from-outlook
para importar la entrada. Puede hacer que este comando reconozca otros formatos de mensajes de citas personalizando la variable diary-outlook-formats
. Otros clientes de correo pueden establecer diary-from-outlook-function
en un valor apropiado.
El paquete icalendar le permite transferir datos entre su archivo de agenda de Emacs y los archivos iCalendar, que se definen en RFC 2445-Internet Calendaring and Scheduling Core Object Specification (iCalendar) (así como el formato anterior vCalendar).
El comando icalendar-import-buffer
extrae los datos de iCalendar del búfer actual y los añade a su archivo de agenda. Esta función también es adecuada para la extracción automática de datos de iCalendar; por ejemplo, con el cliente de correo Rmail se puede usar:
(add-hook 'rmail-show-message-hook 'icalendar-import-buffer)
El comando icalendar-import-file
importa un archivo iCalendar y añade los resultados a un archivo de agenda Emacs. Por ejemplo:
(icalendar-import-file "/aquí/es/calendario.ics"
"/aquí/es/icalendario")
Puede usar una directiva #include
para añadir el contenido del archivo de importación al archivo principal de la agenda, si se trata de archivos diferentes. Ver 32.13.9 Agenda Elegante.
Use icalendar-export-file
para exportar interactivamente un archivo de agenda Emacs completo al formato iCalendar. Para exportar sólo una parte de un archivo de agenda, marque el área relevante y llame a icalendar-export-region
. En ambos casos, Emacs añade el resultado al archivo de destino.
32.11 Horario de Verano
Emacs entiende la diferencia entre la hora estándar y el horario de verano, las horas dadas para el amanecer, el atardecer, los solsticios, los equinoccios y las fases de la luna lo tienen en cuenta. Las reglas del horario de verano varían de un lugar a otro y también han variado históricamente de un año a otro. Para hacer el trabajo correctamente, Emacs necesita saber qué reglas usar.
Algunos sistemas operativos mantienen un registro de las reglas que se aplican en el lugar donde te encuentras; en estos sistemas, Emacs obtiene la información que necesita del sistema automáticamente. Si falta alguna o toda esta información, el Editor rellena los huecos con las reglas actualmente usadas en Cambridge, Massachusetts. Si las reglas resultantes no son las que quiere, puede decirle a Emacs las reglas que debe usar estableciendo ciertas variables: calendar-daylight-savings-starts
y calendar-daylight-savings-ends
.
Estos valores deben ser expresiones Lisp que hagan referencia a la variable año y se evalúen como la fecha gregoriana en la que comienza o (respectivamente) finaliza el horario de verano, en forma de lista (month day year
,*mes día año*). Los valores deben ser nulos si su zona no usa el horario de verano.
Emacs usa estas expresiones para determinar la fecha de inicio del horario de verano para la lista de vacaciones y para corregir las horas del día en los cálculos solares y lunares.
Los valores para Cambridge, Massachusetts son los siguientes:
(calendar-nth-named-day 2 0 3 year)
(calendar-nth-named-day 1 0 11 year)
Es decir, el segundo día 0 (domingo) del tercer mes (marzo) del año especificado por año, y el primer domingo del undécimo mes (noviembre) de ese año. Si se cambiara el horario de verano para que comenzara el 1 de octubre, se establecería calendar-daylight-savings-starts de la siguiente manera:
(list 10 1 year)
Si no hay horario de verano en su localidad, o si quiere que todas las horas estén en hora estándar, ajuste calendar-daylight-savings-starts
y calendar-daylight-savings-ends
a nil
.
La variable calendar-daylight-time-offset
especifica la diferencia entre el horario de verano y el horario estándar, medida en minutos. El valor para Cambridge, Massachusetts, es 60.
Por último, las dos variables calendar-daylight-savings-starts-time
y calendar-daylight-savings-ends-time
especifican el número de minutos después de medianoche, hora local, en que debe producirse la transición hacia y desde el horario de verano. Para Cambridge, Massachusetts, los valores de ambas variables son 120.
32.12 Sumar Intervalos de Tiempo
El paquete timeclock suma intervalos de tiempo, para que pueda (por ejemplo) llevar la cuenta de cuanto tiempo pasa trabajando en proyectos particulares. (Una alternativa más avanzada es usar las facilidades de Org Mode para cronometrar tiempo, ver Cronometrando Tiempo de Trabajo en El Manual de Org).
Use el comando M-x timeclock-in
cuando empiece a trabajar en un proyecto, y el comando M-x timeclock-out
cuando termine. Cada vez que haga esto, añade un intervalo de tiempo al registro del proyecto. Puede cambiar a trabajar en un proyecto diferente con M-x timeclock-change
.
Una vez que haya recopilado datos de una serie de intervalos de tiempo, puede usar M-x timeclock-workday-remaining
para ver cuánto tiempo le queda para trabajar hoy (suponiendo una media típica de 8 horas al día), y M-x timeclock-when-to-leave
que calculará cuándo ha terminado.
Si quiere que Emacs muestre la cantidad de tiempo que le queda de su jornada laboral en la línea de modo, personalice la variable timeclock-mode-line-display
y establezca su valor a t
, o invoque el comando M-x timeclock-mode-line-display
.
Terminar la sesión actual de Emacs puede significar o no que ha dejado de trabajar en el proyecto y, por defecto, el Editor le pregunta. Sin embargo, puede personalizar el valor de la variable timeclock-ask-before-exiting
a nil
para evitar la pregunta; entonces, sólo un explícito M-x timeclock-out
o M-x timeclock-change
le dirá a Emacs que el intervalo actual ha terminado.
Las funciones de reloj de tiempo trabajan acumulando los datos en un archivo llamado ~/.emacs.d/timelog
. Puede especificar un nombre diferente para este archivo personalizando la variable timeclock-file
. Si edita el archivo timeclock manualmente, o si cambia el valor de cualquiera de las variables personalizables de de este archivo (timeclock), debe ejecutar el comando M-x timeclock-reread-log
para actualizar los datos en Emacs desde el archivo.
32.13 Funciones Más Avanzadas del Calendario y la Agenda
Esta sección describe algunas de las características más avanzadas/especializadas del calendario y la agenda. Comienza con algunas de las muchas formas en las que puede personalizar el calendario y la agenda para adaptarlos a sus gustos personales.
32.13.1 Personalizar el Calendario
Desafortunadamente, la visualización del calendario no puede cambiarse de tres meses, pero puede personalizar el espacio en blanco usado configurando las variables: calendar-left-margin
(margen-izquierdo-calendario), calendar-day-header-width
(ancho-cabecera-día-calendario), calendar-day-digit-width
(ancho-día-dígito-calendario), calendar-column-width
(ancho-columna-calendario) y calendar-intermonth-spacing
(espacio-entre-meses-calendario). Para mostrar texto entre los meses, por ejemplo los números de semana, personalice las variables calendar-intermonth-header
y calendar-intermonth-text
como se describe en su documentación.
La variable calendar-month-header
controla el texto que aparece encima de cada mes en el calendario. Por defecto, muestra el mes y el año. La variable calendar-day-header-array
controla el texto que aparece sobre la columna de cada día en cada mes. Por defecto, muestra las dos primeras letras del nombre de cada día.
La variable calendar-holiday-marker
especifica cómo marcar una fecha como festiva. Su valor puede ser una cadena de un solo carácter que se inserta junto a la fecha, o un nombre de cara que se usa para mostrar la fecha. Del mismo modo, la variable diary-entry-marker
especifica cómo marcar una fecha que tiene entradas de diario. La función calendar-mark-today
usa calendar-today-marker
para marcar la fecha de hoy. Por defecto, el calendario usa las caras holiday
, diary
y calendar-today
para estos propósitos.
Al iniciar el calendario se ejecuta el gancho (hook) normal calendar-initial-window-hook
. Al volver a calcular la visualización del calendario no se ejecuta este gancho. Pero si abandona el calendario con el comando q
y vuelve a entrar en él, el gancho se ejecuta de nuevo.
La variable calendar-today-visible-hook
es un gancho normal que se ejecuta después de haber preparado el búfer con el calendario, cuando la fecha actual es visible en la ventana. Uno de los usos de este gancho es marcar la fecha de hoy; para ello use cualquiera de las funciones calendar-mark-today
o calendar-star-date
:
(add-hook 'calendar-today-visible-hook 'calendar-mark-today)
Un gancho normal similar, calendar-today-invisible-hook
se ejecuta si la fecha actual no es visible en la ventana.
Cada uno de los comandos de movimiento del cursor del calendario ejecuta el gancho calendar-move-hook
después de mover el cursor.
32.13.2. Personalizar los Días Festivos
Hay varias variables que listan los días festivos por defecto y que Emacs conoce. Estas son: holiday-general-holidays
, holiday-local-holidays
, holiday-solar-holidays
, holiday-bahai-holidays
, holiday-christian-holidays
, holiday-hebrew-holidays
, holiday-islamic-holidays
, holiday-oriental-holidays
, y holiday-other-holidays
. Los nombres deben explicarse por sí mismos; por ejemplo, holiday-solar-holidays
enumera las fiestas relacionadas con el sol y la luna.
Puede personalizar estas listas de días festivos según sus necesidades, eliminando o añadiendo días festivos como se describe a continuación. Establezca cualquiera de ellos como nulo para no mostrar los días festivos asociados.
Los días festivos generales son, por defecto, días festivos comunes en todo Estados Unidos. Por el contrario, tanto holiday-local-holidays
como holiday-other-holidays
están vacíos por defecto. Están pensados para configurar todo el sistema y para usarlos individualmente, respectivamente.
Por defecto, Emacs no incluye todas las fiestas de las religiones que conoce, sólo las que se encuentran comúnmente en los calendarios seculares. Para obtener una colección más extensa de fiestas religiosas, puede establecer cualquiera (o todas) de las variables calendar-bahai-all-holidays-flag
, calendar-christian-all-holidays-flag
, calendar-hebrew-all-holidays-flag
, o calendar-islamic-all-holidays-flag
a t
.
Cada una de las variables de vacaciones es una lista de formas de vacaciones, y cada una de ellas describe un día festivo (o a veces una lista de días festivos). A continuación se muestra una tabla con los posibles tipos de formularios de vacaciones. Los números de día y de mes cuentan a partir de 1, pero los números de nombre de día cuentan el domingo como 0. El argumento cadena es siempre la descripción de la festividad, como cadena.
- (
holiday-fixed
mes día cadena) Una fecha fija del calendario gregoriano.
- (
holiday-float
mes nombre-díak
cadena) &optional day) El k-ésimo nombre de día (nombre de día=0 para el domingo, y así sucesivamente) después o antes de la fecha gregoriana mes, día. Un argumento k negativo significa que se cuenta hacia atrás desde el final del mes. El día opcional es por defecto 1 si k es positivo, y el último día del mes en caso contrario.
- (
holiday-chinese
mes día cadena) Fecha fija del calendario chino.
- (
holiday-hebrew
mes día cadena) Fecha fija del calendario Hebreo.
- (
holiday-islamic
mes día cadena) Fecha fija del calendario Islámico.
- (
holiday-julian
mes día cadena) Fecha fija del calendario Juliano.
- (
holiday-sexp
sexp cadena) Una fecha calculada por la expresión sexp de Lisp. La expresión debe usar la variable año para calcular y devolver la fecha de un día festivo en forma de lista (mes día año), o
nil
si el día festivo no tiene lugar este año.- (
if
condición festivo-forma) Un día festivo que sólo se produce si la condición es verdadera.
- (
función
[args]) Una lista de fechas calculadas según función, llamada con argumentos args.
Por ejemplo, supongamos que desea añadir el Día de la Bastilla, que se celebra en Francia el 14 de julio (es decir, el decimocuarto día del séptimo mes). Puede hacerlo de la siguiente manera:
(setq holiday-other-holidays '((holiday-fixed 7 14 "Día de la Bastilla")))
Muchos días festivos se celebran en un día concreto de la semana, en un momento específico del mes. He aquí un formulario de festividad que describe el Día de la Súplica por el Huracán, que se celebra en las Islas Vírgenes el cuarto lunes de julio:
(holiday-float 7 1 4 "Día de Súplica por el Huracán")
En este caso, el 7 indica julio, el 1 indica lunes (domingo es 0, martes es 2, etc.) y el 4 indica el cuarto día del mes (1 indica el primer día, 2 el segundo, -1 el último, -2 el penúltimo, etc.).
También puede especificar días festivos que coincidan con días fijos de los calendarios bahá’í, chino, hebreo, islámico y juliano. Por ejemplo,
(setq holiday-other-holidays
'('holiday-hebrew 10 2 "Último día de Hanukkah")
(holiday-islamic 3 12 "Cumpleaños de Mahoma")
(holiday-julian 4 2 "Cumpleaños de Jefferson")))
añade el último día de Hanukkah (ya que los meses Hebreos se numeran con 1 empezando por Nisan), la fiesta islámica que celebra el cumpleaños de Mahoma (ya que los meses Islámicos se numeran desde 1 empezando por Muharram), y el cumpleaños de Thomas Jefferson, que es el 2 de Abril de 1743 en el calendario Juliano.
Para incluir una festividad de forma condicional, use if de Emacs Lisp o la forma holiday-sexp
. Por ejemplo, las elecciones presidenciales estadounidenses se celebran el primer martes después del primer lunes de noviembre de los años divisibles por 4:
(holiday-sexp '(if (zerop (% year 4))
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 year)))))))
"Elección Presidencial US")
o
(if (zerop (% displayed-year 4))
(holiday-fixed 11
(calendar-extract-day
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 displayed-year)))))))
"Elección Presidencial US"))
Algunos días festivos no encajan en ninguna de estas formas porque su determinación requiere cálculos especiales. En tales casos, debe escribir una función Lisp para realizar el cálculo. Para incluir eclipses, por ejemplo, añada (eclipses
) a holiday-other-holidays
y escriba una función Emacs Lisp eclipses
que devuelva una lista (posiblemente vacía) de las fechas gregorianas relevantes entre el rango visible en la ventana del calendario, con cadenas descriptivas, como ésta:
(((6 4 2012) "Eclipse Lunar") ((11 13 2012) "Eclipse Solar") ... )
32.13.3 Conversión desde el Calendario Maya
Aquí están los comandos para seleccionar fechas basadas en el calendario maya:
gml (g m l
)
Se mueve a una fecha especificada por el calendario de recuento largo (
calendar-mayan-goto-long-count-date
).
gmnt (g m n t
)
Se mueve a la siguiente ocurrencia de un lugar en el calendario tzolkin (
calendar-mayan-next-tzolkin-date
).
gmpt (g m p t
)
Se desplaza a la ocurrencia anterior de un lugar en el calendario tzolkin (
calendar-mayan-previous-tzolkin-date
).
gmnh (g m n h
)
Pasa a la siguiente aparición de un lugar en el calendario haab (
calendar-mayan-next-haab-date
).
gmph (g m p h
)
Se mueve a la ocurrencia anterior de un lugar en el calendario haab (
calendar-mayan-previous-haab-date
).
gmnc (g m n c
)
Pasa a la siguiente aparición de un lugar en la ronda del calendario (
calendar-mayan-next-calendar-round-date
).
gmpc (g m p c
)
Pasa a la ocurrencia anterior de un lugar en la ronda del calendario (
calendar-mayan-previous-calendar-round-date
).
Para entender estos comandos, es necesario entender los calendarios mayas. La cuenta larga es un conteo de días con estas unidades:
1 kin = 1 day 1 uinal = 20 kin 1 tun = 18 uinal
1 katun = 20 tun 1 baktun = 20 katun
Así, la fecha de la cuenta larga 12.16.11.16.6 significa 12 baktun, 16 katun, 11 tun, 16 uinal y 6 kin. El calendario de Emacs puede manejar fechas de cuenta larga mayas tan tempranas como 7.17.18.13.3, pero no anteriores. Cuando use el comando g m l
, escriba la fecha de la cuenta larga maya con el baktun, katun, tun, uinal y kin separados por puntos.
El calendario maya tzolkin es un ciclo de 260 días formado por un par de ciclos independientes de 13 y 20 días. Como este ciclo se repite infinitamente, Emacs proporciona comandos para retroceder y avanzar al punto anterior o siguiente del ciclo. Escribe g m p t
para ir a la fecha tzolkin anterior; Emacs le pide una fecha tzolkin y mueve el punto a la ocurrencia anterior de esa fecha. Del mismo modo, escriba g m n t
para ir a la siguiente ocurrencia de una fecha tzolkin.
El calendario maya haab es un ciclo de 365 días organizado en 18 meses de 20 días cada uno, seguidos de un periodo de 5 días sin mes. Al igual que el ciclo tzolkin, este ciclo se repite sin fin, y existen comandos para retroceder y avanzar al punto anterior o siguiente del ciclo. Escriba g m p h
para ir a la fecha haab anterior; Emacs le pide una fecha haab y mueve el punto a la ocurrencia anterior de esa fecha. Del mismo modo, escriba g m n h
para ir a la siguiente ocurrencia de una fecha haab.
Los Mayas también usaban la combinación de la fecha tzolkin y la fecha haab. Esta combinación es un ciclo de unos 52 años llamado ronda calendárica. Si teclea g m p c
, Emacs le preguntará por una fecha haab y una fecha tzolkin y entonces moverá el punto a la ocurrencia previa de esa combinación. Use g m n c
para mover el punto a la siguiente aparición de una combinación. Estos comandos señalan un error si la combinación haab/fecha tzolkin que ha tecleado es imposible.
Emacs usa terminación estricta (ver 9.4.3 Salida del Completado) siempre que le pida que teclee un nombre Maya, así que no tiene que preocuparse por la ortografía.
32.13.4 Formato de visualización de fechas
Puede personalizar la forma en que se muestran las fechas en la agenda, las líneas de modo y los mensajes configurando calendar-date-display-form
. Esta variable contiene una lista de expresiones que pueden incluir las variables month
(mes), day
(día) y year
(año), que son números en forma de cadena, y monthname
(nombre-del-mes) y dayname
(nombre-del-día), que son cadenas alfabéticas. En el estilo americano, el valor por defecto de esta lista es el siguiente:
((if dayname (concat dayname ", ")) monthname " " day ", " year)
mientras que en el estilo europeo este valor es el predeterminado:
((if dayname (concat dayname ", ")) day " " monthname " " year)
La representación de fecha ISO por defecto es:
((format "%s-%.2d-%.2d" year (string-to-number month)
(string-to-number day)))
Otro formato típicamente americano es:
(month "/" day "/" (substring year -2))
32.13.5 Formato de Visualización de la Hora
El calendario y la agenda muestran por defecto las horas del día al estilo americano convencional, con las horas de 1 a 12, los minutos, y am
o pm
. Si prefiere el estilo europeo, también conocido en EE.UU. como militar, en el que las horas van de 00 a 23, puede alterar la variable calendar-time-display-form
. Esta variable es una lista de expresiones que pueden incluir las variables 12-hours
, 24-hour
y minutes
, que son números en forma de cadena, y am-pm
y time-zone
, que son cadenas alfabéticas. El valor por defecto es:
(12-hours ":" minutes am-pm
(if time-zone " (") time-zone (if time-zone ")"))
He aquí un valor que proporciona tiempos de estilo europeo:
(24-hours ":" minutes
(if time-zone " (") time-zone (if time-zone ")"))
Tenga en cuenta que pocas funciones de calendario devuelven la hora del día (de momento, sólo las funciones solares).
32.13.6 Personalizar la Agenda
Normalmente, la ventana de la agenda indica los días festivos que caen en la fecha de las entradas de la agenda, ya sea en la línea de modo o en el propio búfer. El proceso de comprobación de los días festivos puede ser lento, dependiendo de los días festivos definidos. En ese caso, si se fija diary-show-holidays-flag
a nil
se acelerará la visualización de la agenda.
La variable diary-number-of-entries
controla el número de días de entradas de la agenda que se mostrarán a la vez. Afecta a la visualización inicial cuando calendar-view-diary-initially-flag
es t
, así como al comando M-x diary
. Por ejemplo, un valor de 1 (por defecto) muestra sólo las entradas del diario del día actual, mientras que un valor de 2 mostrará también las entradas del día siguiente. El valor también puede ser un vector de siete enteros: por ejemplo, si el valor es [0 2 2 2 2 4 1]
, el domingo no aparecerá ninguna entrada en la agenda, las entradas de la fecha actual y del día siguiente aparecerán de lunes a jueves, las entradas de viernes a lunes aparecerán el viernes, mientras que el sábado sólo aparecerán las entradas de ese día.
Puede personalizar la forma de las fechas en su archivo de agenda configurando la variable diary-date-forms
. Esta variable es una lista de patrones para reconocer una fecha. Cada patrón de fecha es una lista cuyos elementos pueden ser expresiones regulares (ver Expresiones Regulares en el Manual de Referencia de Emacs Lisp) o los símbolos month
(mes), day
(día), year
(año), monthname
(nombre del mes) y dayname
(nombre del día). Todos estos elementos sirven como patrones que coinciden con ciertos tipos de texto en el archivo de la agenda. Para que el patrón de fecha en su conjunto coincida, todos sus elementos deben coincidir consecutivamente.
Una expresión regular en un patrón de fecha coincide de la forma habitual, usando la tabla de sintaxis estándar alterada para que *
sea un constituyente de palabra.
Los símbolos month
(mes), day
(día), year
(año), monthname
(nombredelmes) y dayname
(nombredeldía) coinciden con el número del mes, el número del día, el número del año, el nombre del mes y el nombre del día de la fecha considerada. Los símbolos que coinciden con números admiten ceros a la izquierda; los que coinciden con nombres admiten mayúsculas y abreviaturas (como se especifica en calendar-month-abbrev-array
y calendar-day-abbrev-array
). Todos los símbolos pueden coincidir con *
; dado que *
en una entrada de diario significa «cualquier día», «cualquier mes», etc., debería coincidir independientemente de la fecha que se considere.
El valor por defecto de diary-date-forms
en el estilo americano lo proporciona diary-american-date-forms
:
((month "/" day "[^/0-9]")
(month "/" day "/" year "[^0-9]")
(monthname " *" day "[^,0-9]")
(monthname " *" day ", *" year "[^0-9]")
(dayname "\\W"))
Las variables diary-european-date-forms
y diary-iso-date-forms
proporcionan otros estilos por defecto.
Los patrones de fecha de la lista deben ser mutuamente excluyentes y no deben coincidir con ninguna parte de la entrada del diario, sólo con la fecha y un carácter de espacio en blanco. Si, para ser mutuamente excluyente, el patrón debe coincidir con una parte del texto de la entrada del diario -más allá del espacio en blanco que termina la fecha- entonces el primer elemento del patrón de fecha debe ser una copia de seguridad. Esto hace que el sistema de reconocimiento de fechas retroceda hasta el principio de la palabra actual de la entrada del diario, una vez finalizada la coincidencia. Aunque use la copia de seguridad, el patrón de fecha no debe coincidir en absoluto con más de una parte de la primera palabra de la entrada de la agenda. Por ejemplo, el valor por defecto de diary-european-date-forms
es:
((day "/" month "[^/0-9]")
(day "/" month "/" year "[^0-9]")
(backup day " *" monthname "\\W+\\<\\([^*0-9]\\|\\([0-9]+[:aApP]\\)\\)")
(day " *" monthname " *" year "[^0-9]")
(dayname "\\W"))
Fíjese en el uso de respaldo en el tercer patrón, porque necesita coincidir con parte de una palabra más allá de la propia fecha para distinguirlo del cuarto patrón.
32.13.7 Entradas de la Agenda con Calendarios no Gregorianos
Además de las entradas basadas en el calendario gregoriano estándar, su agenda puede tener entradas basadas en fechas Bahá’ís, Chinas, Hebreas o Islámicas. Sin embargo, el reconocimiento de estas entradas puede llevar mucho tiempo y, dado que la mayoría de la gente no las utiliza, debe habilitar explícitamente su uso. Si quiere que la agenda reconozca, por ejemplo, las entradas basadas en fechas Hebreas, debe hacer lo siguiente:
(add-hook 'diary-nongregorian-listing-hook 'diary-hebrew-list-entries)
(add-hook 'diary-nongregorian-marking-hook 'diary-hebrew-mark-entries)
Del mismo modo, para las entradas Islámicas, Bahá’ís y Chinas, añada diary-islamic-list-entries
y diary-islamic-mark-entries
, diary-bahai-list-entries
y diary-bahai-mark-entries
, o diary-chinese-list-entries
y diary-chinese-mark-entries
.
Estas entradas de diario tienen el mismo formato que las entradas de diario de fecha gregoriana, salvo que diary-bahai-entry-symbol
(por defecto B
) debe preceder a una fecha bahá’í, diary-chinese-entry-symbol
(por defecto C
) a una fecha china, diary-hebrew-entry-symbol
(por defecto H
) a una fecha hebrea y diary-islamic-entry-symbol
(por defecto I
) a una fecha islámica. Además, los nombres de meses no gregorianos no pueden abreviarse (porque las tres primeras letras no suelen ser únicas). (Tenga en cuenta también que debe utilizar «Adar I» si desea el Adar de un año hebreo común). Por ejemplo, una entrada de diario para la fecha hebrea Heshvan 25 podría tener este aspecto:
HHeshvan 25 Happy Hebrew birthday!
y aparecería en la agenda para cualquier fecha que corresponda a Heshvan 25 en el calendario Hebreo. Y aquí hay una entrada de diario de fecha islámica que coincide con Dhu al-Qada 25:
IDhu al-Qada 25 Happy Islamic birthday!
Al igual que en el caso de las entradas de agenda con fecha Gregoriana, las entradas no-Gregorianas no llevan marca si van precedidas de diary-nonmarking-symbol (por defecto &
).
A continuación se muestra una tabla de comandos utilizados en el calendario para crear entradas de agenda que coincidan con la fecha seleccionada y otras fechas similares en los calendarios Bahá’í, Chino, Hebreo o Islámico:
ihd (i h d
)
diary-hebrew-insert-entry
ihm (i h m
)
diary-hebrew-insert-monthly-entry
ihy (i h y
)
diary-hebrew-insert-yearly-entry
iid (i i d
)
diary-islamic-insert-entry
iim (i i m
)
diary-islamic-insert-monthly-entry
iiy (i i y
)
diary-islamic-insert-yearly-entry
iBd (i B d
)
diary-bahai-insert-entry
iBm (i B m
)
diary-bahai-insert-monthly-entry
iBy (i B y
)
diary-bahai-insert-yearly-entry
iCd (i C d
)
diary-chinese-insert-entry
iCm (i C m
)
diary-chinese-insert-monthly-entry
iCy (i C y
)
diary-chinese-insert-yearly-entry
iCa (i C a
)
diary-chinese-insert-anniversary-entry
Estos comandos funcionan de forma muy parecida a los comandos correspondientes para las entradas de agenda ordinarias: se aplican a la fecha en la que se encuentra ese punto en la ventana de calendario, y lo que hacen es insertar sólo la parte de la fecha de una entrada de agenda al final de su archivo de agenda. A continuación, debe insertar el resto de la entrada de la agenda. Los comandos básicos añaden una entrada para la fecha no gregoriana específica, los comandos monthly
(mensuales) para el día dentro del mes no Gregoriano dado en cada mes, y los comandos yearly
(anuales) para el día y mes no Gregorianos dados en cada año.
32.13.8 Visualización de la Agenda
La visualización de la agenda funciona preparando la lista de entradas de la agenda y ejecutando la función especificada por la variable diary-display-function
. El valor por defecto diary-fancy-display
muestra las entradas de la agenda y los días festivos copiándolos en un búfer especial que sólo existe para la visualización. Copiar las entradas de la agenda en un búfer separado ofrece la oportunidad de cambiar el texto mostrado para hacerlo más bonito, por ejemplo, para ordenar las entradas por las fechas a las que corresponden.
Normalmente, el búfer de la agenda no muestra los días en los que no hay entradas, aunque sean festivos. Si desea que estos días se muestren en el búfer de la agenda, ajuste la variable diary-list-include-blanks
a t
.
El búfer de la agenda elegante habilita el modo Vista (View mode, ver 15.6 Modo Vista).
El método de visualización alternativo diary-simple-display
muestra el búfer de la agenda real, y utiliza texto invisible para ocultar las entradas que no correspondan. Las vacaciones se muestran en la línea de modo. La ventaja de este método es que puede editar el búfer y guardar los cambios directamente en el archivo de la agenda. Sin embargo, este método no es tan flexible como el método elegante. Por ejemplo, no puede ordenar las entradas. Otra desventaja es que el texto invisible puede ser confuso. Por ejemplo, si copia un fragmento de texto para pegarlo en otro lugar, es posible que se incluya texto invisible. Del mismo modo, dado que el búfer de la agenda tal y como lo ve es una ilusión, imprimir simplemente el búfer puede no imprimir lo que ve en su pantalla.
Por esta razón, existe un comando especial para imprimir una copia del búfer del diario tal y como aparece; este comando es M-x diary-print-entries
. Funciona con cualquiera de los dos métodos de visualización, aunque con la visualización elegante también puede imprimir el búfer como cualquier otro. Para imprimir una copia impresa de la agenda día a día de una semana, sitúe el punto en el primer día de la semana, teclee 7d (7 d
), y luego haga M-x diary-print-entries
. Como es habitual, la inclusión de los días festivos ralentiza ligeramente la visualización; puede acelerarla estableciendo la variable diary-show-holidays-flag
en nil
.
Este comando prepara un búfer temporal que contiene sólo las entradas de la agenda visibles actualmente en el búfer de la agenda. A diferencia de la visualización simple, las otras entradas irrelevantes están realmente ausentes, no sólo ocultas. Después de preparar el buffer, ejecuta el gancho (hook) diary-print-entries-hook
. El valor por defecto de este gancho envía los datos directamente a la impresora con el comando lpr-buffer
(ver 41 Impresión de Copias en Papel). Si desea utilizar un comando diferente para realizar la impresión, simplemente cambie el valor de este gancho. Otros usos pueden ser, por ejemplo, reordenar las líneas por día y hora.
Puede editar las entradas del diario tal y como aparecen en la ventana simple del diario, pero es importante recordar que el buffer que se muestra contiene todo el fichero del diario, con partes del mismo ocultas a la vista. Esto significa, por ejemplo, que el comando C-f
(forward-char
) puede poner el punto en lo que parece ser el final de la línea, pero que en realidad es la mitad de alguna línea oculta.
¡Tenga cuidado al editar las entradas del diario en la pantalla simple! Insertar líneas adicionales o añadir/borrar caracteres en medio de una línea visible no puede causar problemas, pero editar al final de una línea puede no hacer lo que espera. Borrar una línea puede borrar otras entradas invisibles que le sigan. Antes de editar el buffer de diario simple, es mejor mostrar el archivo completo con s
(diary-show-all-entries
).
32.13.9 Agenda Elegante
Las siguientes funciones sólo funcionan con la visualización de agenda elegante.
Puede utilizar el gancho normal diary-list-entries-hook
para ordenar las entradas de la agenda de cada día por su hora del día. A continuación se explica cómo hacerlo:
(add-hook 'diary-list-entries-hook 'diary-sort-entries t)
Para cada día, esto ordena las entradas del diario que comienzan con una hora reconocible del día según sus horas. Las entradas del diario sin hora aparecen en primer lugar dentro de cada día. Observe cómo el comando de ordenamiento se coloca al final de la lista de ganchos, en caso de que los miembros anteriores de la lista cambien el orden de las entradas de la agenda, o añadan elementos.
Puede escribir comments
(comentarios) en las entradas de la agenda, estableciendo las variables diary-comment-start
y diary-comment-end
a cadenas que delimiten a los comentarios. La visualización elegante no imprime comentarios. Es posible que desee poner metadatos para el uso de otros paquetes (por ejemplo, el paquete de citas, véase 32.10.6 Citas) dentro de los comentarios.
Su archivo principal de agenda puede incluir otros archivos. Esto permite a un grupo de personas compartir un archivo de agenda para los eventos que se aplican a todos ellos. Las líneas del archivo de agenda que empiezan por diary-include-string
:
#include "nombrearchivo"
incluir las entradas del diario del archivo nombrearchivo en el búfer del diario elegante. El mecanismo de inclusión es recursivo, de modo que los archivos incluidos pueden incluir otros archivos, y así sucesivamente (debe tener cuidado de no tener un ciclo de inclusiones, por supuesto). A continuación se explica cómo activar el mecanismo de inclusión:
(add-hook 'diary-list-entries-hook 'diary-include-other-diary-files)
(add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files)
El mecanismo de inclusión sólo funciona con la visualización de agenda elegante, ya que la visualización de agenda simple muestra las entradas directamente desde su archivo de agenda.
32.13.10. Entradas Sexp y la Visualización de la Agenda Elegante
Las entradas sexp de la agenda le permiten hacer algo más que tener condiciones complicadas bajo las cuales se aplica una entrada de la agenda. Las entradas sexp deben ir precedidas de diary-sexp-entry-symbol
(por defecto %%
) en el archivo de la agenda. Con la visualización de la agenda, las entradas sexp pueden generar el texto de la entrada dependiendo de la propia fecha.
Por ejemplo, una entrada de diario de aniversario puede insertar el número de años transcurridos desde la fecha del aniversario en el texto de la entrada del diario. De ahí el %d
en esta entrada de diario:
%%(diary-anniversary 10 31 1948) Cumpleaños Arturo (%d years old)
se sustituye por la edad, de modo que el 31 de octubre de 1990 la entrada aparece en el búfer de la agenda elegante de esta manera:
Cumpleaños de Arturo (42 años)
Si en cambio el archivo de la agenda contiene esta entrada:
%%(diary-anniversary 10 31 1948) Cumpleaños %d%s Arturo
la entrada en el búfer del diario de lujo para el 31 de octubre de 1990 aparece así:
42 cumpleaños de Arturo
Del mismo modo, las entradas cíclicas de un diario pueden interpolar el número de repeticiones que se han producido:
%%(diary-cyclic 50 1 1 2012) Renovar medicamentos (%d%s time)
se ve así:
Renovar medicamentos (5ª vez)
en la pantalla de la agenda de lujo el 7 de septiembre de 2012.
Hay un aviso anticipado de la agenda sexp que incluye su entrada en la agenda no sólo en la fecha en que se produce, sino también en fechas anteriores. Por ejemplo, si desea un recordatorio una semana antes de su aniversario, puede utilizar
%%(diary-remind '(diary-anniversary 12 22 1968) 7) Aniversario de Ed
y la agenda de fantasía mostrará El aniversario de Ed
tanto el 15 de diciembre como el 22 de diciembre.
La función diary-date
se aplica a fechas descritas por una combinación de mes, día y año, cada uno de los cuales puede ser un entero, una lista de enteros o t
(es decir, todos los valores). Por ejemplo,
%%(diary-date '(10 11 12) 22 t) Recoger las hojas
hace que la agenda elegante muestre
Recoger las hojas
el 22 de octubre, el 22 de noviembre y el 22 de diciembre de cada año.
La función diary-float
permite describir entradas de la agenda que se aplican a fechas como el tercer viernes de noviembre o el último martes de abril. Los parámetros son month (mes), dayname (nombre-día) y un índice n. La entrada aparece el nésimo dayname (nombre-día) después del primer día del mes, donde dayname=0 significa domingo, 1 significa lunes, y así sucesivamente. Si n es negativo, cuenta hacia atrás desde el final del mes. El valor de mes puede ser una lista de meses, un único mes o t
para especificar todos los meses. También puede utilizar un parámetro opcional day para especificar el nésimo nombre de día en o después/antes del día del mes; el valor de day por defecto es 1 si n es positivo y el último día del mes si n es negativo. Por ejemplo,
%%(diary-float t 1 -1) Pagar la renta
hace que la agenda elegante muestre:
Pagar la renta
el último lunes de cada mes.
La generalidad de las entradas de agenda sexp le permite especificar cualquier entrada de agenda que pueda describir algorítmicamente. Una entrada de agenda sexp contiene una expresión que calcula si la entrada se aplica a una fecha determinada. Si su valor es no nulo, la entrada se aplica a esa fecha; en caso contrario, no. La expresión puede utilizar la variable date
para encontrar la fecha considerada; su valor es una lista (mes día año) que se refiere al calendario gregoriano.
La entrada del diario sexp se aplica a una fecha cuando el valor de la expresión no es nulo, pero algunos valores tienen significados más específicos. Si el valor es una cadena, esa cadena es una descripción del evento que ocurre en esa fecha. El valor también puede tener la forma (marca . cadena
); entonces marca especifica cómo marcar la fecha en el calendario, y cadena es la descripción del evento. Si marca es una cadena de un solo carácter, éste aparecerá junto a la fecha en el calendario. Si marca es un nombre de cara, la fecha se muestra en esa cara. Si marca es nil
, no especifica ningún resaltado particular para la fecha.
Suponga que cobra el 21 de cada mes si es un día laborable, y el viernes anterior si el 21 cae en fin de semana. He aquí cómo escribir una entrada de diario sexp que coincida con esas fechas:
&%%(let ((dayname (calendar-day-of-week date))
(day (cadr date)))
(or (and (= day 21) (memq dayname '(1 2 3 4 5)))
(and (memq day '(19 20)) (= dayname 5)))
) Cheque de Pago Depositado
Las siguientes entradas de diario sexp aprovechan la posibilidad de crear entradas de diario cuyo texto varía en función de la fecha:
%%(diary-sunrise-sunset)
Anota en el diario las horas locales de salida y puesta del sol de hoy.
%%(diary-lunar-phases)
Anota en el diario las fases (trimestres) de la luna.
%%(diary-day-of-year)
Escribe una entrada en la agenda con el número del día de hoy en el año en curso y el número de días que quedan en el año en curso.
%%(diary-iso-date)
Escribe una entrada en la agenda con la fecha comercial ISO equivalente a la de hoy.
%%(diary-julian-date)
Escribe una entrada en el diario con la fecha equivalente del calendario Juliano de hoy.
%%(diary-astro-day-number)
Escribe una entrada en el diario con el número del día astronómico (Juliano) equivalente al día de hoy.
%%(diary-bahai-date)
Escribe una entrada en el diario con la fecha equivalente del calendario Bahá’í de hoy.
%%(diary-chinese-date)
Escribe una entrada en el diario con la fecha del calendario Chino equivalente a la de hoy.
%%(diary-coptic-date)
Escribe una entrada en el diario con la fecha del calendario Coptic equivalente a la de hoy.
%%(diary-ethiopic-date)
Escribe una entrada en el diario con la fecha equivalente del calendario Etíope de hoy.
%%(diary-french-date)
Escribe una entrada en el diario con la fecha equivalente a la de hoy en el calendario de la Revolución Francesa.
%%(diary-hebrew-date)
Escribe una entrada en el diario con la fecha del calendario Hebreo equivalente a la de hoy.
%%(diary-islamic-date)
Escribe una entrada en el diario con la fecha del calendario Islámico equivalente a la de hoy.
%%(diary-mayan-date)
Escribe una entrada en el diario con la fecha del calendario Maya equivalente a la de hoy.
%%(diary-persian-date)
Escribe una entrada en el diario con la fecha del calendario Persa equivalente a la de hoy.
Por ejemplo, incluyendo la entrada del diario
&%%(diary-hebrew-date)
hace que la visualización de la agenda de cada día contenga la fecha equivalente en el calendario Hebreo, si está utilizando la visualización de la agenda elegante. (Con la visualización simple del diario, la línea literal &%%( diary-hebrew-date)
aparece en el diario para cualquier fecha).
Esta función se ha utilizado para construir ciertas entradas de agenda sexp en hebreo estándar:
%%(diary-hebrew-rosh-hodesh)
Escribe una entrada en el diario que relate el acontecimiento y el anuncio ritual de cada nuevo mes Hebreo.
%%(diary-hebrew-parasha)
Escribe en el diario del sábado la lectura semanal de las escrituras de la sinagoga.
%%(diary-hebrew-sabbath-candles)
Escribe en el diario del viernes la hora local del encendido de las velas del Sabbat.
%%(diary-hebrew-omer)
Anota en el diario la cuenta del consumo, cuando proceda.
%%(diary-hebrew-yahrzeit mes día año) nombre
Crea una entrada en el diario que marque el aniversario de una fecha de fallecimiento. La fecha es la fecha gregoriana (civil) del fallecimiento. La entrada en el diario aparece en el aniversario correspondiente del calendario Hebreo y en el día anterior. (El orden de los parámetros cambia según el estilo de fecha del calendario; por ejemplo en el estilo europeo a día, mes, año).
%%(diary-hebrew-birthday mes día año)
Escribe una entrada para un cumpleaños en el calendario Hebreo.
Todas las funciones documentadas anteriormente toman un argumento opcional marca que especifica cómo marcar la fecha en la visualización del calendario. Si una de estas funciones decide que se aplica a una fecha determinada, devuelve un valor que contiene marca, como se ha descrito anteriormente.