Rastreando quando as variáveis ​​são atualizadas

7

Estou com um problema na org-modevisualização da agenda. Embora eu tenha definido org-agenda-filespara '("~/org/")sempre quando eu finalmente girar M-x org-agendaAcho que org-agenda-filesapenas aponta para um org-arquivo. Obviamente, algo está decidindo apenas incluir o último arquivo organizacional que eu vi, mas estou tendo problemas para resolver o que. Existe alguma maneira de interceptar quando essa variável é alterada e exibir ou registrar algum tipo de backtrace?

stsquad
fonte
Na org-agenda-filesdocstring, "Se uma entrada for um diretório, todos os arquivos nesse diretório correspondentes org-agenda-file-regexpserão parte da lista de arquivos". Por padrão, esse regexp corresponde a todos os arquivos com .orgextensão nesse diretório. Você pode dizer como você organiza seus arquivos .org? Eles pertencem ~/org/diretamente à pasta? Ou eles estão em subdiretórios sob isso?
Kaushal Modi
ageneda -> agenda
Faheem Mitha
@kaushalmodi: sim, meu ~ / org / está cheio de arquivos org, cada um com um monte de TODOs (eu tenho um por "tópico" em um index.org).
Stsquad 26/09/14
Qual versão orgvocê está usando? Você também pode fazer o seguinte para testar: Execute emacs -q, em seguida, no ponto inicial para a instalação da organização, (add-to-list 'load-path "path/to/org")se for do ELPA ou do Git; se usar o built-in, você pode desconsiderar. Então, no zero (require 'org) (setq org-agenda-files "~/org/") (org-agenda nil "t"). Veja se todos os seus TODOs aparecem.
Jonathan Leech-Pepin
@ JonathanLeech-Pepin: Organização mais recente do arquivo ELPA da organização (8.2.7c atual nesta caixa).
Stsquad # 28/14

Respostas:

6

Nessa situação, acho que a melhor maneira de descobrir o que está acontecendo é visitar o meu ~/.emacs.d/e fugir rgrep.

Pesquisando suas configurações

O snippet a seguir, retirado daqui, garante que rgrep não entre no elpa/subdiretório (pois você certamente encontrará dezenas de hits inúteis lá).

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

Então eu apenas corro

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

que encontrará qualquer referência org-agenda-filesna minha configuração. Se houver algum problema com minhas configurações, será encontrado.

Pesquisando em outros lugares

Se o item acima não encontrar nada, significa que há um pacote Elpa causando problemas. Então eu faço

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

Isso geralmente gera muitos resultados, mas existem maneiras de resolvê-los rapidamente. Por exemplo, é muito improvável que o próprio modo org esteja causando esse problema. Portanto, é seguro ignorar todos os hits que vêm do diretório de instalação do org-modes.

Malabarba
fonte
11
Infelizmente, o único local em que eu acho referenciado (além da minha configuração) é na versão org da ELPA. Por isso, me pergunto se havia uma maneira melhor de interceptar quando a organização o atualizou.
Stsquad 26/09/14
Mistério resolvido! No final, encontrei a linha incorreta em ~ / .emacs.d / my-custom.el, que é o que o arquivo personalizado aponta. Como isso é carregado no final do meu init.el, estava sobrescrevendo o que o my-org.el havia configurado. Além disso, como meus arquivos elisp estão em um subdiretório, por que não o encontrei anteriormente.
Stsquad 29/10/14
3

Outra opção que você tem é rastrear o valor dessa variável ao longo da execução de org-agenda, que precisa informar onde está o problema.

  1. Avalie o seguinte código:

    (global-set-key [f1] (lambda () (interactive) (message "%s" org-agenda-files)))
    
  2. Visite a função com M-x find-function RET org-agenda.

  3. Edite-o com C-u C-M-x.
  4. Chame a função M-x org-agenda.
  5. Gradualmente, percorra-o pressionando ne monitore o valor da variável pressionando F1.

Em algum momento dentro da org-agendafunção, você pressionará F1e o valor de org-agenda-filesterá mudado. Isso lhe dirá onde procurar.

Malabarba
fonte
11
Você também pode redefinir a função com várias mensagens, se não desejar o Edebug.
Malabarba 26/09
2

Você já usa C-c [( org-agenda-file-to-front) ou C-c ]( org-remove-file) enquanto está em um orgarquivo?

Eles substituem a atual org-agenda-filespor uma lista codificada de arquivos que não usarão mais o definido ~/org/como fonte.

Além disso, se você estiver configurando para ~/org/garantir que os arquivos da agenda que você deseja estejam nessa pasta com .orga extensão. Caso contrário, eles não serão detectados.

Jonathan Leech-Pepin
fonte
Eu gostaria de acrescentar que, se você não espera que a lista de arquivos da agenda para mudar muito frequentemente, é melhor para adicionar essa lista de arquivos para algo como ~/org/agenda.filese conjunto org-agenda-filespara ~/org/agenda.files.
Kaushal Modi
Não conscientemente. Na verdade, eles não estão mapeados para chaves úteis para mim.
Stsquad 16/10/2014