résultat org-babel dans un tampon séparé

9

J'utilise org-babel pour générer des rapports qui ne peuvent pas être traités automatiquement, et comme org est un bon format hiérarchique, j'imprime les résultats dans org pour les représenter sous forme d'arbres.

J'ai remarqué que l'imbrication du balisage org dans le #+begin_examplebloc rend emacs très lent (et le formatage des résultats est également désactivé).

Ce serait vraiment cool d'avoir babel placer la sortie de certains blocs de code dans un tampon séparé (et ouvrir une fenêtre pour cela aussi), de la même manière qu'il gère les erreurs.

J'ai parcouru la documentation mais il semble qu'il n'y ait pas une telle option.

Ai-je tort? Si je ne le suis pas, peut-être que quelqu'un a un tel extrait dans les parages?

De plus, la lenteur peut être causée par d'autres options dans ma configuration, comment est votre expérience avec le texte au format organisation imbriqué example? Peut-être que j'aboie sous le mauvais arbre ici.

Merci

Roman Grazhdan
la source
1
Je dois ajouter que ce ne sont pas des rapports énormes ou compliqués. C'est plusieurs centaines de lignes, deux à trois niveaux de profondeur, sous une centaine de nœuds au total. Mes fichiers org réels sont bien plus gros. Une fois que je les ai supprimés, #+begin_exampleils fonctionnent très bien
Roman Grazhdan
1
J'ai pu créer cette nouvelle fonctionnalité sans trop de problèmes, mais elle org-modeévolue toujours et org-babel-insert-resultest déjà assez longue, et elle sera encore plus longue avec cette modification. Étape # 1 : Décidez d'un nouveau RESULT-PARAMS comme le mot separate. Le bloc de code source peut contenir quelque chose comme l' :results output separate étape 2 : transformer l' if/theninstruction qui contient la condition (and result-params (member "silent" result-params))en trois conditions, la nouvelle étant (and result-params (member "separate" result-params))et définir un nouveau buf.
lawlist

Réponses:

7

J'ai parcouru la documentation mais il semble qu'il n'y ait pas une telle option.

Surprenant cela orgn'offre pas d' :output bufferoption. C'est peut-être en préparation pour les futures orgversions.

... place la sortie de certains blocs de code dans un tampon séparé ...

Voici une façon de simuler cette fonctionnalité: prenez la sortie d'un bloc source et streamle mettre dans 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

Étant donné que mycontentle bloc source alimente le contenu mystream, vous devrez exécuter uniquement le mystreambloc src. Autrement dit, C-c C-csur le mystreambloc.

Si vous êtes C-c C-csur le mycontentbloc src, les résultats seront insérés dans le même tampon.

Bien qu'il mycontentsoit affiché sous forme de bloc src emacs-lisp, il peut s'agir de n'importe quel bloc org src valide. Vous devrez peut-être ajuster les :resultsoptions en fonction de la langue.

Le :results nonepour le mystreambloc src est contre-intuitif, mais la magie qui place votre contenu dans un nouveau tampon.

Utilisateur Emacs
la source
5

Depuis que j'ai accepté la réponse, je vis avec cette configuration «avoir un extrait elisp pour chaque rapport que je veux» depuis un certain temps.

Mais alors j'ai trouvé l'astuce suivante:

Il existe un moyen d'ouvrir la sortie org-babel dans un tampon séparé avec C-o- org-open-at-pointest fantaisie comme ça. Le problème est que le bloc de résultat est créé. Mais il y a aussi une commande org-babel-remove-result. En combinant les deux, j'ai fait un petit hack sale

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

Les blocs de code que j'utilise comme ça ont des propriétés :results output :format raw :exports results

Mon fichier avec des astuces et des howtos n'est plus encombré de grandes sorties et le tampon est réutilisé (ce qui convient à mon workflow).

Roman Grazhdan
la source
Si vous voulez que ce comportement tout le temps, vous pouvez utiliser votre commande personnalisée comme un crochet: (add-hook 'org-babel-after-execute-hook 'my-bable-to-buffer))).
glucas
Non, juste dans certains cas, pour récupérer un rapport d'échecs de marionnettes ou quelque chose comme ça.
Roman Grazhdan