TODOリストの議題ビューの組織習慣グラフ


8

私はorg-habitを使用しており、習慣グラフは通常のアジェンダビューにうまく表示されます。ただし、タグフィルタリングを使用してToDoリストを使用したいのですが、習慣は通常のToDoアイテムのように見えますが、習慣グラフはありません。

TODOリストのアジェンダビューを使用しているときに、習慣グラフを表示するにはどうすればよいですか?


一貫性グラフは、「アジェンダ」タイプのアジェンダ以外の場所に表示されるように設計されているとは思いません(そのため、ToDoリストなどはありません)。あなたができるかもしれないことは、あなたが望むタグのToDoリストと習慣の一貫性グラフの両方のためのブロックでブロックアジェンダをカスタマイズすることです。ただし、カスタムアジェンダは少しトリッキーな場合があります。
Subhan Michael Tindall

回答:


4

これはトリックを行うようです:

(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)

さらに説明するとorg-agenda-finalize、アジェンダバッファがほぼ作成されると、すべてのアジェンダ関数が呼び出されるように見え ます。これは、習慣グラフを追加する関数です。さらに、org-habit-ptextプロパティ(グラフが表示する詳細をエンコードする)を持つすべてのアイテムにグラフを追加するだけ です。したがって、必要なのは、その前のある時点で、この情報を調べて習慣にタグを付けることだけです。

また、一部のアジェンダだけで習慣を表示したい場合は、カスタムアジェンダコマンドで変数を設定できるため、この動作を変数に依存させることにしました。私はそれをテストしていませんが、動作しない理由はありません。

編集:私の元の解決策はブロックの議題に問題がありました。それはorg-agenda-finalize、ブロックごとに1回、そしてアジェンダ全体として1回呼び出されることがわかりました。その最後の呼び出しが発生すると、アジェンダは読み取り専用であるため、アジェンダに習慣が含まれている場合はエラーがスローされます。その時点までにすべての作業がすでに完了しているため、アジェンダをもう一度スキャンしても意味がありません。ブロックごとの呼び出しの後にアジェンダ全体に追加される「org-seriesプロパティ」のチェックを追加しただけです最後の読み取り専用呼び出しの前。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.