Come formattare automaticamente il blocco di codice sorgente in modalità org


11

Quando utilizzo la modalità org per prendere appunti su un libro, a volte copierò / incollerò alcuni frammenti di codice nel file delle note. Dopo averlo incollato, lo farò

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

Esiste una soluzione in modalità org per me che, dopo aver incollato il codice #+BEGIN_SRC...#+END_SRC, formatterà automaticamente il blocco di codice o posso usare solo una chiave TABper formattare (indentare) l'intero blocco di codice sorgente?

L'impostazione predefinita TAB(digitata in blocco, non usando C-c ') è solo allineare tutte le righe 2 colonne dopo l' #+BEGIN_SRCintestazione, se ci sono spazi all'inizio della seconda riga, aggiungerà solo più spazi, non indenterà tutte le righe come i 3 passaggi.

Risposte:


7

Di seguito è una soluzione difficile, ma funziona perfettamente. In realtà è solo una funzione che simula le tue operazioni e usa a run-at-timeper farla chiamare ogni 10 secondi. Saluti.

(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)

Certo, puoi farlo chiamare ogni 1 secondo, basta cambiare da 10 a 1.


In run-at-timerealtà non ho bisogno , come posso associare la TABchiave per fare questi per sostituire l'impostazione predefinita TABquando org-in-src-block-p. L'impostazione predefinita TABè vincolata, yas-expandma farà le cose come ho detto nel mio post.
CodyChan,


0

Questo è il codice che ho scritto per risolvere questo 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)
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.