Verfolgung, wann Variablen aktualisiert werden

7

Ich habe ein Problem mit org-modeder Agenda-Ansicht. Während ich mich ausnahmslos auf das endgültige Hochfahren eingestellt habe org-agenda-files, '("~/org/")stelle M-x org-agendaich fest, dass dies org-agenda-filesnur auf eine Organisationsdatei verweist. Offensichtlich entscheidet sich etwas dafür, nur die letzte Organisationsdatei aufzunehmen, die ich angesehen habe, aber ich habe Probleme, herauszufinden, was. Gibt es eine Möglichkeit zu fangen, wenn diese Variable geändert wird, und eine Art Rückverfolgung anzuzeigen oder zu protokollieren?

stsquad
quelle
In der org-agenda-filesDokumentzeichenfolge heißt es: "Wenn ein Eintrag ein Verzeichnis ist, werden alle Dateien in diesem Verzeichnis, die übereinstimmen org-agenda-file-regexp, Teil der Dateiliste." Standardmäßig stimmt dieser reguläre Ausdruck mit allen Dateien mit der .orgErweiterung in diesem Verzeichnis überein . Können Sie sagen, wie Sie Ihre .org-Dateien organisiert haben? Gehören sie ~/org/direkt in den Ordner? Oder befinden sie sich darunter in Unterverzeichnissen?
Kaushal Modi
ageneda -> Tagesordnung
Faheem Mitha
@kaushalmodi: Ja, mein ~ / org / ist voll von Organisationsdateien mit jeweils einer Reihe von TODOs (ich habe eine pro "Thema" mit einem index.org).
stsquad
Welche Version von verwenden orgSie? Zum Testen können Sie auch Folgendes tun: Führen Sie emacs -qdann einen Scratch-Point für Ihre Installation von Org (add-to-list 'load-path "path/to/org")aus, wenn Sie ELPA oder Git verwenden. Wenn Sie die integrierte Funktion verwenden, können Sie dies ignorieren. Dann in Kratzern (require 'org) (setq org-agenda-files "~/org/") (org-agenda nil "t"). Überprüfen Sie, ob alle Ihre TODOs angezeigt werden.
Jonathan Leech-Pepin
@ JonathanLeech-Pepin: Neueste Organisation für das org ELPA-Archiv (aktuell 8.2.7c auf dieser Box).
stsquad

Antworten:

6

In dieser Situation finde ich, dass der beste Weg, um herauszufinden, was los ist, darin besteht, meine zu besuchen ~/.emacs.d/und zu rennen rgrep.

Durchsuchen Sie Ihre Konfigurationen

Das folgende Snippet von hier stellt sicher, dass rgrep es nicht in das elpa/Unterverzeichnis geht (da Sie dort sicher Dutzende nutzloser Treffer finden).

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

Dann renne ich einfach

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

auf die org-agenda-filesin meiner Konfiguration verwiesen wird . Wenn es ein Problem mit meinen Konfigurationen ist, wird dies es finden.

Anderswo suchen

Wenn das oben Gesagte nichts findet, bedeutet dies, dass ein Elpa-Paket Probleme verursacht. So ich mache

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

Dies führt normalerweise zu vielen Ergebnissen, aber es gibt Möglichkeiten, diese schnell durchzugehen. Zum Beispiel ist es sehr unwahrscheinlich, dass der Organisationsmodus selbst dieses Problem verursacht. Es ist also sicher, alle Treffer zu ignorieren, die aus dem Installationsverzeichnis des Organisationsmodus stammen.

Malabarba
quelle
1
Leider ist der einzige Ort, auf den ich verweise (abgesehen von meiner Konfiguration), die ELPA-Version von org. Daher frage ich mich, ob es einen besseren Weg gibt, um zu fangen, wenn org es aktualisiert hat.
stsquad
Geheimnis gelüftet! Am Ende fand ich die beleidigende Zeile in ~ / .emacs.d / my-custom.el, auf die die benutzerdefinierte Datei zeigt. Da dies am Ende meiner init.el geladen wird, wurde überschrieben, was my-org.el eingerichtet hat. Auch da sich meine Elisp-Dateien in einem Unterverzeichnis befinden, habe ich sie früher nicht gefunden.
stsquad
3

Eine weitere Option , die Sie haben , ist der Wert dieser Variablen während der Ausführung von verfolgen org-agenda, die hat zu sagen , wo das Problem ist.

  1. Bewerten Sie den folgenden Code:

    (global-set-key [f1] (lambda () (interactive) (message "%s" org-agenda-files)))
    
  2. Besuchen Sie die Funktion mit M-x find-function RET org-agenda.

  3. Edebug es mit C-u C-M-x.
  4. Rufen Sie die Funktion auf M-x org-agenda.
  5. Gehen Sie schrittweise durch Drücken ndurch und überwachen Sie den Wert der Variablen durch Drücken von F1.

Irgendwann innerhalb der org-agendaFunktion treffen Sie F1und der Wert von org-agenda-fileshat sich geändert. Das wird Ihnen sagen, wo Sie suchen müssen.

Malabarba
quelle
1
Sie können die Funktion auch mit einer Reihe von Nachrichten neu definieren, wenn Sie Edebug nicht möchten.
Malabarba
2

Verwenden Sie jemals C-c [( org-agenda-file-to-front) oder C-c ]( org-remove-file) in einer orgDatei?

Diese überschreiben den aktuellen org-agenda-filesmit einer fest codierten Liste von Dateien, die Ihre ~/org/als Quelle definierte Datei nicht mehr verwenden .

Wenn Sie dies so einstellen, stellen Sie ~/org/bitte sicher, dass sich die gewünschten Agenda-Dateien in dem Ordner mit .orgder Erweiterung befinden. Andernfalls werden sie nicht erkannt.

Jonathan Leech-Pepin
quelle
Ich möchte hinzufügen, dass es besser ist, wenn Sie nicht erwarten, dass sich die Liste der Agenda-Dateien sehr häufig ändert, diese Liste der Dateien zu etwas hinzuzufügen ~/org/agenda.filesund auf org-agenda-fileszu setzen ~/org/agenda.files.
Kaushal Modi
Nicht bewusst. In der Tat sind sie keinen nützlichen Schlüsseln für mich zugeordnet.
stsquad