Hat org irgendwelche "Inverse-Tangle" -Operationen, z. B. für die Zusammenarbeit mit Nicht-Org-Benutzern?


10

Ich möchte meine eigenen Notizen / Tests / Code in org schreiben und dann org-bable-tanglezur Erstellung von Quelldateien verwenden. Alle diese Dateien unterliegen jedoch der Versionskontrolle und können sich daher außerhalb meiner Organisationsumgebung ändern.

Ich möchte in der Lage sein, eine Reihe von srcBlöcken zu haben und mich dann mit einer Reihe verschiedener Dateien zu verwickeln, von denen jede zur Versionskontrolle verpflichtet ist. Gleichzeitig können Sie jedoch jede dieser Dateien wieder in meine Organisationsdatei "entwirren", nachdem Sie Änderungen an der Versionskontrolle vorgenommen haben.

Gibt es eine einfache Möglichkeit, dies zu tun? Ich denke jetzt darüber nach, mit zu spieleninsert-file-contents


Können Sie ein kleines Beispiel dafür geben, was Sie tun möchten? Es hört sich so an, als hätten Sie Codeblöcke in einer oder mehreren Organisationsdateien, und Sie möchten, dass die Datei oder Dateien, die aus dem Gewirr dieser Blöcke generiert wurden, mit Änderungen in den Organisationsdateien in die ursprünglichen Blöcke zerlegt werden.
David D.

Im Wesentlichen würde der Workflow folgendermaßen aussehen: (1) Schreiben Sie einen literarischen Code in org. (2) Verwickeln Sie diesen Code in eine oder mehrere Dateien. (3) git schreibt diese Dateien fest. (4) zu Mittag essen (5) git ziehen die Änderungen meines Kollegen. (6) "Inverse-Tangle" diese Änderungen zurück in Codeblöcke in meiner Organisationsdatei. (7) gehe zu (1).
RJTK

Antworten:


6

Ja, das ist es org-babel-detangle.

org-babel-detangle ist eine interaktive kompilierte Lisp-Funktion in ob-tangle.el.

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

Übertragen Sie Änderungen in der Quelldatei zurück zum Original in die Org-Datei. Dies erfordert, dass Codeblöcke mit Linkkommentaren verwickelt sind, die es ermöglichen, die ursprünglichen Codeblöcke zu finden.

Sie müssen das commentsHeader-Argument so einstellen link, dass es funktioniert, z.

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

Verwenden Sie dann M-x org-babel-tanglezum Exportieren des Codeblocks eine neue Datei mit dem Namen hello.rb, die ähnliche Inhalte wie die folgenden haben sollte

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

Schließlich offen hello.rbin Emacs, ändern hellozu hello world, und führen Sie M-x org-babel-detanglein hello.rb‚s - Puffer. Die Organisationsdatei wird aktualisiert

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

Könnten Sie genauer sagen (oder ein Beispiel geben), wie diese org-babel-detangle-Funktion verwendet wird? Ich habe mit Ihrem Ruby-Code versucht, M x org-babel-detangle zu verwenden, nachdem ich mich in hello.rb verheddert und den Code leicht geändert habe, aber ich habe den Fehler "org-babel-detangle: Falsches Argument: stringp, nil".
Lgen

@Lgen Ich habe meine Antwort aktualisiert. Und vergessen Sie nicht, die org-babel-detangleDokumentzeichenfolge zu lesen , um den Zweck und die Verwendung zu verstehen.
Xuchunyang

Vielen Dank für diese Klarstellung. Ich hatte die Annahme nicht verstanden, dass der Quellcode innerhalb von Emacs bearbeitet werden musste, um ein umgekehrtes Verwickeln zu ermöglichen (ich verwendete einen anderen Texteditor, um den Quellcode zu ändern). Es funktioniert jetzt wie erwartet.
Lgen

Das ist eine nette Funktion, aber nicht ganz das, was ich mir erhofft hatte. Ich kann die # [[]] Kommentare nicht wirklich festschreiben, da sie nichts anderes bedeuten als mich selbst. Ist es möglich, einen Quellblock mit Anmerkungen zu versehen, um eine gesamte Datei zu entwirren, ohne dass der Linkkommentar erforderlich ist? Im Wesentlichen nur insert-file-contents?
RJTK

2

Es gibt auch org-tanglesync , das eine viel einfachere Methode zum Synchronisieren hat alsorg-babel-detangle

Wenn ein Block in eine externe Datei verwickelt ist, wird jedes Mal, wenn dieser Block bearbeitet wird, auch die externe Datei überprüft. Wenn ein Unterschied festgestellt wird, wird der Benutzer aufgefordert, die externen Änderungen entweder abzulehnen oder in den org src-Block zu ziehen.

Dies hat auch Funktionen zum automatischen Verarbeiten aller verwickelten Blöcke in einem Puffer. Ich hoffe, es hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.