Có phải org có bất kỳ hoạt động nghịch đảo nào của Viking không, ví dụ như để cộng tác với người dùng không sử dụng org?


10

Tôi muốn viết ghi chú / kiểm tra / mã của riêng tôi trong org và sau đó sử dụng org-bable-tangleđể tạo các tệp nguồn. Tuy nhiên, tất cả các tệp này đều chịu sự kiểm soát phiên bản và do đó có thể thay đổi từ bên ngoài môi trường org của tôi.

Tôi muốn có thể có một số srckhối và sau đó gắn vào một loạt các tệp khác nhau, mỗi tệp sẽ được cam kết kiểm soát phiên bản. Nhưng đồng thời, có thể "gỡ rối" từng tệp này trở lại tệp org của tôi sau khi lấy bất kỳ thay đổi nào từ kiểm soát phiên bản.

Có cách nào đơn giản để làm điều này? Bây giờ tôi đang xem xét chơi vớiinsert-file-contents


Bạn có thể cung cấp một ví dụ nhỏ về những gì bạn đang yêu cầu làm? Có vẻ như bạn có các khối mã trong một hoặc nhiều tệp org và bạn muốn tệp hoặc tệp được tạo từ mớ của các khối này tách rời thành các khối ban đầu với các thay đổi trong tệp org.
David D.

Về cơ bản quy trình làm việc sẽ như thế này: (1) viết một số mã biết chữ trong org. (2) rối mã đó đến một hoặc nhiều tệp. (3) git cam kết những tập tin đó. (4) ăn trưa (5) git kéo thay đổi của đồng nghiệp của tôi. (6) "nghịch đảo" những thay đổi đó trở lại thành các khối mã trong tệp org của tôi. (7) goto (1).
RJTK

Câu trả lời:


6

Vâng, đó là org-babel-detangle.

org-babel-detangle là một hàm Lisp được biên dịch tương tác trong ob-tangle.el.

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

Tuyên truyền những thay đổi trong tệp nguồn trở lại bản gốc cho tệp Org. Điều này đòi hỏi các khối mã bị rối với các nhận xét liên kết cho phép tìm thấy các khối mã gốc.

Bạn cần đặt commentsđối số tiêu đề linkđể làm cho nó hoạt động, ví dụ:

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

Sau đó sử dụng M-x org-babel-tangleđể xuất khối mã, một tệp mới có tên hello.rbsẽ được tạo, nó sẽ có nội dung tương tự như sau

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

Cuối cùng, mở hello.rbtrong Emacs, thay đổi hellođến hello world, và chạy M-x org-babel-detangletrong hello.rb's đệm. Tập tin org sẽ được cập nhật

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

Bạn có thể chính xác hơn (hoặc đưa ra một ví dụ) về cách sử dụng chức năng org-babel-detangle này. Tôi đã thử với mã ruby ​​của bạn để sử dụng M x org-babel-detangle sau khi vướng vào hello.rb và sửa đổi mã nhẹ nhưng tôi gặp lỗi "org-babel-detangle: Sai loại đối số: stringp, nil".
Lgen

@Lgen Tôi đã cập nhật câu trả lời của tôi. Và đừng quên đọc org-babel-detanglechuỗi tài liệu để hiểu mục đích và cách sử dụng.
xuchunyang

Cảm ơn đã làm rõ điều này. Tôi đã không hiểu giả định rằng mã nguồn phải được chỉnh sửa trong emacs để cho phép rối ngược (tôi đang sử dụng một trình soạn thảo văn bản khác để sửa đổi mã nguồn). Nó hoạt động như mong đợi bây giờ.
Lgen

Đây là tính năng hay, nhưng không hoàn toàn là những gì tôi đã hy vọng tìm thấy. Tôi thực sự không thể đưa ra các nhận xét # [[...]] vì chúng không có ý nghĩa gì ngoại trừ bản thân tôi. Có thể chú thích một khối nguồn để tách ra khỏi toàn bộ tệp mà không yêu cầu nhận xét liên kết không? Thực chất chỉ là insert-file-contents?
RJTK

2

Ngoài ra còn có org-tanglesync , có phương thức đồng bộ hóa đơn giản hơn nhiều so vớiorg-babel-detangle

Về cơ bản nếu một khối bị vướng vào một tệp bên ngoài, thì mỗi khi khối đó được chỉnh sửa, tệp bên ngoài cũng được kiểm tra và nếu phát hiện ra một khác biệt, người dùng sẽ được nhắc từ chối hoặc kéo các thay đổi bên ngoài vào khối org src.

Điều này cũng có chức năng tự động xử lý tất cả các khối rối trong bộ đệm. Tôi hy vọng nó sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.