Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

org-agendaとの連携 #2

Open
ruanxiang opened this issue Jun 29, 2023 · 5 comments
Open

org-agendaとの連携 #2

ruanxiang opened this issue Jun 29, 2023 · 5 comments

Comments

@ruanxiang
Copy link

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

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

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

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

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

@ruanxiang
Copy link
Author

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

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

@ruanxiang
Copy link
Author

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

@misohena
Copy link
Owner

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
Copy link
Owner

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
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants