P: ¿cómo puedo controlar qué ventana org-deadline
usa para mostrar el calendario?
org-deadline
aparece temporalmente el calendar
búfer en una ventana al establecer una fecha límite, y luego lo cierra nuevamente después de completarlo. Cuando solo hay una ventana, aparece una nueva ventana en la parte inferior del marco existente. Cuando hay varias ventanas, selecciona una, supongo con algo así get-lru-window
, de las ventanas disponibles.
Esto último es problemático si se hace cargo de una de las otras ventanas que tiene la información que necesito para establecer la fecha límite (fecha, hora, etc.) Esto es comúnmente un problema en una configuración de ventana como:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
| | (C: mu4e view) |
| | |
| | |
| | |
+--------------------+--------------------+
Al agregar una fecha límite al archivo de agenda en (A), org-deadline
se hará cargo de (B) o (C), que contienen correos electrónicos que tienen la información de fecha / hora que necesito. Preferiría mucho que, si estoy llamando org-deadline
desde (A), se abrirá una ventana temporal (D) para contener el calendar
búfer como se muestra a continuación:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
+--------------------+ (C: mu4e view) |
| | |
| (D: calendar) | |
| | |
+--------------------+--------------------+
Entonces: ¿cómo forzaría uno org-deadline
(y funciones análogas) a abrir una nueva ventana temporal en la parte inferior de la ventana activa en lugar de tomar el control de una de las otras?
PD: Soy consciente de las ventanas dedicadas , pero no me parecen el mejor enfoque, ya que no es tanto que quiera dedicar buffers a Windows , sino evitar que una función se haga cargo de uno de los "cortos" unos.
display-buffer-alist
) Pero creo que hay una arruga adicional aquí porqueorg-deadline
usa lacalendar
que se sale de su camino para controlar qué ventana usar. cf los comentarios encalendar-basic-setup
.Respuestas:
Los siguientes deben hacer lo que quieras.
Calendario usa la función
calendar-basic-setup
para mostrar el búfer de calendario,calendar-basic-setup
a su vez usa elpop-to-buffer
que a su vez usadisplay-buffer
para mostrar el búfer de calendario. Ahoradisplay-buffer
es altamente personalizable y nos permite proporcionar funciones para mostrar un búfer utilizando ciertas variables, aquí usamos una de esas variablesdisplay-buffer-alist
.Básicamente estamos diciendo que emacs use la función
my-position-calendar-buffer
para mostrar un búfer que coincida con la expresión regular\*Calendar\*
. La funciónmy-position-calendar-buffer
busca una ventana que muestre la agenda de la organización, si no encuentra dicha ventana, no hace nada, en cuyo casodisplay-buffer
intentará otras funciones para mostrar el búfer. En caso de que se encuentre una ventana que muestre org-agenda, la función divide esa ventana verticalmente y muestra el búfer de calendario.No he probado esto completamente (solo intenté iniciar el calendario con la vista de agenda y sin vista de agenda), parece estar funcionando, pero puede haber algunos errores.
fuente
add-to-list
en display-buffer-alist. El usosetq
anula otras personalizaciones.