LogseqのSCHEDULED AND DEADLINEの表示日程をカスタマイズする方法

公開日:
目次

どーも!某 (@7254bou)です!

Logseqを使っていると下にSCHEDULED AND DEADLINEと言う表示が出てきますよね。

Image from Gyazo
SCHEDULED AND DEADLINEの例

個人的にはもう少しこうなったらいいのに、という思いがあったのでカスタマイズしてみました。

実は以前一回やっていたのですが、忘れたので備忘録。

config.ednを編集する。

Logseqで細かいカスタマイズをする場合は、config.ednを編集する必要があります。

config.ednはLogseqのgraphとして指定したフォルダのlogseqフォルダ内に入っています。

Image from Gyazo
logseqフォルダ内

これを好きなエディタで開いてください。

特になければ、Windowsなら「メモ帳」、Macなら「テキストエディット」で開けばOKです。

既存のSCHEDULED AND DEADLINEを無効にする

まずはじめに、config.ednで既存のSCHEDULE AND DEADLINEを無効にします。

下記の通り、;; Disable Built-in Scheduled and deadline Queryと書かれている場所(34行目)を探して、その下の行の;;を削除します。

config.edn
 ;; Disable Built-in Scheduled and deadline Query
+  :feature/disable-scheduled-and-deadline-query? true
- ;; :feature/disable-scheduled-and-deadline-query? true

新しいSCHEDULED AND DEADLINE を追加する

続いてconfig.ednで新しいSCHEDULED AND DEADLINEを追加します。

下記の通り、default-queriesと書かれている場所(145行目)を探して、:journals内の[]に新しく追加します。

config.edn
 :default-queries
 {:journals
  [{:title "🔨 NOW"
    :query [:find (pull ?h [*])
            :in $ ?start ?today
            :where
            [?h :block/marker ?marker]
            [(contains? #{"NOW" "DOING"} ?marker)]
            [?h :block/page ?p]
            [?p :block/journal? true]
            [?p :block/journal-day ?d]
            [(>= ?d ?start)]
            [(<= ?d ?today)]]
    :inputs [:14d :today]
    :result-transform (fn [result]
                        (sort-by (fn [h]
                                   (get h :block/priority "Z")) result))
    :collapsed? false}
   {:title "📅 NEXT"
    :query [:find (pull ?h [*])
            :in $ ?start ?next
            :where
            [?h :block/marker ?marker]
            [(contains? #{"NOW" "LATER" "TODO"} ?marker)]
            [?h :block/page ?p]
            [?p :block/journal? true]
            [?p :block/journal-day ?d]
            [(> ?d ?start)]
            [(< ?d ?next)]]
    :inputs [:today :7d-after]
    :collapsed? false}
   ]}

上記がデフォルトのコードだと思いますが、最後の]}の中に新しいコードを追加します。

config.edn
 :default-queries
 {:journals
  [{:title "🔨 NOW"
    :query [:find (pull ?h [*])
            :in $ ?start ?today
            :where
            [?h :block/marker ?marker]
            [(contains? #{"NOW" "DOING"} ?marker)]
            [?h :block/page ?p]
            [?p :block/journal? true]
            [?p :block/journal-day ?d]
            [(>= ?d ?start)]
            [(<= ?d ?today)]]
    :inputs [:14d :today]
    :result-transform (fn [result]
                        (sort-by (fn [h]
                                   (get h :block/priority "Z")) result))
    :collapsed? false}
   {:title "📅 NEXT"
    :query [:find (pull ?h [*])
            :in $ ?start ?next
            :where
            [?h :block/marker ?marker]
            [(contains? #{"NOW" "LATER" "TODO"} ?marker)]
            [?h :block/page ?p]
            [?p :block/journal? true]
            [?p :block/journal-day ?d]
            [(> ?d ?start)]
            [(< ?d ?next)]]
    :inputs [:today :7d-after]
    :collapsed? false}
+    {:title [:h2 "DEADLINE"] 
+        :query [:find (pull ?b [*])
+              :in $ ?start ?next
+              :where
+              (or
+                [?b :block/deadline ?d]
+              )
+              [(>= ?d ?start)]
+              [(<= ?d ?next)]
+      ]
+      :result-transform (fn [result] (sort-by (fn [d] (get d :block/deadline) ) result))
+      :inputs [:today :14d-after]
+      :collapsed? false}
   ]}

上記のクエリでは、14日後までのDEADLINEつきTODOを日付が近い順にソートして並べてくれます。

親ページも表示されないのでスッキリして見やすいです。

クエリの文法について詳しく書くのは骨が折れそうなので、時間あるときに別記事にまとめます。

ひとまずコピペで入れたい場合は、下記のページに色々なクエリが書かれていて参考になるので参照してみて下さい。

参考