resultado do org-babel para um buffer separado

9

Uso org-babel para gerar alguns relatórios que não podem ser processados ​​automaticamente e, como org é um bom formato de estrutura de tópicos, imprimo os resultados em org para representá-los como árvores.

Notei que aninhar a marcação da organização no #+begin_examplebloco torna o emacs muito lento (e a formatação dos resultados também está desativada).

Seria muito legal ter o babel para colocar a saída de certos blocos de código em um buffer separado (e abrir uma janela para ele também), da mesma maneira que lida com erros.

Examinei a documentação, mas parece que não existe essa opção.

Estou errado? Se não, talvez alguém tenha um trecho por aí?

Além disso, a lentidão pode ser causada por algumas outras opções na minha configuração. Como está sua experiência com o texto formatado na organização example? Talvez eu esteja latindo sob a árvore errada aqui.

obrigado

Roman Grazhdan
fonte
11
Devo acrescentar que não se trata de relatórios enormes ou complicados. São várias centenas de linhas, dois a três níveis de profundidade, com menos de cem nós no total. Meus arquivos organizacionais reais são muito maiores. Depois de removê #+begin_example
-los
11
Consegui criar esse novo recurso sem muitos problemas, mas org-modeestá sempre evoluindo e org-babel-insert-resultjá é bastante longo, e será ainda mais longo com esta modificação. Etapa 1 : Decida um novo resultado como a palavra separate. O bloco de código-fonte pode conter algo como :results output separate Etapa 2 : Transforme a if/theninstrução que contém a condição (and result-params (member "silent" result-params))em três condições com a nova sendo (and result-params (member "separate" result-params))e defina um novo buf.
lawlist

Respostas:

7

Examinei a documentação, mas parece que não existe essa opção.

Surpreendente que orgnão oferece :output bufferopção. Talvez isso esteja sendo desenvolvido para orgversões futuras .

... coloque a saída de certos blocos de código em um buffer separado ...

Aqui está uma maneira de simular essa funcionalidade: leve a saída de um bloco de origem streampara um new buffer:

#+NAME: mycontent
#+BEGIN_SRC emacs-lisp :results value :results raw :exports results
(print "this content is streamed to a new buffer")
#+END_SRC

#+NAME: mystream
#+BEGIN_SRC emacs-lisp :var c=mycontent :results none
(prin1 c (generate-new-buffer "new"))
#+END_SRC

Como o mycontentbloco de origem alimenta o conteúdo mystream, você precisará executar apenas o mystreambloco src. Ou seja, C-c C-cno mystreamquarteirão.

Se você estiver C-c C-cno mycontentbloco src, os resultados serão inseridos no mesmo buffer.

Embora mycontentseja mostrado como um bloco emacs-lisp src, este pode ser qualquer bloco org src válido. Pode ser necessário ajustar as :resultsopções com base no idioma.

A :results nonepara o mystreambloco src é contra-intuitivo, mas a magia que recebe o seu conteúdo em um novo buffer.

Usuário Emacs
fonte
5

Desde que aceitei a resposta que vivo com a configuração de 'ter elisp snippet para cada relatório que eu quero' por um tempo.

Mas então eu vim com o seguinte truque:

Não é uma maneira de outpupt org-babel aberta em um buffer separado com C-o- org-open-at-pointé extravagante como aquele. O problema é que o bloco de resultados é criado. Mas também há um comando org-babel-remove-result. Combinando os dois, fiz um pequeno truque sujo

(defun my-babel-to-buffer ()
  "A function to efficiently feed babel code block result to a separate buffer"
  (interactive)
  (org-open-at-point)
  (org-babel-remove-result)
)

(defun my-org-mode-config ()
  "To use with `org-mode-hook'"
  (local-set-key (kbd "C-`") 'my-babel-to-buffer)
)

(add-hook 'org-mode-hook 'my-org-mode-config)

Os codeblocks que eu uso assim têm propriedades :results output :format raw :exports results

Meu arquivo com dicas e howtos não está mais cheio de saídas grandes e o buffer é reutilizado (o que se adequa ao meu fluxo de trabalho).

Roman Grazhdan
fonte
Se você quiser este comportamento o tempo todo, você pode usar o seu comando personalizado como um gancho: (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glucas
Não, apenas em alguns casos, para obter um relatório de falhas de marionetes ou algo assim.
Roman Grazhdan