Jusqu'à récemment j'avais un tâche "Traitement courriels" qui concernait la lecture des courriels et leur traitement à la mode GTD (Getting Things Done) : lecture des courriels, suppression, réponse immédiate si ça prend grosso modo moins de 2 minutes. Si le traitement nécessite plus de temps (réponse longue, recherche à faire...) je créais une tâche à la volée (avec org-capture).

Cependant cette méthode avait comme point faible de ne pas permettre de distinguer le temps passé dans le traitement des courriels des différents groupes (courriels personnels, courriels April...). Bien sûr il y a la possibilité de créer plusieurs tâches pour le traitement de différents groupes de courriels. Et avant de lire tel groupe on déclenche l'horloge de la tâche correspondre. À la longue ça peut devenir pénible. Alors, autant profiter du fait que j'utilise aussi Emacs pour lire mes courriels (avec Gnus) pour essayer d'automatiser ce processus.

L'idée serait : lors de la lecture de tel groupe de courriels l'horloge de la tâche correspondante est déclenchée automatiquement.

Je suis loin d'être un spécialiste en Lisp mais voici le bout de code qui répond pour le moment à mon besoin. J'utilise pour cela les hook d'entrée et de sortie d'un groupe Gnus. Bien sûr il y a encore du boulot pour rendre ça propre et générique.

(defun my-org-clock-in-mails ()
(interactive)

(if (not (org-clock-is-active))

    (cond (
       (string-match "people.mad" gnus-newsgroup-name)

       (setq pos (org-find-exact-headline-in-buffer "STARTED Traiter courrielss personnels" "timesheet.org"))
       (org-mark-ring-push (point))
       (org-goto-marker-or-bmk pos)
       (org-clock-in)
       )

       ((string-match "list.april.*" gnus-newsgroup-name)

       (setq pos (org-find-exact-headline-in-buffer "STARTED Traiter courriels April" "timesheet.org"))
       (org-mark-ring-push (point))
       (org-goto-marker-or-bmk pos)
       (org-clock-in))

       ((string-match "list.rmll.*" gnus-newsgroup-name)

       (setq pos (org-find-exact-headline-in-buffer "STARTED Traiter courriels RMLL" "timesheet.org"))
       (org-mark-ring-push (point))
       (org-goto-marker-or-bmk pos)
       (org-clock-in))

       (t

       (setq pos (org-find-exact-headline-in-buffer "STARTED Traiter autre courriels mails" "timesheet.org"))
       (org-mark-ring-push (point))
       (org-goto-marker-or-bmk pos)
       (org-clock-in))
       )
)
)

(add-hook 'gnus-select-group-hook 'my-org-clock-in-mails)

(defun my-org-clock-out-mails ()
(interactive)

(if (and (org-clock-is-active) (not (string-match "00" (format-time-string "%M:%S" (time-since org-clock-start-time)))) (string-match "Traiter.*" org-clock-current-task))
    (org-clock-out))
)


(add-hook 'gnus-exit-group-hook 'my-org-clock-out-mails)