resultado de org-babel en un búfer separado

9

Utilizo org-babel para generar algunos informes que no se pueden procesar automáticamente, y dado que org es un buen formato de esquema, imprimo los resultados en org para representarlos como árboles.

Me di cuenta de que anidar el marcado de organización en el #+begin_examplebloque hace que emacs sea realmente lento (y el formato de los resultados también está desactivado).

Sería genial que Babel coloque la salida de ciertos bloques de código en un búfer separado (y también abra una ventana), de la misma manera que maneja los errores.

He revisado la documentación pero parece que no hay tal opción.

¿Me equivoco? Si no lo soy, ¿tal vez alguien tiene ese fragmento?

Además, la lentitud podría deberse a otras opciones en mi configuración, ¿cómo está anidada su experiencia con el texto con formato de organización example? Tal vez estoy ladrando debajo del árbol equivocado aquí.

Gracias

Roman Grazhdan
fuente
1
Debo agregar que estos no son informes enormes o complicados. Son varios cientos de líneas, dos o tres niveles de profundidad, debajo de cien nodos en general. Mis archivos de organización reales son mucho más grandes. Una vez que elimino #+begin_examplefuncionan bien
Roman Grazhdan
1
Pude crear esta nueva característica sin demasiados problemas, pero org-modesiempre está evolucionando y org-babel-insert-resultya es bastante larga, y será aún más larga con esta modificación. Paso # 1 : Decide sobre un nuevo RESULT-PARAMS como la palabra separate. El bloque de código fuente puede contener algo como el :results output separate Paso # 2 : Convierta la if/thendeclaración que contiene la condición (and result-params (member "silent" result-params))en tres condiciones con la nueva (and result-params (member "separate" result-params))y establezca un nuevo buf.
leyes

Respuestas:

7

He revisado la documentación pero parece que no hay tal opción.

Sorprendente que orgno ofrece :output bufferopción. Quizás esto esté en proceso para futuras orgversiones.

... coloca la salida de ciertos bloques de código en un búfer separado ...

Aquí hay una forma de simular esa funcionalidad: tome la salida de un bloque fuente y streamen un 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

Debido a mycontentque el bloque fuente alimenta el contenido mystream, solo tendrá que ejecutar el mystreambloque src. Es decir, C-c C-cen mystreambloque.

Si está C-c C-cen el mycontentbloque src, los resultados se insertarán en el mismo búfer.

Aunque mycontentse muestra como un bloque src emacs-lisp, este puede ser cualquier bloque src org válido. Es posible que deba ajustar las :resultsopciones según el idioma.

El :results nonepara el mystreambloque src es contrario a la intuición, pero la magia que le da su contenido en un nuevo buffer.

Usuario de Emacs
fuente
5

Desde que acepté la respuesta con la que he estado viviendo con esa configuración "tengo el fragmento de elisp para cada informe que quiero" por un tiempo.

Pero luego se me ocurrió el siguiente truco:

No es una forma de outpupt org-babel se abre en una memoria intermedia separada con C-o- org-open-at-pointes de lujo por el estilo. El problema es que se crea el bloque de resultados. Pero también hay un comando org-babel-remove-result. Combinando los dos, hice un pequeño truco sucio

(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)

Los bloques de código que uso así tienen propiedades :results output :format raw :exports results

Mi archivo con consejos y procedimientos ya no está abarrotado de grandes resultados y el búfer se reutiliza (lo que se adapta a mi flujo de trabajo).

Roman Grazhdan
fuente
Si desea que este comportamiento todo el tiempo, puede utilizar el comando personalizado como un gancho: (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glucas
No, solo en algunos casos, para obtener un informe de fallas de títeres o algo así.
Roman Grazhdan