组织是否有任何“反缠结”操作,例如与非组织用户进行协作?


10

我想在org中编写自己的注释/测试/代码,然后用于org-bable-tangle生成源文件。但是,所有这些文件都受版本控制,因此可以从我的组织环境外部进行更改。

我希望能够具有多个src块,然后纠缠到一堆不同的文件,每个文件都将提交给版本控制。但同时,在从版本控制中提取任何更改后,能够将这些文件中的每个“解缠”回我的组织文件中。

有没有简单的方法可以做到这一点?我现在正在考虑与insert-file-contents


您能否举例说明您要做什么?听起来您在一个或多个组织文件中有代码块,并且您希望通过这些块的纠缠而生成的一个或多个文件通过组织文件中的更改分解为原始块。
David D.

本质上,工作流程将是这样的:(1)在org中编写一些识字代码。(2)将代码纠缠到一个或多个文件。(3)git提交那些文件。(4)吃午饭(5)git拉我同事的零钱。(6)将这些更改“反缠结”到我的org文件中的代码块中。(7)转到(1)。
RJTK '18年

Answers:


6

是的,是org-babel-detangle

org-babel-detangle是的交互式Lisp编译函数 ob-tangle.el

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

将源文件中的更改传播回原始到组织文件。这要求将代码块与链接注释缠结在一起,这样才能找到原始代码块。

您需要设置commentsheader参数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中打开,更改hellohello world,然后M-x org-babel-detanglehello.rb的缓冲区中运行。组织文件将被更新

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

您能否更精确地(或举个例子)如何使用此org-babel-detangle函数。在缠结到hello.rb并轻轻修改了代码后,我尝试使用您的ruby代码使用M x org-babel-detangle,但是我遇到了错误“ org-babel-detangle:错误的类型参数:stringp,nil”。
Lgen

@Lgen我已经更新了答案。并且不要忘记阅读org-babel-detangle的文档字符串来了解目的和用法。
xuchunyang '18 -10-9

感谢您的澄清。我不理解这样的假设,即必须在emacs中编辑源代码以允许反向纠结(我正在使用另一个文本编辑器来修改源代码)。现在可以正常工作了。
Lgen

这是一个不错的功能,但与我希望找到的功能不完全相同。我真的不能提交#[[...]]注释,因为它们对我自己没有任何意义。是否可以注释源块以从整个文件中解散而不需要链接注释?本质上只是insert-file-contents
RJTK '18 -10-9

2

还有org-tanglesync,它的同步方法比简单得多。org-babel-detangle

本质上,如果某个块与外部文件纠缠在一起,那么每次对该块进行编辑时,都会同时检查该外部文件,并且如果检测到差异,则会提示用户拒绝外部更改或将外部更改拉入org src块。

它还具有自动处理缓冲区中所有纠结块的功能。希望对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.