Esto parece hacer el truco:
(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)
Para explicar más, parece que cada función de agenda llama
org-agenda-finalize
una vez que el búfer de agenda se ha construido principalmente, y esta es la función que agrega los gráficos de hábitos. Además, solo agrega el gráfico a cada elemento que tiene la
org-habit-p
propiedad de texto (que codifica los detalles que mostrará el gráfico). Entonces, todo lo que necesitamos hacer es revisar y etiquetar los hábitos con esta información en algún momento antes de eso.
Además, elegí hacer que este comportamiento dependa de una variable porque esto debería permitirle establecer la variable en comandos de agenda personalizados, si desea que solo algunas agendas muestren hábitos. No lo he probado, pero no hay razón para que no funcione.
EDITAR: Mi solución original tenía problemas con las agendas de bloque. Resulta que org-agenda-finalize
se llama una vez para cada bloque, y luego una vez para la agenda en su conjunto. Cuando ocurre esa última llamada, la agenda es de solo lectura, por lo que se genera un error si la agenda contiene algún hábito. Dado que todo el trabajo ya se ha realizado para ese punto, no tiene sentido escanear la agenda de nuevo de todos modos, y acabo de agregar un cheque para la propiedad 'org-series, que se agrega a toda la agenda después de las llamadas por bloque y antes de la última llamada de solo lectura.