Jak automatycznie sformatować blok kodu źródłowego w trybie organizacji

11

Kiedy używam trybu org do robienia notatek na temat książki, czasami kopiuję / wklejam fragmenty kodu do pliku notatki. Po wklejeniu to zrobię

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

Czy jest dla mnie rozwiązanie w trybie org, które po wklejeniu kodu #+BEGIN_SRC...#+END_SRCautomatycznie sformatuje blok kodu lub mogę użyć tylko jednego klucza, na przykład TABdo sformatowania (wcięcia) całego bloku kodu źródłowego?

Domyślnie TAB(wpisany w bloku, nieużywany C-c ') po prostu wyrównuje wszystkie linie 2 kolumny po #+BEGIN_SRCnagłówku, jeśli na początku drugiego wiersza są spacje, po prostu doda więcej spacji, nie będzie wciskał wszystkich linii jak 3 kroki.

CodyChan
źródło

Odpowiedzi:

7

Poniżej znajduje się trudne rozwiązanie, ale działa idealnie. W rzeczywistości jest to tylko funkcja, która symuluje twoje operacje i używa a, run-at-timeaby wywoływać ją co 10 sekund. Twoje zdrowie.

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

Oczywiście możesz wywoływać go co 1 sekundę, wystarczy zmienić 10 na 1.

Leu_Grady
źródło
Tak naprawdę nie potrzebuję run-at-time, w jaki sposób mogę powiązać TABklucz, aby zrobić to, aby zastąpić domyślny TABkiedy org-in-src-block-p. Domyślnie TABjest to związane, yas-expandale będzie działać tak, jak powiedziałem w moim poście.
CodyChan,
0

Oto kod, który napisałem, aby rozwiązać ten problem:

(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
źródło