Editando vários blocos de origem em um buffer

10

Eu tenho vários blocos de origem que estão todos emaranhados no mesmo arquivo. Quando invoco C-c 'dentro de um bloco, somente esse bloco específico é mostrado em um novo buffer.

Existe a possibilidade de mostrar todas as partes deste arquivo dentro desse buffer (em vez de apenas esse snippet específico)?

Exemplo:

#+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

Se eu acertar C-c 'no primeiro bloco, recebo:

(defvar *ok* "")

mas eu quero:

(defvar *ok* "")
(defun add-one (n) (+ 1 n))
beyeran
fonte
2
Existem funções org-babel-tangle-jump-to-org org-babel-detangleque afirmam fazer isso se você emaranhar com comentários de link ( :comments linkno bloco de origem). Parece que não consigo fazê-los funcionar direito.
Erikstokes

Respostas:

2

O que você procura é um recurso de edição bidirecional que sobrevive às edições durante a viagem de ida e volta e não apenas uma saída unidirecional comum aos comandos de emaranhar e desembaraçar. A melhor solução que eu encontrei é texto lenticular que está disponível como o pacote lentic em Melpa.

Usuário Emacs
fonte
2

Adicione este argumento de cabeçalho

#+PROPERTY: header-args+ :comments link

Emaranhado. Agora você pode editar o próprio arquivo emaranhado e emitir org-babel-detanglepara recuperar tudo no arquivo organizacional.

Toothrot
fonte
2

Posso recomendar o org-tanglesync , que tem um método muito mais simples de sincronizar do queorg-babel-detangle

Essencialmente, se um bloco é emaranhado em um arquivo externo, toda vez que esse bloco é editado, o arquivo externo também é verificado e, se um diff for detectado, o usuário será solicitado a rejeitar ou puxar as alterações externas para o bloco org src .

Isso também possui funções para processar automaticamente todos os blocos emaranhados em um buffer.

Mehmet Tekman
fonte