Q: comment contrôler la fenêtre org-deadline
utilisée pour afficher le calendrier?
org-deadline
fait apparaître temporairement le calendar
tampon dans une fenêtre lors de la définition d'un délai, puis le referme une fois terminé. Lorsqu'il n'y a qu'une seule fenêtre, une nouvelle fenêtre s'ouvre au bas du cadre existant. Lorsqu'il y a plusieurs fenêtres, il en sélectionne une - je suppose avec quelque chose comme get-lru-window
- des fenêtres disponibles.
Ce dernier est problématique s'il prend en charge l'une des autres fenêtres contenant les informations dont j'ai besoin pour définir la date limite (date, heure, etc.). C'est généralement un problème dans une configuration de fenêtre telle que:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
| | (C: mu4e view) |
| | |
| | |
| | |
+--------------------+--------------------+
Lors de l'ajout d'une date limite au fichier de l'agenda en (A), org-deadline
prendra le relais (B) ou (C), qui contiennent des e-mails contenant les informations de date / heure dont j'ai besoin. Je préférerais de beaucoup que si j'appelle org-deadline
de (A), cela ouvrirait une fenêtre temporaire (D) pour contenir le calendar
tampon comme ci-dessous:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
+--------------------+ (C: mu4e view) |
| | |
| (D: calendar) | |
| | |
+--------------------+--------------------+
Alors: comment forcer org-deadline
(et des fonctions similaires) à faire apparaître une nouvelle fenêtre temporaire au bas de la fenêtre active plutôt que de reprendre l'une des autres?
PS: je connais les fenêtres dédiées , mais elles ne me semblent pas être la meilleure approche car ce n'est pas tant que je veuille dédier des tampons aux fenêtres que je veux éviter qu'une fonction ne prenne le relais sur une des "courtes" ceux.
display-buffer-alist
) Mais je pense qu'il y a une ride supplémentaire ici parce que lesorg-deadline
utilisationscalendar
elles-mêmes vont très loin pour contrôler quelle fenêtre utiliser. cf les commentaires danscalendar-basic-setup
.Réponses:
Ce qui suit devrait faire ce que vous voulez.
Calendrier utilise la fonction
calendar-basic-setup
pour afficher le tampon de calendrier,calendar-basic-setup
à son tour utilisepop-to-buffer
qui à son tour utilisedisplay-buffer
pour afficher le tampon de calendrier. Maintenant, ildisplay-buffer
est hautement personnalisable et nous permet de fournir des fonctions pour afficher un tampon en utilisant certaines variables, nous utilisons une telle variabledisplay-buffer-alist
ici.Fondamentalement, nous disons à emacs d'utiliser la fonction
my-position-calendar-buffer
pour afficher un tampon correspondant à l'expression rationnelle\*Calendar\*
. La fonctionmy-position-calendar-buffer
recherche une fenêtre affichant l'agenda de l'organisation, si elle ne trouve pas une telle fenêtre, elle ne fait rien, auquel casdisplay-buffer
elle essaiera d'autres fonctions pour afficher le tampon. Dans le cas où une fenêtre affichant org-agenda est trouvée, la fonction divise cette fenêtre verticalement et affiche le tampon de calendrier.Je n'ai pas testé cela en profondeur (j'ai juste essayé de démarrer le calendrier avec la vue de l'agenda et sans la vue de l'agenda), cela semble fonctionner mais il pourrait y avoir quelques bugs.
la source
add-to-list
sur display-buffer-alist. L'utilisationsetq
remplace d'autres personnalisations.