Sincronizar cambios en un archivo enredado de nuevo al archivo de organización original

12

Estoy usando el modo org con el modo fuente para escribir un guión.

Org para organización y fuente para formateo de guiones.

Este es el código que uso para este propósito:

Configuraciones para trabajar con bloques fuente (fuente) en org.

;; prevent org from messing with indentation of the source text.
(setq org-src-preserve-indentation t)
(setq org-edit-src-content-indentation 0)

;; open the buffer for editing fountain in another window.
(setq org-src-window-setup (quote reorganize-frame))

;; prevent a message in the edit buffer from being shown.
(setq org-edit-src-persistent-message nil)

;; save edits in the fountain buffer to the org buffer after x sec
(setq org-edit-src-auto-save-idle-delay 1)

Por ejemplo :

acto 1

** SQ 1

*** Escena 1

Un montón de texto relacionado con la escena y lo que están haciendo los personajes y todo lo que necesito saber pero que nunca terminará en el guión.

BEGIN_SRC fuente

texto del guión

END_SRC

Ahora I Cc 'y abre lo anterior en un nuevo búfer y puedo tomarlo desde allí.


El problema con mi configuración actual es que no me permite ver el texto del guión en su totalidad.

Tengo alrededor de 50 bloques de este tipo y me gustaría lograr lo siguiente:

Quiero que org exporte todos los bloques fuente a un archivo específico, digamos fuente-guión. De esa manera tengo un solo archivo con el guión solamente.

Tener todas las ediciones sincronizadas con el archivo org. Si edito algo en el guión de fuente, el bloque fuente en la organización debería actualizar el cambio y viceversa.


Para hacer esto, inserté las siguientes propiedades en mi archivo org:

:PROPERTIES:
:file: "~/files/fountain-screenplay.fountain"
:cache: yes
:comments: yes 
:tangle: yes
:results: silent
:END: 

Cuando I Cc Cc regresa con un error que dice que no se encontró ninguna función de ejecución org-babel.

Y cuando I Cc Cv t dice 0 bloques enredados.

¿Mi enfoque es incorrecto o me falta algo?

Editar: cambié las propiedades a:

#+properties :file .fountain :cache yes and so on 

y cuando I Cc Cv t enreda los bloques de origen en un nombre de archivo. fuente. Ahora la parte de sincronización queda por resolver.

garabateador curioso
fuente
Esto es algo que también sería útil para la programación. Puede echar un vistazo outshine.el, parece tomar el camino opuesto (archivo fuente con comentarios que se pueden ver en un búfer de organización), pero puede acercarse a lo que desea. Descargo de responsabilidad: nunca lo he intentado yo mismo (todavía).
T. Verron
@ T.Verron Outshine parece ser similar a léntico, donde se puede ver el mismo archivo en búferes separados con diferentes modos. Leeré más para verificar si tiene características adicionales que lentic no tiene.
garabateador curioso
Esta sincronización bidireccional podría existir (no creo que exista, pero las características del modo de organización tienden a pasar desapercibidas), pero sería tremendamente más fácil alternar la visibilidad del texto que no es fuente. Entonces aún puede enredarse en un archivo de vez en cuando.
Malabarba
Hay una función org-babel-detangleque dice esto (proporcionarle enredados con comentarios de enlaces). Nunca he podido hacer que funcione.
erikstokes
2
Acabo de probar el org-babel-detangle y funcionó como se esperaba, aunque hice pruebas muy mínimas, lejos del "código de producción", pero se desenredó correctamente con comentarios vinculados
Joafigue

Respuestas:

6

Una opción ampliamente conocida que implementa el enlace de ida y vuelta de dos vías entre diferentes formatos de documentos (org y fuente, por ejemplo) dentro del mismo archivo es la función de servidor léntico desarrollada por Phillip Lord. Puede ser instalado como el léntica paquete a través del repositorio Melpa.

Hay un screencast que muestra la integración de modo org y lisp en el mismo archivo con dos vistas editables diferentes al mismo tiempo, vinculadas. Cambiar en uno hace cambios en el otro. Es posible que se requiera alguna configuración inicial para acomodar los formatos que necesita.

Esta es una integración más rica, más adecuada para la edición, que la salida unidireccional de enredos y desenredos a través de org-babel.

Usuario de Emacs
fuente
Disputo la afirmación "ampliamente conocida", ya que acabo de encontrar sobre lentic de su respuesta aquí. Además, como puede ver en melpa, no tiene tantas instalaciones, como hubiera esperado para un paquete que es básicamente magia pura.
Christian Herenz
1

Un poco tarde para la fiesta, pero tenía el mismo deseo de sincronizar bloques enredados con sus archivos externos.

Para esto puedo recomendar org-tanglesync

Este paquete busca una :tangle <filename>propiedad en el encabezado de un archivo de organización y compara el contenido del bloque. Se realiza una diferencia en segundo plano y luego se le solicita al usuario que extraiga o rechace los cambios externos.

Creo que esto es más intuitivo que org-babel-detangleporque no requiere que el archivo externo tenga magia extra de org-babel para que funcione, es decir, es el archivo fuente el que rastrea los bloques exportados externos y no al revés.

Mehmet Tekman
fuente
2
¿Puedes elaborar?
DoMiNeLa10
1
Lo que dijo @ DoMiNeLa10. Tal vez diga algo sobre lo que hace ese paquete y cómo usarlo como solución aquí es diferente de usar otras soluciones propuestas.
Dibujó
actualizado, gracias por la moderación útil
Mehmet Tekman