Dies scheint den Trick zu tun:
(defvar my/org-habit-show-graphs-everywhere nil
"If non-nil, show habit graphs in all types of agenda buffers.
Normally, habits display consistency graphs only in
\"agenda\"-type agenda buffers, not in other types of agenda
buffers. Set this variable to any non-nil variable to show
consistency graphs in all Org mode agendas.")
(defun my/org-agenda-mark-habits ()
"Mark all habits in current agenda for graph display.
This function enforces `my/org-habit-show-graphs-everywhere' by
marking all habits in the current agenda as such. When run just
before `org-agenda-finalize' (such as by advice; unfortunately,
`org-agenda-finalize-hook' is run too late), this has the effect
of displaying consistency graphs for these habits.
When `my/org-habit-show-graphs-everywhere' is nil, this function
has no effect."
(when (and my/org-habit-show-graphs-everywhere
(not (get-text-property (point) 'org-series)))
(let ((cursor (point))
item data)
(while (setq cursor (next-single-property-change cursor 'org-marker))
(setq item (get-text-property cursor 'org-marker))
(when (and item (org-is-habit-p item))
(with-current-buffer (marker-buffer item)
(setq data (org-habit-parse-todo item)))
(put-text-property cursor
(next-single-property-change cursor 'org-marker)
'org-habit-p data))))))
(advice-add #'org-agenda-finalize :before #'my/org-agenda-mark-habits)
Zur weiteren Erläuterung scheint es, dass jede Agenda-Funktion aufgerufen wird,
org-agenda-finalize
sobald der Agenda-Puffer größtenteils erstellt wurde, und dies ist die Funktion, die die Gewohnheitsgraphen hinzufügt. Darüber hinaus wird das Diagramm nur zu jedem Element hinzugefügt, das über die Texteigenschaft verfügt
org-habit-p
(die die Details codiert, die im Diagramm angezeigt werden). Alles, was wir tun müssen, ist, die Gewohnheiten irgendwann vorher mit diesen Informationen zu versehen.
Außerdem habe ich mich dafür entschieden, dieses Verhalten von einer Variablen abhängig zu machen, da dies es Ihnen ermöglichen sollte, die Variable in benutzerdefinierten Agenda-Befehlen festzulegen, wenn nur einige Agenden Gewohnheiten anzeigen sollen. Ich habe das nicht getestet, aber es gibt keinen Grund, warum es nicht funktionieren sollte.
EDIT: Meine ursprüngliche Lösung hatte Probleme mit Blockagenden. Es stellt sich heraus, dass dies org-agenda-finalize
einmal für jeden Block und dann einmal für die gesamte Agenda aufgerufen wird. Wenn dieser letzte Aufruf erfolgt, ist die Agenda schreibgeschützt, sodass ein Fehler ausgegeben wird, wenn die Agenda Gewohnheiten enthält. Da die gesamte Arbeit zu diesem Zeitpunkt bereits erledigt ist, ist es ohnehin nicht sinnvoll, die Agenda erneut zu scannen, und ich habe gerade eine Überprüfung für die Eigenschaft 'org-series' hinzugefügt, die nach den Blockaufrufen zur gesamten Agenda hinzugefügt wird und vor dem letzten schreibgeschützten Aufruf.