Bir tamponun hangi pencerede görüntüleneceğini nasıl kontrol edebilirim?


13

S:org-deadline Takvimi görüntülemek için hangi pencerenin kullanıldığını nasıl kontrol edebilirim ?

org-deadlinecalendarbir son tarih belirlerken geçici olarak arabelleği bir pencerede açar ve tamamladıktan sonra tekrar kapatır. Yalnızca bir pencere olduğunda, mevcut çerçevenin altına yeni bir pencere açılır. Birden fazla pencere olduğunda get-lru-window, mevcut pencerelerden birini - sanırım - gibi bir şeyle - seçerim .

İkincisi, son tarihi (tarih, saat vb.) Ayarlamak için ihtiyacım olan bilgilere sahip diğer pencerelerden birini alırsa sorunludur. Bu, genellikle bir pencere kurulumunda aşağıdaki gibi bir sorundur:

+--------------------+--------------------+
|                    |                    |
|                    |  (B: mu4e header)  |
|                    |                    |
|                    +--------------------+
|  (A: agenda file)  |                    |
|                    |                    |
|                    |                    |
|                    |  (C: mu4e view)    |
|                    |                    |
|                    |                    |
|                    |                    |
+--------------------+--------------------+

(A) 'daki gündem dosyasına bir son tarih eklerken org-deadline, ihtiyacım olan tarih / saat bilgilerine sahip e-postaları içeren (B) veya (C)' yi devralır. Çok tercih ederim, eğer org-deadline(A) 'dan çağırırsam, calendartamponu aşağıdaki gibi içerecek geçici bir pencere (D) açılır :

+--------------------+--------------------+
|                    |                    |
|                    |  (B: mu4e header)  |
|                    |                    |
|                    +--------------------+
|  (A: agenda file)  |                    |
|                    |                    |
|                    |                    |
+--------------------+  (C: mu4e view)    |
|                    |                    |
|   (D: calendar)    |                    |
|                    |                    |
+--------------------+--------------------+

Öyleyse: biri org-deadlineetkin pencerenin altında diğerinden birini devralmak yerine yeni, geçici bir pencere açmaya nasıl zorlar (ve benzer işlevler)?

PS: Ben özel pencerelerin farkındayım , ama bana en iyi yaklaşım olarak grev değil çünkü o kadar çok değil çünkü bir işlevi "kısa" birini devralmak kaçınmak istiyorum çünkü pencerelere tamponlar ayırmak istiyorum olanlar.


Umarım birisi yeni, geçici pencereler üzerinde iyi kontrol sağlayan bir cevapla geri gelir. ( Popwin.el ? display-buffer-alist?) Ama çünkü burada ek bir kırışık olduğunu düşünüyorum org-deadlinekullanımlara calendarkendisi neyi pencere kullanımına kontrolüne yolunda dışına yol gidiyor. cf'deki yorumlar calendar-basic-setup.
purple_arrows

Yanıtlar:


10

Aşağıdaki istediklerinizi yapmalısınız.

(defun my-window-displaying-agenda-p (window)
    (equal (with-current-buffer (window-buffer window) major-mode)
        'org-agenda-mode)) 

(defun my-position-calendar-buffer (buffer alist)
  (let ((agenda-window (car (remove-if-not #'my-window-displaying-agenda-p (window-list)))))
    (when agenda-window
      (let ((desired-window (split-window agenda-window nil 'below)))
        (set-window-buffer desired-window  buffer)
        desired-window))))

(add-to-list 'display-buffer-alist (cons "\\*Calendar\\*" (cons #'my-position-calendar-buffer nil)))

Takvim calendar-basic-setup, takvim arabelleğini görüntülemek için bu işlevi calendar-basic-setupkullanır, pop-to-bufferbunun karşılığında display-buffertakvim arabelleğini görüntülemek için kullanır . Şimdi display-bufferson derece özelleştirilebilir ve display-buffer-alistburada böyle bir değişken kullandığımız belirli değişkenleri kullanarak bir tampon görüntülemek için işlevler sağlar .

Temel olarak my-position-calendar-buffer, regexp ile eşleşen bir tampon görüntülemek için işlevi kullanmak için emacs diyoruz \*Calendar\*. İşlev my-position-calendar-buffer, kuruluş gündemini gösteren bir pencere arar, eğer böyle bir pencere bulamazsa, hiçbir şey yapmaz, bu durumda display-bufferarabelleği görüntülemek için başka bazı işlevleri dener. Kuruluş gündemini görüntüleyen bir pencere bulunması durumunda, işlev bu pencereyi dikey olarak böler ve takvim arabelleğini görüntüler.

Bunu tam anlamıyla test etmedim (sadece ajanda görünümü ve gündem görünümü olmadan takvime başlamayı denedim), çalışıyor gibi görünüyor ama bazı hatalar olabilir.


1
add-to-listDisplay-buffer-alist'te olduğu gibi bir şey kullanılması tercih edilir . Kullanmak setqdiğer özelleştirmeleri geçersiz kılar.
Malabarba

@Malabarba öneri için teşekkürler, düzeltildi!
Iqbal Ansari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.