Nascondi gli elementi con un determinato tag nell'agenda in base all'ora del giorno


8

È possibile nascondere gli elementi con un determinato tag dopo a un'ora specifica del giorno? Ad esempio, mi piacerebbe che dopo le 17:00 e nei fine settimana,: LAVORO: gli articoli non compaiano nell'agenda.

EDIT: mi occupo di elementi programmati e mi affido alla funzione elenco agenda-org.


Sì, ma sarà un po 'lento se hai molte scadenze e / o programmate. Modifica il tuo post (o aggiungi un commento) per specificare se hai a che fare con scadenze o programmate, e se entrambi, quale vuoi valutare. Nella mia mente, sto pensando a un'usanza org-agenda-skip-function. Inoltre, si prega di specificare quale dei tre (3) funzioni principali si fa affidamento su - org-agenda-list, org-search-viewo org-tags-view.
elenco delle leggi

Risposte:


2

È possibile personalizzare ignorando voci specifiche org-agendautilizzando una funzione di salto . Questa è una funzione (o modulo lisp) che verrà valutata in ciascun titolo e dovrebbe restituire nil(per non saltare il titolo) o il punto del titolo successivo da considerare (che è in genere il titolo successivo, ma potrebbe essere, ad esempio, il prossimo fratello per accelerare la ricerca).

In questo caso, abbiamo solo bisogno di una funzione per saltare il titolo se ha un certo tag (prendine quelli con org-get-tags-at) e lo (current-time)è dopo una certa ora:

(defun skip-tag-after (tag hour)
  (let* ((next-headline (save-excursion
                          (or (outline-next-heading) (point-max))))
        (current-headline (or (and (org-at-heading-p)
                                   (point))
                              (save-excursion (org-back-to-heading))))
        ;; (now (decode-time (current-time)))
        (target (decode-time (current-time)))
        (day (nth 6 target))
        )
    (setcar (last target 7) hour)
    (setcar (last target 8) 0)
    (if (and (member tag (org-get-tags-at current-headline))
             (or (eq day 0)
                 (eq day 6)
                 (time-less-p (apply #'encode-time target) (current-time))))
            next-headline
            nil)))

Questo non considera il giorno della settimana, ma quella logica

Puoi (setq (setq org-agenda-skip-function-global '(skip-tag-after "WORK" 17))saltare tali titoli a livello globale in ogni agenda, oppure impostarlo impostato org-agenda-skip-functionlocalmente in a in modo org-agenda-custom-commandda influenzare solo quell'agenda.


Cosa succede se ho diversi tag di questo tipo: uno è per l'orario di lavoro, un altro è per le serate 7 giorni alla settimana, ecc.? Come posso combinare il filtro su tutti loro?
Alexander Shcheblikin,

È possibile utilizzare un modulo lisp come valore, org-agenda-skip-functionad esempio impostandolo su(or (skip-tags-after "WORK" 17) (skip-tags-after "HOME" 9))
erikstokes

3

Una soluzione molto semplice sarebbe quella di creare una vista (o viste) dell'agenda speciale che usi solo la sera e il fine settimana.

Per fare un esempio molto semplice, è possibile personalizzare org-agenda-custom-commandsaggiungendo qualcosa di simile ("x" "No Work" tags-todo "-work" nil). Quindi la sera e il fine settimana puoi visualizzare la tua agenda generale C-c a x.


Questa è la mia configurazione attuale e funziona ma stavo considerando un'alternativa.
David Gagnon,

2
org-agenda-custom-commandsti permette anche di impostare funzioni personalizzate ... Dovrebbe essere sicuramente possibile fare quello che vuoi in quel modo (un semplice if), ma non so abbastanza elisp da mostrarti esattamente.
Brian Z,
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.