Org ha delle operazioni di "groviglio inverso", ad esempio per collaborare con utenti non-org?


10

Vorrei scrivere le mie note / test / codice in org e quindi utilizzare org-bable-tangleper produrre file di origine. Tuttavia, tutti questi file sono soggetti al controllo della versione e quindi soggetti a modifiche al di fuori del mio ambiente organizzativo.

Vorrei essere in grado di avere un numero di srcblocchi e quindi aggrovigliare in un mucchio di file diversi, ognuno dei quali sarebbe impegnarsi nel controllo della versione. Ma allo stesso tempo, essere in grado di "districare" ciascuno di questi file nel mio file org dopo aver rimosso tutte le modifiche dal controllo della versione.

C'è un modo semplice per farlo? Ora sto pensando di giocare coninsert-file-contents


Potresti fornire un piccolo esempio di ciò che stai chiedendo di fare? Sembra che tu abbia blocchi di codice in uno o più file organizzativi e desideri che il file o i file generati dal groviglio di questi blocchi vengano disassemblati nei blocchi originali con modifiche ai file organizzativi.
David D.

In sostanza il flusso di lavoro sarebbe così: (1) scrivere un codice alfabetico in org. (2) aggrovigliare quel codice su uno o più file. (3) git commette quei file. (4) pranzare (5) git tirare le modifiche del mio collega. (6) "inverse-groviglio" quelle modifiche di nuovo in blocchi di codice nel mio file org. (7) vai a (1).
RJTK,

Risposte:


6

Sì, lo è org-babel-detangle.

org-babel-detangle è una funzione Lisp compilata interattiva in ob-tangle.el.

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

Propagare le modifiche nel file sorgente indietro al file Org. Ciò richiede che i blocchi di codice siano aggrovigliati con i commenti sui collegamenti che consentono di trovare i blocchi di codice originali.

È necessario impostare l' commentsargomento header linkper farlo funzionare, ad esempio,

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

quindi utilizzare M-x org-babel-tangleper esportare il blocco di codice, hello.rbverrà creato un nuovo file chiamato , dovrebbe avere contenuti simili come il seguente

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

Infine, apri hello.rbin Emacs, hellopassa a hello worlded esegui M-x org-babel-detanglenel hello.rbbuffer di. Il file dell'organizzazione verrà aggiornato

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

Potresti essere più preciso (o fare un esempio) su come usare questa funzione org-babel-districare. Ho provato con il tuo codice ruby ​​a usare M x org-babel-detangle dopo aver aggrovigliato in hello.rb e aver modificato leggermente il codice ma ho un errore "org-babel-detangle: argomento di tipo errato: stringp, nil".
Lgen

@Lgen ho aggiornato la mia risposta. E non dimenticare di leggere org-babel-detanglela documentazione per capire lo scopo e l'uso.
Xuchunyang,

Grazie per questo chiarimento. Non avevo capito il presupposto che il codice sorgente dovesse essere modificato all'interno di emacs per consentire il groviglio inverso (stavo usando un altro editor di testo per modificare il codice sorgente). Funziona come previsto ora.
Lgen,

Questa è una bella funzionalità, ma non è proprio quello che speravo di trovare. Non posso davvero impegnare i commenti # [[...]] poiché non significano nulla tranne me stesso. È possibile annotare un blocco sorgente per districarsi da un intero file senza richiedere il commento al collegamento? Essenzialmente solo insert-file-contents?
RJTK

2

Esiste anche org-tanglesync , che ha un metodo di sincronizzazione molto più semplice diorg-babel-detangle

Essenzialmente se un blocco viene aggrovigliato a un file esterno, ogni volta che quel blocco viene modificato viene controllato anche il file esterno e se viene rilevato un diff, all'utente viene richiesto di rifiutare o estrarre le modifiche esterne nel blocco org src.

Questo ha anche funzioni per elaborare automaticamente tutti i blocchi aggrovigliati in un buffer. Spero possa essere d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.