Linee di divisione nell'agenda dell'organizzazione?


12

D : posso mettere le linee di divisione nella mia orgvista agenda?

Il mio buffer di agenda può essere un po 'occupato quando ho molte cose dovute. Questa frenesia ha l'effetto controproducente di farmi evitare di guardare alla mia agenda perché mi fa impazzire. Sto cercando un modo per renderlo visivamente meno scoraggiante.

Una cosa che mi piacerebbe è essere in grado di mettere linee di divisione (ad esempio, solo una linea di trattini) tra gli argomenti dell'agenda che:

  • avere una scadenza oggi,
  • sono scaduti (scaduti X giorni) e
  • hanno una scadenza imminente (prevista tra X giorni).

È possibile mettere le linee di divisione nella vista agenda? Se sì, come lo farei?


In una domanda semi-correlata intitolata Come ottenere i dati non elaborati per un'agenda in modalità organizzazione senza una vista dell'agenda? , Ho pubblicato una risposta che dimostra come ottenere i dati non elaborati : emacs.stackexchange.com/a/12563/2287 È possibile modificare tali dati in base alle proprie esigenze, tra cui, a titolo esemplificativo ma non esaustivo: replace-regexp-in-string(aggiungere linee di divisione e / o newline come desideri); puoi avere uno string-equalso corrisponde a determinati criteri o a qualsiasi altro criterio che cerchi. Esaminare le proprietà di testo esistenti con i valori per acquisire familiarità con ciò che è incluso immediatamente e quindi utilizzarle.
elenco delle leggi del

Con una tazza di caffè fresca in mano, ho pensato a un metodo più semplice usando i org-modedati grezzi che non comporta nemmeno la manipolazione dei dati con la sostituzione di parti della stringa. Vale a dire, basta esaminare le proprietà del testo e se corrispondono ai propri criteri, inserire qualcosa come una riga prima o dopo mentre il buffer viene popolato mapcardall'esempio del link sopra. Questo progetto potrebbe richiedere un po 'di tempo per essere implementato per creare un org-agendabuffer personalizzato e l'esempio non contempla org-search-viewo org-tags-view- vale a dire, solo org-agenda-list.
elenco delle leggi del

Risposte:


2

org-agenda-block-separator

Il separatore tra i blocchi nell'agenda. Se questa è una stringa, verrà utilizzata come separatore, con l'aggiunta di una nuova riga. Se è un personaggio, verrà ripetuto per riempire la larghezza della finestra. Se nullo, il separatore è disabilitato. In org-agenda-custom-commandsquesto indirizza il separatore tra il blocco corrente e quello precedente.


org-agenda-compact-blocks

Un valore diverso da zero rende l'agenda del blocco più compatta. Questo viene fatto a livello globale tralasciando linee come il nome dell'intervallo dell'agenda e il numero della settimana o le linee di separazione.


1
Grazie, ma puoi fare un esempio di come si userebbe questo in una vista dell'agenda?
Dan

1

Puoi avere più blocchi in una vista agenda, ognuno con la propria ricerca concatenando diversi comandi personalizzati:

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

È inoltre possibile posizionare un elenco di opzioni alla fine che verranno applicate a tutti i blocchi.

Questo svantaggio è che ogni blocco viene calcolato separatamente, quindi questo richiede 3 volte di più per essere generato come una singola agenda


1

Di seguito è riportato un esempio di come esaminare le proprietà di testo degli elementi generati org-agenda-liste modificare la stringa in base a determinati criteri. In questo esempio, il valore della proprietà text ts-dateviene ottenuto e confrontato con la data corrente - se è scaduto, aggiungiamo OLD:; se è attuale, aggiungiamo CURRENT:, se è il suo futuro, aggiungiamo FUTURE:. Il poster originale può personalizzare questo esempio aggiungere una nuova linea e / o una linea di divisione in posizioni selezionate. La personalizzazione può variare in base ai criteri di ordinamento scelti dal poster originale in org-agenda-sorting-strategy, ecc.

In questo esempio, la funzione org-agenda-finalize-entriesè stata modificata nella parte inferiore tra le sezioni etichettate ;; BEGIN modificatione ;; 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")))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.