Seguimiento cuando las variables se actualizan

7

Tengo un problema con org-modela vista de agenda. Mientras que he puesto org-agenda-filesa '("~/org/")invariablemente cuando finalmente girar M-x org-agendaMe parece que org-agenda-fileslos puntos sólo a uno org-archivo. Obviamente, algo está decidiendo incluir el último archivo de organización que vi, pero tengo problemas para resolver qué. ¿Hay alguna forma de atrapar cuando esta variable se cambia y muestra o registra algún tipo de retroceso?

stsquad
fuente
Desde la org-agenda-filescadena de documentación, "Si una entrada es un directorio, todos los archivos en ese directorio que coincidan org-agenda-file-regexpserán parte de la lista de archivos". Por defecto, esa expresión regular coincide con todos los archivos con .orgextensión en ese directorio. ¿Puedes decir cómo tienes tus archivos .org organizados? ¿Pertenecen ~/org/directamente a la carpeta? ¿O están en subdirectorios debajo de eso?
Kaushal Modi
ageneda -> agenda
Faheem Mitha
@kaushalmodi: sí, mi ~ / org / está lleno de archivos de organización cada uno con un montón de TODOS en ellos (tengo uno por "tema" con un index.org).
stsquad
¿Qué versión de orgestás usando? También podría hacer lo siguiente para probar: Ejecutar emacs -qluego desde cero desde su instalación de Org (add-to-list 'load-path "path/to/org")si es desde ELPA o Git, si usa el incorporado, puede ignorarlo. Luego en cero (require 'org) (setq org-agenda-files "~/org/") (org-agenda nil "t"). Vea si todos sus TODOS aparecen.
Jonathan Leech-Pepin
@ JonathanLeech-Pepin: Última organización para el archivo ELPA de la organización (actual 8.2.7c en este cuadro).
stsquad

Respuestas:

6

En esta situación, encuentro que la mejor manera de averiguar qué está pasando es visitar mi ~/.emacs.d/y correr rgrep.

Buscando sus configuraciones

El siguiente fragmento, tomado de aquí, se asegura de que rgrep no entre en el elpa/subdirectorio (ya que seguramente encontrarás docenas de golpes inútiles allí).

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

Entonces solo corro

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

que encontrará alguna referencia org-agenda-filesen mi configuración. Si es un problema con mis configuraciones, esto lo encontrará.

Buscando en otra parte

Si lo anterior no encuentra nada, significa que hay un paquete de Elpa que causa problemas. Así que hago

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

Esto generalmente producirá muchos resultados, pero hay formas de superarlos rápidamente. Por ejemplo, es muy poco probable que el modo org en sí mismo esté causando este problema. Por lo tanto, es seguro ignorar todos los éxitos que provienen del directorio de instalación de los modos org.

Malabarba
fuente
1
Lamentablemente, el único lugar donde lo encuentro referenciado (aparte de mi configuración de configuración) es en la versión ELPA de org. Por lo tanto, me pregunto si había una mejor manera de atrapar cuando la organización lo actualizó.
stsquad
¡Misterio resuelto! Al final encontré la línea ofensiva en ~ / .emacs.d / my-custom.el que es a lo que apunta el archivo personalizado . Como esto se carga al final de mi init.el, se sobrescribió lo que my-org.el había configurado. Además, como mis archivos elisp están en un subdirectorio, no lo encontré antes.
stsquad
3

Otra opción que tiene es rastrear el valor de esta variable durante la ejecución de org-agenda, que tiene que decirle dónde está el problema.

  1. Evalúa el siguiente código:

    (global-set-key [f1] (lambda () (interactive) (message "%s" org-agenda-files)))
    
  2. Visita la función con M-x find-function RET org-agenda.

  3. Edebug con eso C-u C-M-x.
  4. Llama a la función M-x org-agenda,.
  5. Gradualmente, páselo presionando ny controle el valor de la variable presionando F1.

En algún momento dentro de la org-agendafunción, presionarás F1y el valor de org-agenda-fileshabrá cambiado. Eso te dirá dónde buscar.

Malabarba
fuente
1
También puede redefinir la función con un montón de mensajes, si no desea Edebug.
Malabarba
2

¿Alguna vez usó C-c [( org-agenda-file-to-front) o C-c ]( org-remove-file) mientras estaba en un orgarchivo?

Estos sobrescriben el actual org-agenda-filescon una lista codificada de archivos que ya no usarán su definido~/org/ como fuente.

Además, si lo está configurando para ~/org/asegurarse de que los archivos de agenda que desea están en esa carpeta con .orgla extensión. De lo contrario, no serán detectados.

Jonathan Leech-Pepin
fuente
Me gustaría añadir que si usted no espera la lista de archivos del programa a cambiar con mucha frecuencia, es mejor agregar esa lista de archivos a algo parecido ~/org/agenda.filesy conjunto org-agenda-filesa ~/org/agenda.files.
Kaushal Modi
No conscientemente De hecho, no están asignados a claves útiles para mí.
stsquad