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?


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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.