Cómo formatear automáticamente el bloque de código fuente en modo org

11

Cuando uso el modo org para tomar notas sobre un libro, a veces copio / pego algunos fragmentos de código en el archivo de notas. Después de pegarlo, voy a

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

¿Hay una solución en el modo org para mí que, después de pegar el código #+BEGIN_SRC...#+END_SRC, formateará automáticamente el bloque de código o puedo usar solo una tecla como TABformatear (sangrar) todo el bloque de código fuente?

El valor predeterminado TAB(escrito en bloque, sin usar C-c ') es solo alinear todas las líneas 2 columnas después del #+BEGIN_SRCencabezado, si hay espacios al comienzo de la segunda línea, solo agregará más espacios, no sangrará todas las líneas como los 3 pasos.

CodyChan
fuente

Respuestas:

7

A continuación se muestra una solución difícil, pero funciona perfectamente. En realidad, es solo una función que simula sus operaciones, y utiliza a run-at-timepara hacer que se llame cada 10 segundos. Salud.

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

Por supuesto, puede hacer que se llame cada 1 segundo, solo cambie 10 a 1.

Leu_Grady
fuente
En realidad no necesito run-at-time, ¿cómo puedo vincular la TABclave para hacer esto para reemplazar el valor predeterminado TABcuando org-in-src-block-p? El valor predeterminado TABestá obligado, yas-expandpero hará las cosas como dije en mi publicación.
CodyChan
0

Este es el código que escribí 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
fuente