Cara memformat otomatis blok kode sumber dalam mode-org

11

Ketika saya menggunakan mode-org untuk membuat catatan tentang sebuah buku, kadang-kadang saya akan menyalin / menempelkan beberapa cuplikan kode ke file catatan. Setelah menempelkannya, saya akan

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

Apakah ada solusi dalam mode-org bagi saya bahwa, setelah menempelkan kode #+BEGIN_SRC...#+END_SRC, akan secara otomatis memformat blok kode atau saya dapat menggunakan hanya satu kunci seperti TABuntuk memformat (indentasi) seluruh blok kode sumber?

Default TAB(diketik dalam blok, tidak menggunakan C-c ') hanya menyelaraskan semua baris 2 kolom setelah #+BEGIN_SRCheader, jika ada spasi di awal baris kedua, itu hanya akan menambah lebih banyak ruang, itu tidak akan membuat inden semua baris seperti 3 langkah.

CodyChan
sumber

Jawaban:

7

Di bawah ini adalah solusi yang sulit, tetapi bekerja dengan sempurna. Sebenarnya itu hanya fungsi yang mensimulasikan operasi Anda, dan gunakan run-at-timeuntuk membuatnya dipanggil setiap 10 detik. Bersulang.

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

Tentu saja, Anda dapat membuatnya dipanggil setiap 1 detik, cukup ubah 10 menjadi 1.

Leu_Grady
sumber
run-at-timeSebenarnya saya tidak perlu , bagaimana saya bisa mengikat TABkunci untuk melakukan ini untuk mengganti default TABketika org-in-src-block-p. Default TABterikat yas-expandtetapi akan melakukan hal-hal seperti yang saya katakan di posting saya.
CodyChan
0

Ini adalah kode yang saya tulis untuk menyelesaikan masalah ini:

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