Como formatar automaticamente o bloco de código-fonte no modo organizacional

11

Quando estou usando o modo organizacional para fazer anotações sobre um livro, às vezes copio / colo alguns trechos de código no arquivo de anotações. Depois de colar, eu vou

1. `C-c '` to call `org-edit-special`
2. `C-x h` to mark all the source code
3. `TAB` to format it

Existe uma solução no modo organizacional para mim que, após colar o código #+BEGIN_SRC...#+END_SRC, ele formatará automaticamente o bloco de código ou eu posso usar apenas uma tecla, como TABformatar (recuar) todo o bloco de código-fonte?

O padrão TAB(digitado no bloco, sem usar C-c ') é apenas alinhar todas as linhas 2 colunas após o #+BEGIN_SRCcabeçalho; se houver espaços no início da segunda linha, apenas adicionará mais espaços, não recuará todas as linhas como as 3 etapas.

CodyChan
fonte

Respostas:

7

Abaixo está uma solução difícil, mas funciona perfeitamente. Na verdade, é apenas uma função que simula suas operações e usa a run-at-timepara fazer com que seja chamada a cada 10 segundos. Felicidades.

(defun indent-org-block-automatically ()
  (when (org-in-src-block-p)
   (org-edit-special)
    (indent-region (point-min) (point-max))
    (org-edit-src-exit)))

(run-at-time 1 10 'indent-org-block-automatically)

Claro, você pode fazer o chamado a cada 1 segundo, basta alterar 10 para 1.

Leu_Grady
fonte
run-at-timeNa verdade, não preciso , como vincular a TABchave para fazer isso e substituir o padrão TABquando org-in-src-block-p. O padrão TABestá vinculado a, yas-expandmas fará as coisas como eu disse no meu post.
CodyChan
0

Este é o código que escrevi para resolver este problema:

(defun udf/my-org-tab-dwim (&optional arg)
  (interactive)
  (or (org-babel-do-key-sequence-in-edit-buffer (kbd "TAB"))
      (org-cycle arg)))

(define-key org-mode-map
  (kbd "<tab>") #'udf/my-org-tab-dwim)
Kuwze
fonte