org-mode – Convierta una lista o estructura de datos en un documento de organización

Pregunta:

Estoy escribiendo un paquete que descarga una lista de curaciones, contenidos y algunas otras propiedades, que se mostrarán al usuario. Por el momento, un búfer en org-mode parece una buena forma de mostrar estos titulares.

A continuación se muestra un ejemplo de cómo se podría estructurar esta lista. Es meramente ilustrativo, puedo convertirlo fácilmente a cualquier otra estructura según sea necesario.

'(("One headline" "Some much longer content."
   (property1 . value)
   (property2 . value))
  ("Second headline" "More much longer content."
   (property1 . value)
   (property2 . value)))

¿Existe una función o paquete que imprima dicha lista en un búfer en org-mode ?

Aquí está la salida deseada.

* One headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
Some much longer content.

* Second headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
More much longer content.

Podría hacer esto manualmente, solo me pregunto si podría haber algo ahí fuera.

Respuesta:

Este es el trabajo de org-element , el increíble (!) Trabajo de Nicolas Goaziou . Si no conoce org-element y le preocupa el desarrollo organizativo, esto es algo que debería analizar. No solo es una gran herramienta para trabajar, también está impulsando cada vez más a la org . En particular, org-export ( ox ), pero también funciona en, por ejemplo, org.el

Para obtener la "representación lisp" de un elemento bajo el punto, use org-element-at-point o org-element-context . Para obtener la representación del búfer, use org-element-parse-buffer . Si bien no es directamente relevante aquí, tenga en cuenta org-element-map .

Para ir de la "representación lisp" de un element , secondary string o parse tree nuevo a la "representación de sintaxis Org", use org-element-interpret-data . Esta es la (única) forma de convertir una "representación lisp" en una "representación de sintaxis Org". Sin embargo, probablemente no querrá escribir esta representación manualmente. Aquí hay una representación bastante pequeña de su primer título.

(org-element-interpret-data
 '(headline (:title "One headline" :level 1)
            (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                  (node-property (:key "property2" :value "value2"))))
            (#("Some much longer content."))))

Si debe agregar ambos títulos, agregue un parse tree

(org-element-interpret-data
 '(org-data nil (headline (:title "One headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("Some much longer content.")))
            (headline (:title "Second headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("More much longer content.")))))

Puede encontrar que la biblioteca org-dp Thorsten Jolitz le ayudará en tales esfuerzos ( en MELPA ).

La biblioteca org-dp está destinada a la programación a nivel local, es decir, sin ninguna información (contextual) excepto la del elemento analizado en el punto. Está diseñado para hacer que el uso del marco del analizador / intérprete de Org a nivel local sea tan conveniente como usarlo a nivel global (con un árbol de análisis completo producido por org-element-parse-buffer disponible)

Puede encontrar una descripción más completa de Thorsten aquí .

Para más aclaraciones, gmane.emacs.orgmode es realmente el foro apropiado.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım