変数が更新されるタイミングの追跡


7

org-modeの議題ビューに問題があります。私が最終的にスピンアップしたときに常に設定org-agenda-filesしましたが'("~/org/")、それは1つの組織ファイルを指してM-x org-agendaいるorg-agenda-filesだけです。明らかに、最後に表示したorg-fileを含めるだけで何かが決定していますが、何を処理するのに苦労しています。この変数が変更されたときにトラップして、何らかのバックトレースを表示または記録する方法はありますか?


org-agenda-filesdocstring から、「エントリがディレクトリである場合、一致するそのディレクトリ内のすべてのファイルがorg-agenda-file-regexpファイルリストの一部になります。」デフォルトでは、その正規表現.orgは、そのディレクトリ内の拡張子を持つすべてのファイルと一致します。.orgファイルをどのように整理しているかわかりますか?それらは~/org/フォルダに直接属していますか?それとも、その下のサブディレクトリにありますか?
Kaushal Modi 2014

ageneda-> agenda
Faheem Mitha

@kaushalmodi:ええ、私の〜/ org /には多数のTODOが含まれるorgファイルがたくさんあります(index.orgの「トピック」ごとに1つあります)。
stsquad 2014

どのバージョンorgを使用していますか?また、次のテストを実行してテストできます。ELPAまたはGitの場合は、実行してからemacs -qOrgのインストールをスクラッチポイントで実行します。組み込みを(add-to-list 'load-path "path/to/org")使用している場合は無視できます。その後、スクラッチで(require 'org) (setq org-agenda-files "~/org/") (org-agenda nil "t")。TODOがすべて表示されるかどうかを確認します。
Jonathan Leech-Pepin 2014

@ JonathanLeech-Pepin:組織ELPAアーカイブの最新の組織(このボックスの現在の8.2.7c)。
stsquad 2014

回答:


6

このような状況で、何が起こっているのかを理解する最善の方法は、にアクセスして~/.emacs.d/実行することrgrepです。

構成の検索

ここから抜粋した次のスニペットは、それrgrepelpa/サブディレクトリに入らないようにします(そこに何十もの無駄なヒットが見つかるはずだからです)。

(eval-after-load 'grep
  '(progn
     (add-to-list 'grep-find-ignored-directories "auto")
     (add-to-list 'grep-find-ignored-directories "elpa")))

それから私はただ走る

M-x rgrep RET org-agenda-files RET *.el RET ~/.emacs.d/

org-agenda-files私の構成で参照を見つけます。それが私の設定に問題がある場合、これはそれを見つけます。

他の場所を検索

上記で何も見つからない場合は、Elpaパッケージが原因で問題が発生しています。私もです

M-x rgrep RET org-agenda-files RET *.el RET ~/.emacs.d/elpa/

これは通常、多くの結果をもたらしますが、それらをすばやく実行する方法があります。たとえば、org-mode自体がこの問題を引き起こしていることはほとんどありません。したがって、org-modesインストールディレクトリ内からのすべてのヒットを無視しても安全です。


1
残念ながら、(私の設定のセットアップは別として)参照されている唯一の場所は、組織のELPAバージョンにあります。したがって、組織が更新したときにトラップするより良い方法があるかどうか疑問に思います。
stsquad 2014

謎解きました!最終的に、〜/ .emacs.d / my-custom.elに問題のある行が見つかりました。これは、custom-fileが指しているものです。これは私のinit.elの最後に読み込まれるため、my-org.elが設定した内容を上書きしていました。また、elispファイルがサブディレクトリにあるので、以前に見つけられなかったのはなぜですか。
stsquad 2014年

3

あなたが持っている別のオプションは、実行の全体でこの変数の値を追跡することでorg-agenda持っている問題がどこにあるかを教えてくれます。

  1. 次のコードを評価します。

    (global-set-key [f1] (lambda () (interactive) (message "%s" org-agenda-files)))
    
  2. で関数にアクセスしますM-x find-function RET org-agenda

  3. EdebugでC-u C-M-x
  4. 関数を呼び出しますM-x org-agenda
  5. を押して徐々にnその値を移動し、を押して変数の値を監視しますF1

org-agenda関数内のある時点でヒットF1し、の値org-agenda-filesが変化します。それはどこを見ればいいのか教えてくれます。


1
Edebugを使いたくない場合は、大量のメッセージで関数を再定義することもできます。
マラバルバ2014

2

あなたは今まで使用しているC-c [org-agenda-file-to-front)またはC-c ]org-remove-file)にいる間orgのファイル?

これらは、現在org-agenda-filesのコードを~/org/ソースとして定義したものを使用しないハードコードされたファイルのリストで上書きします。

また、それを設定する場合は~/org/、目的の議題ファイルが.org拡張子のあるフォルダーにあることを確認してください。そうでない場合、それらは検出されません。


私はあなたが非常に頻繁に変更する議題ファイルのリストを期待していない場合、それはのようなものへのファイルのリストを追加する方が良いでしょうことを追加したい~/org/agenda.filesとセットorg-agenda-files~/org/agenda.files
Kaushal Modi 2014

意識していない。実際、それらは私にとって有用なキーにマップされていません。
stsquad 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.