Синхронізація змін із заплутаним файлом назад до початкового файлу org


12

Я використовую 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)

Наприклад :

Акт 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, він приєднує вихідні блоки до імені файлу. Тепер залишається вирішити частину синхронізації.


Це щось корисне і для програмування. Ви можете поглянути outshine.el, схоже, він веде по протилежному шляху (вихідний файл із коментарями, який можна переглянути в органічному буфері), але він може наблизитись до того, що ви хочете. Відмова від відповідальності: він ніколи не пробував його сам (поки).
Т. Веррон

@ T.Verron Outshine схоже на lentic, коли один і той же файл можна побачити в окремих буферах з різними режимами. Я прочитаю докладніше, щоб перевірити, чи є додаткові функції, яких немає в лентику.
цікаво-скреблер

Ця двостороння синхронізація може існувати (я не думаю, що це робить, але функції режиму org мають тенденцію залишатися непоміченою), але було б надзвичайно простіше просто переключити видимість тексту без фонтану. Потім ви можете все-таки заплутуватися до файлу раз у раз.
Малабарба

Є функція, org-babel-detangleяка претендує на це (надайте вам заплутані коментарі посилання). Мені ніколи не вдалося змусити його працювати.
erikstokes

2
Я щойно тестував org-babel-detangle, і він працював так, як очікувалося, хоча я робив дуже мінімальні тести, далеко не "виробничий код", але
детально розібраний

Відповіді:


6

Одним із широко відомих варіантів, який реалізує двосторонній зв'язок у зворотному напрямку між різними форматами документів (наприклад, org та фонтаном) у межах одного файлу, є функція лінзового сервера, розроблена Філліпом Лордом. Він може бути встановлений як лінзовий пакет через сховище MELPA.

Існує скріншот, що показує інтеграцію org-режиму та Lisp-файлу в одному файлі з двома різними редагованими видами одночасно, пов'язаними між собою. Зміна одного змінює інше. Для розміщення потрібних форматів може знадобитися деяка початкова настройка.

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


Я заперечую "широко відоме" твердження, оскільки я щойно знайшов про лінзи з вашої відповіді тут. Крім того, як ви бачите на melpa, у неї не так багато установок, як я б очікував на пакет, який є в основному чистою магією!
Крістіан Геренц

1

Трохи запізнюємось на вечірку, але в мене було таке ж бажання синхронізувати заплутані блоки зі своїми зовнішніми файлами.

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

Цей пакет шукає :tangle <filename>властивість у заголовку файла org і порівнює вміст блоку з ним. На задньому плані виконується різниця, і тоді користувачеві пропонується витягнути або відхилити зовнішні зміни.

Я вважаю, що це більш інтуїтивно, ніж org-babel-detangleтому, що він не вимагає, щоб зовнішній файл мав додаткову магію org-babel, щоб він працював, тобто саме вихідний файл відстежує зовнішні експортовані блоки, а не навпаки.


2
Чи можете ви докладно?
DoMiNeLa10

1
Що сказав @ DoMiNeLa10 Можливо, скажіть щось про те, що робить цей пакет, і як його використовувати як рішення тут, відрізняється від використання інших запропонованих рішень.
Дрю

оновлено, дякую за корисну модерацію
Мехмет Текман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.