Edycja wielu bloków źródłowych w jednym buforze

10

Mam wiele bloków źródłowych, które wszystkie są zaplątane w ten sam plik. Kiedy wywołuję C-c 'wewnątrz jednego bloku, tylko ten konkretny blok jest wyświetlany w nowym buforze.

Czy istnieje możliwość pokazania wszystkich części tego pliku w tym buforze (zamiast tylko tego konkretnego fragmentu)?

Przykład:

#+begin_src emacs-lisp :tangle foo.el
(defvar *ok* "")
#+end_src

This is where the variable is stored...
#+begin_src emacs-lisp :tangle foo.el
(defun add-one (n) (+ 1 n))
#+end_src

Jeśli uderzę C-c 'w pierwszym bloku, otrzymam:

(defvar *ok* "")

ale ja chcę:

(defvar *ok* "")
(defun add-one (n) (+ 1 n))
Beyeran
źródło
2
Istnieją funkcje, org-babel-tangle-jump-to-org org-babel-detanglektóre twierdzą, że to robią, jeśli splątujesz z komentarzami do linku ( :comments linkw bloku źródłowym). Nie mogę sprawić, żeby działały prawidłowo.
erikstokes

Odpowiedzi:

2

To, czego szukasz, to dwukierunkowa funkcja edycji, która przetrwa zmiany podczas podróży w obie strony, a nie tylko jednokierunkowe wyjście wspólne dla poleceń splątania i rozplątywania. Najlepszym rozwiązaniem, jakie znalazłem, jest tekst lentikularny, który jest dostępny jako pakiet lentic na MELPA.

Użytkownik Emacsa
źródło
2

Dodaj ten argument nagłówka

#+PROPERTY: header-args+ :comments link

Splot. Możesz teraz edytować sam splątany plik i wydać org-babel-detanglepolecenie powrotu do pliku org.

Toothrot
źródło
2

Mogę polecić org-tanglesync , który ma znacznie prostszą metodę synchronizacji niżorg-babel-detangle

Zasadniczo, jeśli blok jest splątany z plikiem zewnętrznym, to za każdym razem, gdy ten blok jest edytowany, plik zewnętrzny jest również sprawdzany, a jeśli wykryta zostanie różnica, użytkownik jest monitowany o odrzucenie lub pobranie zmian zewnętrznych do bloku org src .

Ma również funkcje automatycznego przetwarzania wszystkich splątanych bloków w buforze.

Mehmet Tekman
źródło