Чи в організації є якісь операції "зворотного запуску", наприклад, для співпраці з користувачами, які не користуються органом?


10

Я хотів би написати власні примітки / тести / код в org, а потім використовувати org-bable-tangleдля створення вихідних файлів. Однак усі ці файли підлягають контролю версій і, отже, можуть змінюватися поза моїм середовищем org.

Мені хотілося б мати кілька srcблоків, а потім переплутати купу різних файлів, кожен з яких буде зобов'язаний контролювати версії. Але в той же час зможете "розплутати" кожен з цих файлів назад у мій файл org після витягування змін із контролю версій.

Чи є простий спосіб зробити це? Зараз я розглядаю питання з гроюinsert-file-contents


Чи можете ви надати невеликий приклад того, що ви просите зробити? Це здається, що у вас є блоки коду в одному або декількох файлах org, і ви хочете, щоб файл або файли, згенеровані з клубка цих блоків, розібралися на початкові блоки зі змінами в файлах org.
Девід Д.

По суті, робочий процес був би таким: (1) написати якийсь грамотний код в org. (2) прив’яжіть цей код до одного або декількох файлів. (3) git виконує ці файли. (4) пообідати (5) git тягнути зміни мого колеги. (6) "зворотно переплутати" ці зміни назад у кодові блоки у моєму файлі org. (7) goto (1).
RJTK

Відповіді:


6

Так, це так org-babel-detangle.

org-babel-detangle - це інтерактивна складена функція Lisp в ob-tangle.el.

(org-babel-detangle &optional SOURCE-CODE-FILE)

Поширити зміни вихідного файлу назад оригінально до файлу Org. Це вимагає, щоб кодові блоки були пов’язані з коментарями посилань, які дозволяють знайти оригінальні блоки коду.

Вам потрібно встановити commentsаргумент заголовка, linkщоб він працював, наприклад,

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello'
#+end_src

потім використовуйте M-x org-babel-tangleдля експорту кодового блоку, hello.rbбуде створений новий файл з назвою , він повинен мати подібний вміст, як наведено нижче

~ $ cat hello.rb
# [[file:~/foo.org][No heading:1]]
puts 'hello'
# No heading:1 ends here
~ $

Нарешті, відкрийте hello.rbв Emacs, перейдіть helloна hello worldі запустіть M-x org-babel-detangleу hello.rbбуфері s. Файл org буде оновлено

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello world'
#+end_src

Чи можете ви бути точнішими (чи навести приклад) щодо використання цієї функції org-babel-detangle. Я спробував за допомогою вашого коду рубіну використовувати M x org-babel-detangle після того, як переплутати його на hello.rb та легко змінити код, але у мене є помилка "org-babel-detangle: Неправильний аргумент типу: stringp, nil".
Lgen

@Lgen Я оновив свою відповідь. І не забудьте прочитати org-babel-detangledocstring, щоб зрозуміти мету та використання.
xuchunyang

Дякую за це роз’яснення. Я не зрозумів припущення, що вихідний код повинен бути відредагований у emacs, щоб дозволити зворотне переплутування (я використовував інший текстовий редактор для зміни вихідного коду). Він працює, як очікувалося зараз.
Lgen

Це приємна особливість, але не зовсім те, що я сподівався знайти. Я справді не можу вчинити коментарі # [[...]], оскільки вони не означають нічого, крім мене самого. Чи можна анотувати джерельний блок, щоб відірватися від цілого файлу, не вимагаючи коментаря до посилання? По суті просто insert-file-contents?
RJTK

2

Існує також org-tanglesync , який має набагато простіший метод синхронізації, ніжorg-babel-detangle

По суті, якщо блок пов’язаний із зовнішнім файлом, то кожного разу, коли цей блок редагується, також перевіряється зовнішній файл, і якщо виявлено різницю, користувачеві пропонується або відхилити, або перетягнути зовнішні зміни до органу sr src.

Це також має функції автоматичної обробки всіх заблокованих блоків у буфері. Я сподіваюся, що це допомагає.

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