Linie podziału w porządku obrad organizacji?


12

P : Czy mogę umieścić linie podziału w orgwidoku planu?

Mój bufor programu może być trochę zajęty, gdy mam wiele rzeczy do zrobienia. Ta zarozumiałość wywołuje efekt przeciwny do zamierzonego, sprawiając, że unikam patrzenia na mój plan, ponieważ mnie to przeraża. Szukam sposobu, aby wizualnie było mniej zniechęcające.

Jedną rzeczą, którą chciałbym, to móc umieszczać linie podziału (np. Tylko linię myślników) między elementami programu, które:

  • mieć dzisiaj termin,
  • minął termin (zaległe X dni), oraz
  • mieć zbliżający się termin (należny za X dni).

Czy można umieścić linie podziału w widoku planu? Jeśli tak, jak mam to zrobić?


W częściowo powiązanym pytaniu zatytułowanym Jak uzyskać nieprzetworzone dane dla planu trybu organizacji bez widoku planu? , Opublikowałem odpowiedź pokazującą, jak uzyskać surowe dane: emacs.stackexchange.com/a/12563/2287 Możesz modyfikować te dane, aby dopasować je do swoich potrzeb, w tym między innymi: replace-regexp-in-string(dodaj linie podziału i / lub nowe linie jako pragniesz); możesz mieć string-equalskryteria spełniające określone kryteria lub dowolne inne kryteria. Sprawdź istniejące właściwości tekstu z wartościami, aby zapoznać się z tym, co jest zawarte w pudełku, a następnie użyj ich.
prawnik

Mając świeżą filiżankę kawy w ręku, pomyślałem o łatwiejszej metodzie wykorzystującej org-modesurowe dane, która nawet nie wymaga manipulowania danymi przy zamianie jakichkolwiek części ciągu. Tzn. Po prostu sprawdź właściwości tekstu i jeśli pasują one do twoich kryteriów, wstaw coś przed lub po linii, ponieważ bufor jest wypełniany przez mapcarprzykład w powyższym linku. Ten projekt może wykluczyć zawierać pewien czas, aby wdrożyć w celu stworzenie własnego org-agendabufora, a przykładem robi nie kontemplować org-search-viewlub org-tags-view- czyli tylko org-agenda-list.
prawnik

Odpowiedzi:


2

org-agenda-block-separator

Separator między blokami w porządku obrad. Jeśli jest to ciąg znaków, zostanie użyty jako separator z dodaną nową linią. Jeśli jest to znak, zostanie powtórzony, aby wypełnić szerokość okna. Jeśli zero, separator jest wyłączony. W org-agenda-custom-commandstym adresie znajduje się separator między bieżącym a poprzednim blokiem.


org-agenda-compact-blocks

Brak wartości oznacza, że ​​plan bloków jest bardziej zwarty. Odbywa się to na całym świecie, pomijając wiersze, takie jak nazwa zakresu programu i numer tygodnia lub linie separatora.


1
Dzięki, ale czy możesz podać przykład, w jaki sposób można by tego użyć w widoku planu?
Dan

1

Możesz mieć wiele bloków w widoku planu, każdy z własnym wyszukiwaniem, po prostu łącząc kilka niestandardowych poleceń:

(setq org-agenda-custom-commands
      '(("D" "Deadlines"
         ((tags-todo "DEADLINE=\"<today>\""
                     ((org-agenda-overriding-header "Due Today"))
                     )
          (tags-todo "DEADLINE<\"<today>\""
                     ((org-agenda-overriding-header "You're Late")))
          (tags-todo "+DEADLINE<\"<+5d>\"+DEADLINE>\"<today>\""
                     ((org-agenda-overriding-header "Better get on it")))
         ))))

Możesz także umieścić na końcu listę opcji, które będą miały zastosowanie do wszystkich bloków.

Wadą jest to, że każdy blok jest obliczany osobno, więc wygenerowanie go jako pojedynczego programu zajmuje 3 razy dłużej


1

Poniżej znajduje się przykład sprawdzania właściwości tekstowych elementów generowanych przez org-agenda-listi modyfikowania łańcucha w oparciu o określone kryteria. W tym przykładzie wartość właściwości text ts-datejest uzyskiwana i porównywana z bieżącą datą - jeśli jest opóźniona, dodajemy OLD:; jeśli jest aktualny, dodajemy CURRENT:, jeśli jego przyszłość, dodajemy FUTURE:. Oryginalny plakat może dostosować ten przykład, dodając nową linię i / lub linię podziału w wybranych lokalizacjach. Dostosowanie może się różnić w zależności od kryteriów sortowania wybranych przez oryginalny plakat w org-agenda-sorting-strategyitp.

W tym przykładzie funkcja org-agenda-finalize-entrieszostała zmodyfikowana w pobliżu dołu między sekcjami oznaczonymi ;; BEGIN modificationi ;; END modification.

(require 'org-agenda)

(defun org-agenda-finalize-entries (list &optional type)
  "Sort, limit and concatenate the LIST of agenda items.
The optional argument TYPE tells the agenda type."
  (let ((max-effort (cond ((listp org-agenda-max-effort)
         (cdr (assoc type org-agenda-max-effort)))
        (t org-agenda-max-effort)))
  (max-todo (cond ((listp org-agenda-max-todos)
       (cdr (assoc type org-agenda-max-todos)))
      (t org-agenda-max-todos)))
  (max-tags (cond ((listp org-agenda-max-tags)
       (cdr (assoc type org-agenda-max-tags)))
      (t org-agenda-max-tags)))
  (max-entries (cond ((listp org-agenda-max-entries)
          (cdr (assoc type org-agenda-max-entries)))
         (t org-agenda-max-entries))) l)
    (when org-agenda-before-sorting-filter-function
      (setq list
      (delq nil
      (mapcar
       org-agenda-before-sorting-filter-function list))))
    (setq list (mapcar 'org-agenda-highlight-todo list)
    list (mapcar 'identity (sort list 'org-entries-lessp)))
    (when max-effort
      (setq list (org-agenda-limit-entries
      list 'effort-minutes max-effort 'identity)))
    (when max-todo
      (setq list (org-agenda-limit-entries list 'todo-state max-todo)))
    (when max-tags
      (setq list (org-agenda-limit-entries list 'tags max-tags)))
    (when max-entries
      (setq list (org-agenda-limit-entries list 'org-hd-marker max-entries)))
    ;; BEGIN modification
    (setq list
      (mapcar
        (lambda (string)
          (let* (
              (current-date (time-to-days (current-time)))
              (ts-date (get-text-property 0 'ts-date string)) )
            (if ts-date
              (cond
                ((< ts-date current-date)
                  (message "The task dated %s is overdue." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "OLD:  " string))
                ((= ts-date current-date)
                  (message "The task dated %s is due today." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "CURRENT:  " string))
                ((> ts-date current-date)
                  (message "The task dated %s is not due yet." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "FUTURE:  " string)))
              string)))
        list))
    ;; END modification
    (mapconcat 'identity list "\n")))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.