Comment formater automatiquement le bloc de code source en mode org

11

Lorsque j'utilise le mode organisationnel pour prendre des notes sur un livre, je vais parfois copier / coller des extraits de code dans le fichier de notes. Après l'avoir collé, je vais

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

Existe-t-il une solution en mode org pour moi qui, après avoir collé du code #+BEGIN_SRC...#+END_SRC, formatera automatiquement le bloc de code ou je peux utiliser une seule clé TABpour formater (mettre en retrait) tout le bloc de code source?

La valeur par défaut TAB(tapée dans le bloc, sans utiliser C-c ') est simplement d'aligner toutes les lignes 2 colonnes après l'en- #+BEGIN_SRCtête, s'il y a des espaces au début de la deuxième ligne, cela ajoutera simplement plus d'espaces, il n'indentera pas toutes les lignes comme les 3 étapes.

CodyChan
la source

Réponses:

7

Voici une solution difficile, mais cela fonctionne parfaitement. En fait, c'est juste une fonction qui simule vos opérations, et utilisez un run-at-timepour le faire appeler toutes les 10 secondes. À votre santé.

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

Bien sûr, vous pouvez l'appeler toutes les 1 seconde, changez simplement 10 en 1.

Leu_Grady
la source
Je n'ai pas besoin en run-at-timefait, comment puis-je lier la TABclé pour faire cela pour remplacer la valeur par défaut TABquand org-in-src-block-p. La valeur par défaut TABest liée à yas-expandmais elle fera les choses comme je l'ai dit dans mon post.
CodyChan
0

Voici le code que j'ai écrit pour résoudre ce problème:

(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
la source