org-babel risulta in un buffer separato


9

Uso org-babel per generare alcuni report che non possono essere elaborati automaticamente e poiché org è un buon formato di contorno, stampo i risultati in org per rappresentarli come alberi.

Ho notato che l'annidamento del markup dell'organizzazione in #+begin_exampleblocco rende gli emacs molto lenti (e anche la formattazione dei risultati è disattivata).

Sarebbe davvero bello avere babel che posiziona l'output di determinati blocchi di codice su un buffer separato (e apre anche una finestra per esso), allo stesso modo in cui gestisce gli errori.

Ho esaminato la documentazione ma sembra che non ci sia tale opzione.

Ho sbagliato? Se non lo sono, forse qualcuno ha uno snippet in giro?

Inoltre, la lentezza potrebbe essere causata da alcune altre opzioni nella mia configurazione, come è nidificata la tua esperienza con il testo in formato organizzativo example? Forse sto abbaiando sotto l'albero sbagliato qui.

Grazie


1
Dovrei aggiungere che questi non sono rapporti enormi o complicati. Sono diverse centinaia di linee, due-tre livelli di profondità, sotto un centinaio di nodi in totale. I miei file org effettivi sono molto più grandi. Una volta rimosso #+begin_example, funzionano perfettamente
Roman Grazhdan,

1
Sono stato in grado di creare questa nuova funzionalità senza troppi problemi, ma org-modeè sempre in evoluzione ed org-babel-insert-resultè già piuttosto lungo, e sarà ancora più lungo con questa modifica. Step # 1 : Decidi un nuovo RISULTATO-PARAMI come la parola separate. Il blocco di codice sorgente può contenere qualcosa di simile al :results output separate Passo 2 : trasforma l' if/thenistruzione che contiene la condizione (and result-params (member "silent" result-params))in tre condizioni con quella nuova (and result-params (member "separate" result-params))e imposta il nuovo buf.
elenco delle leggi del

Risposte:


7

Ho esaminato la documentazione ma sembra che non ci sia tale opzione.

Sorprendente che orgnon offre :output bufferopzioni. Forse questo è in lavorazione per le orgversioni future .

... posiziona l'output di alcuni blocchi di codice su un buffer separato ...

Ecco un modo per simulare quella funzionalità: prendere l'output di un blocco sorgente e streamfarlo in 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

Poiché mycontentil blocco di origine alimenta il contenuto mystream, dovrai eseguire solo il mystreamblocco src. Cioè, C-c C-ca mystreamblocco.

Se ti trovi C-c C-csul mycontentblocco src, i risultati verranno inseriti nello stesso buffer.

Sebbene mycontentsia mostrato come un blocco emrs-lisp src, questo può essere qualsiasi blocco org src valido. Potrebbe essere necessario regolare le :resultsopzioni in base alla lingua.

Il blocco :results nonefor mystreamsrc è controintuitivo, ma la magia che porta i tuoi contenuti in un nuovo buffer.


5

Da quando ho accettato la risposta, ho convinto che "ho un frammento di elisp per ogni rapporto che voglio" da un po 'di tempo.

Ma poi ho escogitato il seguente trucco:

V'è un modo per aprire outpupt org-babele in un buffer separato con C-o- org-open-at-pointè fantasia così. Il problema è che viene creato il blocco risultati. Ma c'è anche un comando org-babel-remove-result. Combinando i due, ho fatto un piccolo trucco sporco

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

I blocchi di codice che uso così hanno proprietà :results output :format raw :exports results

Il mio file con suggerimenti e howtos non è più ingombro di output di grandi dimensioni e il buffer viene riutilizzato (che si adatta al mio flusso di lavoro).


Se si desidera che questo comportamento per tutto il tempo, è possibile utilizzare il comando personalizzato come un gancio: (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glucas,

No, solo in alcuni casi, per prendere un rapporto sui fallimenti delle marionette o qualcosa del genere.
Roman Grazhdan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.