Вопрос: как я могу контролировать, какое окно org-deadline
используется для отображения календаря?
org-deadline
временно устанавливает calendar
буфер в окне при установке крайнего срока, а затем снова закрывает его после завершения. Когда есть только одно окно, оно открывает новое окно внизу существующего фрейма. Когда имеется несколько окон, он выбирает одно - я полагаю, что-то вроде get-lru-window
- из доступных окон.
Последнее проблематично, если оно занимает одно из других окон, в котором есть информация, которая мне нужна, чтобы установить крайний срок (дата, время и т. Д.). Обычно это проблема в настройке окна, например:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
| | (C: mu4e view) |
| | |
| | |
| | |
+--------------------+--------------------+
При добавлении крайнего срока в файл повестки дня в (A), org-deadline
будут использоваться (B) или (C), которые содержат электронные письма с информацией о дате / времени, которая мне нужна. Я бы предпочел, чтобы, если я звоню org-deadline
из (A), во всплывающем временном окне (D) содержался calendar
буфер, как показано ниже:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
+--------------------+ (C: mu4e view) |
| | |
| (D: calendar) | |
| | |
+--------------------+--------------------+
Итак: как можно заставить org-deadline
(и аналогичные функции) открыть новое временное окно в нижней части активного окна, а не захватить одно из других?
PS: я знаю о выделенных окнах , но они не кажутся мне лучшим подходом, так как я не столько хочу выделять буферы окнам, сколько хочу, чтобы одна функция не заняла одно из «коротких» из них.
display-buffer-alist
) Но я думаю, что здесь есть дополнительная складка, потому чтоorg-deadline
использование,calendar
которое само по себе делает все возможное, чтобы контролировать, какое окно использовать. см. комментарии вcalendar-basic-setup
.Ответы:
Следующие должны делать то, что вы хотите.
Календарь использует функцию
calendar-basic-setup
для отображения буфера календаря,calendar-basic-setup
в свою очередь использует,pop-to-buffer
который в свою очередь используетdisplay-buffer
для отображения буфера календаря. Теперьdisplay-buffer
он легко настраивается и позволяет нам предоставлять функции для отображения буфера, используя определенные переменные, здесь мы используем одну такую переменнуюdisplay-buffer-alist
.По сути, мы говорим, что emacs использует функцию
my-position-calendar-buffer
для отображения буфера, соответствующего регулярному выражению\*Calendar\*
. Функцияmy-position-calendar-buffer
ищет окно, отображающее повестку дня org, если оно не находит ни одного такого окна, она ничего не делает, в этом случаеdisplay-buffer
она попытается использовать некоторые другие функции для отображения буфера. В случае обнаружения окна, отображающего org-повестки дня, функция разбивает это окно по вертикали и отображает буфер календаря.Я не проверил это тщательно (только попробовал запустить календарь с видом на повестку дня и без представления на повестке дня), похоже, он работает, но могут быть некоторые ошибки.
источник
add-to-list
на display-buffer-alist. Использованиеsetq
переопределяет другие настройки.