misohena / el-jma

Emacs Interface for Japan Meteorological Agency Data
https://misohena.jp/blog/2022-02-23-access-to-jma-weather-forecast-from-emacs.html
8 stars 2 forks source link

org-agendaとの連携 #2

Open ruanxiang opened 1 year ago

ruanxiang commented 1 year ago

素晴らしいツールです。ありがとうございます!

org-agendaとの連携はうまくできないようです。

org-agendaのファイルに以下のような内容を入れました。 %%(jma-diary-weathers "130000" "130010" "44132" "130010" "44132")

しかし、org-agendaには二日間の天気予報しか表示されません。また、最初にorg-agendaを開いた時しか天気予報情報が更新されません。その後、org-agendaを再構築(rebuild)しても、天気予報の情報が更新されません。Emacsを再起動しない限り、情報は常に更新されません。

私の使い方が間違っている可能性もありますが、原因を教えていただけないでしょうか?

ruanxiang commented 1 year ago

失礼いたしました。 以上の %%(jma-diary-weathers "130000" "130010" "44132" "130010" "44132") を使う場合は、正しく8日間の情報を表示されます。 ただ、以下のコードを使うと、上記書いたような状況になりました: %%(jma-diary-weathers "250000" "250010" "60216" "250010" "60216")

私の場所コードの設定は間違ったかなぁ

ruanxiang commented 1 year ago

%%(jma-diary-weathers "250000" "250010" "60216" "250000" "60216") に直したら、正しく表示されました。 コードを正しく理解できなくて、大騒ぎで、申し訳ございません。

misohena commented 1 year ago

ruanxiangさんこんにちは。お褒め頂きありがとうございます。

情報が常に更新されない件ですが、私も少し前に同じ現象に遭遇して調べたところOrg9.6からdiary sexpの結果がキャッシュされるようになったことが原因でした。私はひとまず次のようなコードでキャッシュを無効にして回避しています。

;; org-diary-sexp-entryのキャッシュを無効化する。
;; Org9.6からキャッシュが導入された。
;; しかし天気情報は変化するのでキャッシュされては困る。
;; 処理が遅いところには既にキャッシュを入れてあるので私にはキャッシュは不要。
(when (version<= "9.6" org-version)
  (defun my-org-diary-sexp-entry (old-fun &rest args)
    ;; 元の関数を呼び出す前に無理矢理クリアする。
    (setq org--diary-sexp-entry-cache (make-hash-table :test #'equal))
    (apply old-fun args))
  (advice-add #'org-diary-sexp-entry :around #'my-org-diary-sexp-entry))

キャッシュを無効にするオプションはOrg9.6の時点では用意されていないようです。

ご報告頂いた現象が私と同じ原因とは限りませんが、上のコードを試してみると解決するかもしれません。キャッシュをクリアする部分は (setq org--diary-sexp-entry-cache (make-hash-table :test #'equal)) です。

ちなみにjma-diary-weathersは独自にキャッシュを持っています。予報の更新予定時刻を考慮しているので問題ないはずですが、 (setq jma-forecast-cache nil) でクリアできます。

misohena commented 1 year ago

org-modeのソースの該当箇所です。

https://git.savannah.gnu.org/cgit/emacs/org-mode.git/tree/lisp/org.el?h=release_9.6.7#n14525

diary sexpの結果を完全にキャッシュしてしまいます。これは結果が常に変わらないのであれば良いのですが(祝日や天文現象など)、今回のように結果が変わる場合は困ります。基本的にはorg-modeの問題といって良いと思います。

ruanxiang commented 1 year ago

早速の回答ありがとうございます。 教えて頂いたやり方を試しました、問題を無事で解決しました!