Trennlinien in der Org-Agenda?


12

F : Kann ich Trennlinien in meine orgAgenda-Ansicht einfügen?

Mein Terminkalender kann etwas voll werden, wenn ich viele Dinge zu erledigen habe. Diese Geschäftigkeit hat den kontraproduktiven Effekt, dass ich es vermeide, auf meine Agenda zu schauen, weil sie mich ausflippt. Ich suche nach einer Möglichkeit, es optisch weniger entmutigend zu machen.

Eine Sache, die ich gerne hätte, ist die Möglichkeit, Trennlinien (z. B. nur eine Linie aus Bindestrichen) zwischen die Tagesordnungspunkte zu setzen, die:

  • haben sie eine frist heute,
  • ihre Frist überschritten haben (überfällige X Tage) und
  • eine anstehende Frist haben (fällig in X Tagen).

Ist es möglich, Trennlinien in die Agenda-Ansicht einzufügen? Wenn ja, wie würde ich das machen?


In einer halbbezogenen Frage mit dem Titel Wie erhalte ich die Rohdaten für eine Agenda im Organisationsmodus ohne Agenda-Ansicht? Ich habe eine Antwort gepostet, die zeigt, wie Sie die Rohdaten erhalten: emacs.stackexchange.com/a/12563/2287 Sie können diese Daten an Ihre Bedürfnisse anpassen , einschließlich, aber nicht beschränkt auf: replace-regexp-in-string(Hinzufügen von Trennlinien und / oder Zeilenumbrüchen als Sie wünschen); Sie können ein string-equalsoder mehrere bestimmte Kriterien oder andere Kriterien haben, die Sie suchen. Untersuchen Sie die vorhandenen Texteigenschaften mit Werten, um sich mit dem Lieferumfang vertraut zu machen, und verwenden Sie sie dann.
Gesetzesliste

Mit einer frischen Tasse Kaffee in der Hand dachte ich an eine einfachere Methode, die org-modeRohdaten zu verwenden, bei der nicht einmal die Daten manipuliert werden müssen, um Teile der Zeichenfolge zu ersetzen. Das heißt, überprüfen Sie einfach die Texteigenschaften und fügen Sie, wenn sie Ihren Kriterien entsprechen, vor oder nach dem Puffer eine Zeile ein, wie mapcarim Beispiel des obigen Links gezeigt. Dieses Projekt könnte einige Zeit denkbar Fideikommiß implementieren einen benutzerdefinierten erstellen org-agendaPuffern, und das Beispiel funktioniert nicht betrachten org-search-viewoder org-tags-view- dh nur org-agenda-list.
Gesetzesliste

Antworten:


2

org-agenda-block-separator

Das Trennzeichen zwischen den Blöcken in der Agenda. Wenn es sich um eine Zeichenfolge handelt, wird diese als Trennzeichen verwendet und eine neue Zeile hinzugefügt. Wenn es sich um ein Zeichen handelt, wird es wiederholt, um die Fensterbreite auszufüllen. Ist dies nicht der Fall, ist das Trennzeichen deaktiviert. In org-agenda-custom-commandsdiesen Adressen steht das Trennzeichen zwischen dem aktuellen und dem vorherigen Block.


org-agenda-compact-blocks

Nicht-Null bedeutet, dass die Blockagenda kompakter wird. Dies geschieht global, indem Zeilen wie der Name des Zeitplans und die Wochennummer oder die Trennlinien weggelassen werden.


1
Danke, aber können Sie ein Beispiel geben, wie man dies in einer Agenda-Ansicht verwenden würde?
Dan

1

Sie können mehrere Blöcke in einer Agenda-Ansicht haben, von denen jeder seine eigene Suche hat, indem Sie einfach mehrere benutzerdefinierte Befehle verketten:

(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")))
         ))))

Sie können auch eine Liste von Optionen am Ende einfügen, die für alle Blöcke gelten.

Dieser Nachteil besteht darin, dass jeder Block separat berechnet wird, sodass die Erstellung einer einzelnen Agenda dreimal so lange dauert


1

Das folgende Beispiel zeigt, wie Sie die Texteigenschaften der von generierten Elemente untersuchen org-agenda-listund die Zeichenfolge anhand bestimmter Kriterien ändern können. In diesem Beispiel wird der Wert der Texteigenschaft ts-dateabgerufen und mit dem aktuellen Datum verglichen. Wenn er überfällig ist, fügen wir hinzu OLD:. Wenn es aktuell ist, fügen wir hinzu CURRENT:, wenn es in Zukunft ist, fügen wir hinzu FUTURE:. Das Originalplakat kann in diesem Beispiel eine neue Linie und / oder eine Trennlinie an ausgewählten Stellen hinzufügen. Die Anpassung kann abhängig von den Sortierkriterien variieren, die vom Originalposter in org-agenda-sorting-strategyusw. ausgewählt wurden.

In diesem Beispiel wurde die Funktion org-agenda-finalize-entriesim unteren Bereich zwischen den mit ;; BEGIN modificationund bezeichneten Abschnitten geändert ;; 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")))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.