Kuruluş kipinin gündeminde ücretsiz zaman bloklarını göster


12

Kuruluş modu gündemimde serbest zaman bloklarının nerede olduğunu bulmayı kolaylaştırmak istiyorum.

Örneğin, biri 9:30 - 10:30 ve diğer bir 11:15 - 12:30 saatleri arasında iki randevum varsa, bir bakışta 10:30 - 11:15 arası bloğun ücretsiz olduğunu görmek isterim.

Başka bir deyişle, boş zamanı Google takvimi gibi bir grafik gündeminde olduğu kadar kolay bir şekilde ayırt etmek istiyorum.

Boş zaman bloklarını görmenin kolay bir yolu var mı? Belli bir dakikadan daha uzun boş blokları renklendirmek için?


2
org-agenda-time-griddeğil ihtiyaçlarınız için yeterli? gnu.org/software/emacs/manual/html_node/org/…
kanun listesi

2
Şebeke yeterli değil, çünkü zaman meşgulken bile yukarı çıkıyor (örneğin, 09:30 - 10:30 arası bir toplantı varsa, 10:00 am'da bir ızgara hattı olacaktır). Meşgul ve meşgul olmayan zamanların ayırt edilmesini istiyorum.
scaramouche

1
Bu işlevsellik hakkında biraz daha düşündüm. Uygulamanın en kullanışlı ve en basitinin, belirli bir miktardan daha fazla olan zaman blokları için zaman bloğunun rengini (sadece zaman bloğunun adını, örneğin, 8: 00-9: 00) değiştirmek olduğuna inanıyorum. boş zaman (örneğin 15 dakikadan fazla). Hem renk hem de minimum boş zaman kullanıcı tarafından yapılandırılabilir olmalıdır.
scaramouche

3
@scaramouche, kuruluş modu posta listesindeki bir kullanıcı ( orgmode.org/worg/org-mailing-list.html ) denediğinizi sorar calfw( emacswiki.org/emacs/Calfw ).
daveloyall

2
@daveloyall, posta listesi tartışmasına işaret ettiğiniz için çok teşekkürler. Ben sadece calfw denedim (ve güzel!), Ama istediğim fonksiyona sahip görünmüyor (gün içinde açık saatleri görsel olarak tespit etmek için). Calfw + org'u denemek isteyenler için (şiddetle tavsiye edilir): Melpa'dan buzağı alın init.el, ekleyin (require 'calfw-org), dahil edin ve takvimi arayın M-x cfw:open-org-calendar.
scaramouche

Yanıtlar:


2

Bu sorudan dolayı org-agenda-add-time-grid-maybezaman çizelgesini yaratan fonksiyona baktım . Oraya gönderilen kod (benim tarafımdan yazılmayan), OP'nin açıklamasında istendiği gibi meşgulse, bir ızgara satırını kaldırır.

Senin gibi ben de bir şekilde görsel bir blok oluşturmak istedim. org-agenda-add-time-grid-maybeMichael Ekstrand'ın orijinal kodunu ve dezavantajını karıştırarak diğer iş parçacığında yayınladığım için aşağıdaki kodu buldum org-agenda-add-time-grid-maybe. Izgara çizgilerini farklı bir renkte (yüzü kullandığım an için) çıkarır org-archivedve süreleri farklı bir dize izler. Her ikisi de beğeninize göre değiştirilebilir.

(defun org-agenda-add-time-grid-maybe (list ndays todayp)
  "Add a time-grid for agenda items which need it.

LIST is the list of agenda items formatted by `org-agenda-list'.
NDAYS is the span of the current agenda view.
TODAYP is t when the current agenda view is on today."

  (catch 'exit
   (cond ((not org-agenda-use-time-grid) (throw 'exit list))
         ((and todayp (member 'today (car org-agenda-time-grid))))
         ((and (= ndays 1) (member 'daily (car org-agenda-time-grid))))
         ((member 'weekly (car org-agenda-time-grid)))
         (t (throw 'exit list)))
   (let* ((blocks (mapcar (lambda (x)
                            (let ((start (get-text-property 1 'time-of-day x))
                                  (dur (get-text-property 1 'duration x)))
                              (cond
                               ((and start dur) (cons start
                                                      (org-time-from-minutes
                                                       (truncate
                                                        (+ dur (org-time-to-minutes start))))))
                               (start start)
                               (t nil))))
                          list))
          (have (delq nil (mapcar
                           (lambda (x) (get-text-property 1 'time-of-day x))
                           list)))
          (string (nth 3 org-agenda-time-grid))
          (gridtimes (nth 1 org-agenda-time-grid))
          (req (car org-agenda-time-grid))
          (remove (member 'remove-match req))
          new time)
     (if (and (member 'require-timed req) (not have))
         ;; don't show empty grid
         (throw 'exit list))

     (while (setq time (pop gridtimes))
       (unless (and remove (member time have))
         (let* ((windows (delq nil blocks))
                (hit nil))
           (dolist (busy windows)
             (unless hit
               (when (and (>= time (car busy))
                          (< time (cdr busy)))
                 (setq hit t))))
           (setq time (replace-regexp-in-string " " "0" (format "%04s" time)))
           (if hit
               (progn
                 (push (org-agenda-format-item
                        (concat string " dito") string nil "" nil
                        (concat (substring time 0 -2) ":" (substring time -2)))
                       new)
                 (put-text-property 2 (length (car new)) 'face 'org-archived (car new)))
             (progn
               (push (org-agenda-format-item
                      nil string nil "" nil
                      (concat (substring time 0 -2) ":" (substring time -2)))
                     new)
               (put-text-property 2 (length (car new)) 'face 'org-time-grid (car new))))
           (setq hit nil))))

     (when (and todayp org-agenda-show-current-time-in-grid)
       (push (org-agenda-format-item
              nil org-agenda-current-time-string nil "" nil
              (format-time-string "%H:%M "))
             new)
       (put-text-property
        2 (length (car new)) 'face 'org-agenda-current-time (car new)))

     (if (member 'time-up org-agenda-sorting-strategy-selected)
         (append new list)
       (append list new)))))

(defun org-time-to-minutes (time)
  "Convert an HHMM TIME to minutes."
  (+ (* (/ time 100) 60) (% time 100)))

(defun org-time-from-minutes (minutes)
  "Convert a number of MINUTES to an HHMM time."
  (+ (* (/ minutes 60) 100) (% minutes 60)))

Açıkçası, defadvice kullanmak daha zarif olurdu, ama tam olarak nereye müdahale edeceğimi bulamadım. İşlevin kendisi her ızgara süresinden (girilir org-agenda-time-grid) geçer ve yüzler (yeni) dahil son ızgarayla yeni bir liste oluşturur.


1
Yararlı, ama umarım birisi doğrudan bir işlevi geçersiz kılmayı içermeyen bir çözüm bulur org-agenda.
holocronweaver

Kesinlikle katılıyorum! Ne yazık ki, elisp ve org-mode kodu hakkındaki bilgim çalışan bir defadvice bulmak için yeterli değil. Belki de, birisi "benim" kodunu kullanarak başka biri yardım edebilir.
Fabian
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.