org-babel resultiert in einem separaten Puffer

9

Ich verwende org-babel, um einige Berichte zu generieren, die nicht automatisch verarbeitet werden können. Da org ein gutes Gliederungsformat ist, drucke ich die Ergebnisse in org, um sie als Bäume darzustellen.

Ich habe festgestellt, dass das Verschachteln von Organisationsmarkierungen in #+begin_exampleBlöcken Emacs sehr langsam macht (und die Formatierung der Ergebnisse ebenfalls deaktiviert ist).

Es wäre wirklich cool, wenn babel die Ausgabe bestimmter Codeblöcke in einen separaten Puffer stellen würde (und auch ein Fenster dafür öffnen würde), genauso wie es Fehler behandelt.

Ich habe die Dokumentation durchgesehen, aber es scheint, dass es keine solche Option gibt.

Liege ich falsch? Wenn nicht, hat vielleicht jemand so einen Ausschnitt?

Die Langsamkeit kann auch durch einige andere Optionen in meiner Konfiguration verursacht werden. Wie ist Ihre Erfahrung mit org-formatiertem Text, in den verschachtelt ist example? Vielleicht belle ich hier unter dem falschen Baum.

Vielen Dank

Roman Grazhdan
quelle
1
Ich sollte hinzufügen, dass dies keine großen oder komplizierten Berichte sind. Es sind mehrere hundert Zeilen, zwei bis drei Ebenen tief, insgesamt weniger als hundert Knoten. Meine tatsächlichen Organisationsdateien sind viel größer. Sobald ich sie entferne #+begin_example, funktionieren sie
einwandfrei
1
Ich konnte dieses neue Feature ohne allzu große Probleme erstellen, aber org-modees entwickelt sich ständig weiter und org-babel-insert-resultist bereits ziemlich lang, und es wird mit dieser Modifikation noch länger dauern. Schritt 1 : Entscheide dich für ein neues ERGEBNIS-PARAMS wie das Wort separate. Der Quellcodeblock kann so etwas wie :results output separate Schritt 2 enthalten : Verwandeln Sie die if/thenAnweisung, die die Bedingung enthält, (and result-params (member "silent" result-params))in drei Bedingungen, wobei die neue ist, (and result-params (member "separate" result-params))und setzen Sie einen neuen Puffer.
Lawlist

Antworten:

7

Ich habe die Dokumentation durchgesehen, aber es scheint, dass es keine solche Option gibt.

Überraschenderweise orgbietet das keine :output bufferOption. Vielleicht ist dies für zukünftige orgVersionen in Arbeit .

... die Ausgabe bestimmter Codeblöcke in einen separaten Puffer legen ...

Hier ist eine Möglichkeit, diese Funktionalität zu simulieren: Nehmen Sie die Ausgabe eines Quellblocks streamin einen 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

Da der mycontentQuellblock den Inhalt zuführt mystream, müssen Sie nur den mystreamsrc-Block ausführen . Das heißt, C-c C-cauf mystreamBlock.

Wenn Sie sich C-c C-cim mycontentsrc-Block befinden, werden die Ergebnisse in denselben Puffer eingefügt.

Obwohl mycontentdies als emacs-lisp src-Block angezeigt wird, kann dies ein beliebiger gültiger org src-Block sein. Möglicherweise müssen Sie die :resultsOptionen je nach Sprache anpassen .

Der :results nonefür den mystreamsrc-Block ist nicht intuitiv, aber die Magie, die Ihren Inhalt in einen neuen Puffer bringt.

Emacs Benutzer
quelle
5

Seit ich die Antwort akzeptiert habe, habe ich eine Weile mit dem Setup "Elisp Snippet für jeden Bericht, den ich möchte" gelebt.

Aber dann habe ich mir folgenden Trick ausgedacht:

Es gibt eine Möglichkeit, org-babel outpupt in einem separaten Puffer mit C-o- zu öffnen org-open-at-point. Das Problem ist, dass der Ergebnisblock erstellt wird. Es gibt aber auch einen Befehl org-babel-remove-result. Ich kombinierte die beiden und machte einen kleinen schmutzigen Hack

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

Die Codeblöcke, die ich so benutze, haben Eigenschaften :results output :format raw :exports results

Meine Datei mit Tipps und Anleitungen ist nicht mehr mit großen Ausgaben überfüllt und der Puffer wird wiederverwendet (was zu meinem Workflow passt).

Roman Grazhdan
quelle
Wenn Sie dieses Verhalten ständig möchten, können Sie Ihren benutzerdefinierten Befehl als Hook verwenden : (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
Glucas
Nein, nur in einigen Fällen, um einen Bericht über Puppenversagen oder ähnliches zu erhalten.
Roman Grazhdan