So formatieren Sie den Quellcodeblock automatisch im Organisationsmodus

11

Wenn ich den Organisationsmodus verwende, um Notizen zu einem Buch zu machen, kopiere ich manchmal einige Codefragmente und füge sie in die Notizdatei ein. Nach dem Einfügen werde ich

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

Gibt es für mich im org-Modus eine Lösung, die nach dem Einfügen von Code #+BEGIN_SRC...#+END_SRCautomatisch den Codeblock formatiert oder ich kann nur einen Schlüssel verwenden, TABum den gesamten Quellcodeblock zu formatieren (einzurücken)?

Die Standardeinstellung TAB(in Block eingegeben, nicht verwendet C-c ') ist, alle Zeilen 2 Spalten nach der #+BEGIN_SRCKopfzeile auszurichten. Wenn am Anfang der zweiten Zeile Leerzeichen stehen, werden nur weitere Leerzeichen hinzugefügt und nicht alle Zeilen wie in den drei Schritten eingerückt.

CodyChan
quelle

Antworten:

7

Unten ist eine harte Lösung, aber es funktioniert perfekt. Eigentlich ist es nur eine Funktion, die Ihre Operationen simuliert und mit a run-at-timealle 10 Sekunden aufruft. Prost.

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

Natürlich können Sie es alle 1 Sekunde aufrufen lassen, ändern Sie einfach 10 zu 1.

Leu_Grady
quelle
Ich brauche run-at-timeeigentlich nicht, wie kann ich den TABSchlüssel binden , um diese zu tun, um die Standardeinstellung zu ersetzen, TABwenn org-in-src-block-p. Die Standardeinstellung TABist gebunden, yas-expandaber es wird die Dinge tun, die ich in meinem Beitrag gesagt habe.
CodyChan
0

Dies ist der Code, den ich geschrieben habe, um dieses Problem zu lösen:

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