Синхронизация изменений в запутанном файле обратно в исходный файл org

12

Я использую режим орг с режимом фонтана, чтобы написать сценарий.

Организация для организации и фонтан для форматирования сценария.

Вот код, который я использую для этой цели:

Настройки для работы с (фонтанными) исходными блоками в орг.

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

Например :

Акт 1

** SQ 1

*** Сцена 1

Куча текста, связанного со сценой и тем, что делают персонажи, и всем, что мне нужно знать, но никогда не попадет в сценарий.

BEGIN_SRC фонтан

текст сценария

END_SRC

Теперь я Cc ', и он открывает выше в новом буфере, и я могу взять его оттуда.


Проблема с моими текущими настройками заключается в том, что они не позволяют мне увидеть текст сценария полностью.

У меня есть более 50 таких блоков, и я хотел бы добиться следующего:

Я хочу, чтобы org экспортировал все фонтанные блоки в определенный файл, скажем, фонтан-сценарий. Таким образом, у меня есть только один файл со сценарием.

Все изменения синхронизируются с файлом org. Если я что-то отредактирую в фонтане-сценарии, исходный блок в org должен обновить изменения и наоборот.


Для этого я вставил следующие свойства в свой файл org:

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

Когда я Cc Cc, он возвращается с ошибкой, говорящей, что не найдена функция выполнения org-babel.

И когда я Cc Cv t говорит, что 0 блоков запутались.

Мой подход неверен или я что-то упустил?

Изменить: я изменил свойства:

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

и когда я Cc Cv t, он связывает исходные блоки с именем filename.fountain. Теперь часть синхронизации еще предстоит решить.

Любопытно-писака
источник
Это то, что было бы полезно для программирования тоже. Вы могли бы взглянуть outshine.el, кажется, что он идет противоположным путем (исходный файл с комментариями, которые можно просмотреть в буфере организации), но он может приблизиться к тому, что вы хотите. Отказ от ответственности: он никогда не пробовал сам (пока).
Т. Веррон
@ T.Verron Outshine, похоже, похож на lentic, где один и тот же файл можно увидеть в отдельных буферах в разных режимах. Я прочитаю больше, чтобы проверить, есть ли дополнительные функции, которых нет у lentic.
любопытный писатель
Эта двусторонняя синхронизация может существовать (я не думаю, что это так, но функции режима org имеют тенденцию оставаться незамеченными), но было бы чрезвычайно легко просто переключать видимость текста без фонтана. Затем вы все равно можете время от времени связываться с файлом.
Малабарба
Есть функция, org-babel-detangleкоторая претендует на это (предоставит вам запутанные ссылки комментариями). Я никогда не мог заставить его работать.
erikstokes
2
Я только что протестировал org-babel-detangle, и он сработал, как и ожидалось, хотя я провел очень минимальные тесты, далеко не «производственный код», но правильно
распутал

Ответы:

6

Одна широко известная опция, которая реализует двустороннюю двустороннюю связь между различными форматами документов (например, org иountain) в одном и том же файле, - это функция лентичного сервера, разработанная Phillip Lord. Его можно установить как лентичный пакет через репозиторий MELPA.

Существует скринкаст, демонстрирующий объединение режимов org-mode и lisp в одном файле с двумя разными редактируемыми представлениями одновременно. Изменение в одном делает изменения в другом. Некоторые первоначальные настройки могут потребоваться для соответствия форматам, которые вам нужны.

Это более богатая интеграция, более подходящая для редактирования, чем, скажем, односторонний вывод путаницы и распутывания через org-babel.

Пользователь Emacs
источник
Я оспариваю «широко известное» утверждение, поскольку о лентике я только что узнал из вашего ответа здесь. Кроме того, как вы можете видеть на melpa, у него не так много инсталляций, как я мог бы ожидать от пакета, который по сути является чистой магией!
Кристиан Херенц
1

Немного опоздал на вечеринку, но у меня было такое же желание синхронизировать запутанные блоки с их внешними файлами.

Для этого я могу порекомендовать org-tanglesync

Этот пакет ищет :tangle <filename>свойство в заголовке файла org и сравнивает содержимое блока с ним. Разница выполняется в фоновом режиме, а затем пользователю предлагается извлечь или отклонить внешние изменения.

Я считаю, что это более интуитивно, чем org-babel-detangleпотому, что для работы не требуется, чтобы внешний файл имел дополнительную магию org-babel, т. Е. Исходный файл отслеживает внешние экспортируемые блоки, а не наоборот.

Мехмет Текман
источник
2
Можете ли вы уточнить?
DoMiNeLa10
1
Что @ DoMiNeLa10 сказал. Может быть, вы скажете что-то о том, что делает этот пакет, и как использование его в качестве решения здесь отличается от использования других предлагаемых решений.
Дрю
обновлено, спасибо за полезную модерацию
Мехмет