Lignes de séparation dans l'agenda de l'organisation?

12

Q : puis-je mettre des lignes de séparation dans la orgvue de mon agenda?

Mon tampon d'agenda peut devenir un peu occupé quand j'ai beaucoup de choses à faire. Cette activité a l'effet contre-productif de me faire éviter de regarder mon agenda parce qu'il me fait flipper. Je cherche un moyen de le rendre visuellement moins intimidant.

Une chose que j'aimerais est de pouvoir mettre des lignes de séparation (par exemple, juste une ligne de tirets) entre les points de l'ordre du jour qui:

  • avoir une date limite aujourd'hui,
  • ont dépassé leur délai (X jours en retard), et
  • avoir une date limite à venir (due dans X jours).

Est-il possible de mettre des lignes de séparation dans la vue de l'agenda? Si oui, comment ferais-je cela?

Dan
la source
Dans une question semi-connexe intitulée Comment obtenir les données brutes pour un agenda en mode organisationnel sans vue d'agenda? , J'ai publié une réponse montrant comment obtenir les données brutes: emacs.stackexchange.com/a/12563/2287 Vous pouvez modifier ces données en fonction de vos besoins, y compris, mais sans s'y limiter: replace-regexp-in-string(ajouter des lignes de séparation et / ou des nouvelles lignes comme tu désires); vous pouvez avoir un string-equalsou correspond à certains critères ou à tout autre critère que vous recherchez. Examinez les propriétés de texte existantes avec des valeurs pour vous familiariser avec ce qui est inclus prêt à l'emploi, puis utilisez-les.
lawlist
Avec une tasse de café fraîche à la main, j'ai pensé à une méthode plus simple utilisant les org-modedonnées brutes qui n'implique même pas de manipuler les données en remplaçant toutes les parties de la chaîne. C'est-à-dire, examinez simplement les propriétés du texte et si elles correspondent à vos critères, insérez quelque chose comme une ligne avant ou après que le tampon est rempli par le mapcardans l'exemple du lien ci-dessus. Ce projet pourrait imaginer un certain temps de mise en œuvre pour créer un org-agendatampon personnalisé , et l'exemple ne contemple pasorg-search-view ou org-tags-view- c'est-à-dire seulement org-agenda-list.
lawlist

Réponses:

2

org-agenda-block-separator

Le séparateur entre les blocs dans l'agenda. S'il s'agit d'une chaîne, elle sera utilisée comme séparateur, avec une nouvelle ligne ajoutée. S'il s'agit d'un caractère, il sera répété pour remplir la largeur de la fenêtre. Si nul, le séparateur est désactivé. Dans org-agenda-custom-commandscette adresse le séparateur entre le bloc actuel et le bloc précédent.


org-agenda-compact-blocks

Non nul signifie que l'agenda global est plus compact. Cela se fait globalement en omettant des lignes comme le nom de la plage d'agenda et le numéro de semaine ou les lignes de séparation.

Hamster Pishy
la source
1
Merci, mais pouvez-vous donner un exemple de la façon dont on pourrait utiliser cela dans une vue d'agenda?
Dan
1

Vous pouvez avoir plusieurs blocs dans une vue d'agenda, chacun avec sa propre recherche en concaténant simplement plusieurs commandes personnalisées:

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

Vous pouvez également placer à la fin une liste d'options qui s'appliqueront à tous les blocs.

Cet inconvénient est que chaque bloc est calculé séparément, ce qui prend 3 fois plus de temps à générer qu'un seul agenda

erikstokes
la source
1

Voici un exemple de la façon d'examiner les propriétés de texte des éléments générés par org-agenda-listet de modifier la chaîne en fonction de certains critères. Dans cet exemple, la valeur de la propriété text ts-dateest obtenue et comparée à la date actuelle - si elle est en retard, nous ajoutons OLD:; si elle est actuelle, nous ajoutons CURRENT:, si son avenir, nous ajoutons FUTURE:. L'affiche originale peut personnaliser cet exemple, ajouter une nouvelle ligne et / ou une ligne de séparation à certains emplacements. La personnalisation peut varier en fonction des critères de tri choisis par l'affiche originale dans le org-agenda-sorting-strategy, etc.

Dans cet exemple, la fonction org-agenda-finalize-entriesa été modifiée vers le bas entre les sections étiquetées ;; BEGIN modificationet ;; 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")))
liste des lois
la source