P: Jak mogę kontrolować, które okno org-deadline
używa do wyświetlania kalendarza?
org-deadline
tymczasowo wyświetla calendar
bufor w oknie podczas ustawiania terminu, a następnie zamyka go ponownie po zakończeniu. Gdy jest tylko jedno okno, pojawia się nowe okno na dole istniejącej ramki. Kiedy jest wiele okien, wybiera jedno - przypuszczam z czymś podobnym get-lru-window
- z dostępnych okien.
To ostatnie jest problematyczne, jeśli przejmuje jedno z pozostałych okien, które zawierają informacje potrzebne do ustalenia terminu (data, godzina itp.). Jest to zwykle problem w konfiguracji okna, takiej jak:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
| | (C: mu4e view) |
| | |
| | |
| | |
+--------------------+--------------------+
Dodając termin do pliku agendy w (A), org-deadline
przejmie (B) lub (C), które zawierają e-maile zawierające potrzebne mi informacje o dacie / godzinie. Wolałbym, że jeśli dzwonię org-deadline
z (A), wyskakuje tymczasowe okno (D) zawierające calendar
bufor, jak poniżej:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
+--------------------+ (C: mu4e view) |
| | |
| (D: calendar) | |
| | |
+--------------------+--------------------+
Więc: w jaki sposób zmusić org-deadline
(i analogiczne funkcje), by otworzyło nowe, tymczasowe okno na dole aktywnego okna, zamiast przejmować jedno z pozostałych?
PS: Zdaję sobie sprawę z dedykowanych okien , ale nie wydają mi się najlepszym podejściem, ponieważ nie chodzi o to, że chcę poświęcić bufory oknom, ponieważ chcę uniknąć przejęcia funkcji przez jeden z „krótkich” te.
display-buffer-alist
) Ale myślę, że tutaj jest dodatkowy zmarszczek, ponieważorg-deadline
zastosowania,calendar
które same w sobie wykraczają daleko poza to, aby kontrolować, którego okna użyć. por. komentarze wcalendar-basic-setup
.Odpowiedzi:
Następujące powinny robić, co chcesz.
Kalendarz używa funkcji
calendar-basic-setup
do wyświetlania bufora kalendarza,calendar-basic-setup
z kolei używa,pop-to-buffer
który z kolei używadisplay-buffer
do wyświetlania bufora kalendarza. Terazdisplay-buffer
jest wysoce konfigurowalny i pozwala nam udostępniać funkcje do wyświetlania bufora przy użyciu pewnych zmiennych, których używamy tutaj jedną taką zmiennądisplay-buffer-alist
.Mówimy w zasadzie, że emacs używa funkcji
my-position-calendar-buffer
do wyświetlenia bufora pasującego do wyrażenia regularnego\*Calendar\*
. Funkcjamy-position-calendar-buffer
wyszukuje okno wyświetlające porządek obrad, jeśli nie znajdzie takiego okna, nie robi nic, w takim przypadkudisplay-buffer
spróbuje wyświetlić inne funkcje do wyświetlenia bufora. W przypadku znalezienia okna wyświetlającego porządek obrad, funkcja dzieli okno w pionie i wyświetla bufor kalendarza.Nie przetestowałem tego dokładnie (po prostu spróbowałem uruchomić kalendarz z widokiem agendy i bez widoku agendy), wydaje się, że działa, ale mogą być pewne błędy.
źródło
add-to-list
na display-buffer-alist. Używaniesetq
zastępuje inne dostosowania.