Ini sepertinya melakukan trik:
(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)
Untuk menjelaskan lebih lanjut, tampak bahwa setiap fungsi agenda memanggil
org-agenda-finalize
setelah buffer agenda sebagian besar dibangun, dan ini adalah fungsi yang menambahkan grafik kebiasaan. Selain itu, itu hanya menambahkan grafik ke setiap item yang memiliki
org-habit-p
properti teks (yang mengkodekan detail yang akan ditampilkan grafik). Jadi yang perlu kita lakukan adalah memeriksa dan menandai kebiasaan dengan informasi ini di beberapa titik sebelum itu.
Juga, saya memilih untuk membuat perilaku ini bergantung pada variabel karena ini harus memungkinkan Anda untuk mengatur variabel dalam perintah agenda kustom, jika Anda ingin hanya beberapa agenda untuk menampilkan kebiasaan. Saya belum mengujinya, tetapi tidak ada alasan mengapa itu tidak berhasil.
EDIT: Solusi asli saya punya masalah dengan agenda blok. Ternyata itu org-agenda-finalize
dipanggil satu kali untuk setiap blok, dan kemudian satu kali untuk agenda secara keseluruhan. Ketika panggilan terakhir itu terjadi, agendanya hanya-baca, sehingga kesalahan terjadi jika agendanya mengandung kebiasaan. Karena semua pekerjaan telah dilakukan pada saat itu, tidak masuk akal untuk memindai agenda lagi, dan saya hanya menambahkan cek untuk properti 'org-series, yang ditambahkan ke seluruh agenda setelah panggilan per-blok dan sebelum panggilan read-only akhir.