Como posso ter uma exibição da linha do tempo da agenda de vários arquivos?

7

Estou usando o modo organizacional como uma base de conhecimento, onde cada arquivo é para um projeto específico em que estou trabalhando.

Cada arquivo tem seu próprio diário e eu adoraria ver um diário agregado de todas as coisas que fiz.

Essas informações estão em um monte de .orgarquivos em um diretório específico.

A funcionalidade que estou procurando é o que a linha do tempo da agenda fornece, mas funciona apenas para um arquivo.

Existe uma maneira de fazê-lo funcionar para todos os arquivos org-agenda-files?

edmz
fonte
Isso parece duplicado para a pergunta Timelineview of all agenda filesem unix.SE.
elemakil
Você está certo. Haverá um esforço para tentar migrar as perguntas do emacs de outras SOs? (Eu não saber se isso é possível que eu poderia ajudar com o dito esforço.)
edmz
As perguntas do Emacs do Stack Overflow ou Super User são, eu acho, a política oficial sobre perguntas duplicadas e migração. Na IMO, essa outra pergunta é boa para migrar para cá, já que é limítrofe unix.SEe provavelmente poderia obter uma resposta melhor aqui.
purple_arrows
11
@purple_arrows Independentemente da política, a questão à qual elemakil se vinculou não pode ser migrada porque é muito mais que 60 dias .
itsjeyd
@itsjeyd Doh! Claro. Obrigado por apontar isso.
purple_arrows

Respostas:

2

Com base nas sugestões fornecidas nesta resposta , o comando a seguir coleta o conteúdo de todos org-agenda-filesem um único arquivo e chama o org-agendacomando que cria a linha do tempo:

(defun org-agenda-timeline-all (&optional arg)
  (interactive "P")
  (with-temp-buffer
    (dolist (org-agenda-file org-agenda-files)
      (insert-file-contents org-agenda-file nil)
      (end-of-buffer)
      (newline))
    (write-file "/tmp/timeline.org")
    (org-agenda arg "L")))

Para obter melhores resultados, configure uma ligação de chave personalizada para este comando via

(define-key org-mode-map (kbd "C-c t") 'org-agenda-timeline-all)

Além disso , se você deseja que o comando considere todos os org-modearquivos que estão abertos no momento (além do seu org-agenda-files, que pode ou não estar aberto), você pode substituir org-agenda-filespor uma chamada (org-files-list)no código acima.

itsjeyd
fonte
11
o problema com o uso de arquivos de agenda organizacional é que, se for um diretório, o código não funcionará.
Edmz 9/10
@ lal00 - substitua org-agenda-filespor (org-agenda-files t)para resolver esse problema.
Sridhar Ratnakumar
O outro problema com essa abordagem é que você não tem a referência de volta ao arquivo .org original. Quero saber de onde veio uma determinada tarefa concluída e também poder navegar para esse arquivo .org (ou seu archive).
Sridhar Ratnakumar
1

Não é exatamente idêntico à linha do tempo, mas você pode criar uma exibição personalizada da agenda mostrando algum período de tempo no "modo de log". Ligando org-agenda-fileslocalmente no comando the agenda, podemos carregar os arquivos que desejamos sem atrapalhar o comportamento normal. Isso faz uma semana, mude org-agenda-spanpara o número de dias que você deseja.

(defvar org-timeline-files nil
  "The files to be included in `org-timeline-all-files'. Follows
  the same rules as `org-agenda-files'")

(setq org-timeline-files '("/path/to/org/files/"))

(add-to-list 'org-agenda-custom-commands
             '("R" "Week in review"
                agenda ""
                ;; agenda settings
                ((org-agenda-span 'week)
                  (org-agenda-start-on-weekday 0) ;; start on Sunday
                  (org-agenda-overriding-header "Week in Review")
                  (org-agenda-files 
                    (let ((org-agenda-files org-timeline-files))
                          (org-agenda-files nil 'ifmode)))
                  (org-agenda-start-with-log-mode t)
                  (org-agenda-log-mode-items '(clock state))
                  (org-agenda-archives-mode t) ; include archive files
                )))
erikstokes
fonte