Як автоматично відформатувати блок вихідного коду в org-режимі


11

Коли я використовую org-режим, щоб робити нотатки про книгу, іноді я копіюю / вставляю фрагменти коду у файл примітки. Після приклеювання я буду

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

Чи є у мене в org-режимі рішення, що після вставлення коду в #+BEGIN_SRC...#+END_SRCвін автоматично відформатує блок коду або я можу використовувати лише одну клавішу, наприклад, TABдля форматування (відступу) цілого блоку вихідного коду?

За замовчуванням TAB(набраний у блоці, не використовується C-c ') - це просто вирівняти всі рядки 2 стовпці після #+BEGIN_SRCзаголовка, якщо на початку другого рядка є пробіли, він просто додасть пробіли, він не буде відступати від усіх рядків, як 3 кроки.

Відповіді:


7

Нижче - важке рішення, але воно працює ідеально. Насправді це лише функція, яка моделює ваші операції, і використовуйте її, run-at-timeщоб викликати її кожні 10 секунд. Ура.

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

Звичайно, ви можете зателефонувати кожні 1 секунду, просто поміняйте 10 на 1.


run-at-timeНасправді мені не потрібно , як я можу прив’язати TABключ, щоб зробити це, щоб замінити типовий TABчас, коли org-in-src-block-p. Типовий TABзв'язаний, yas-expandале він буде робити те, як я вже говорив у своєму дописі.
CodyChan


0

Це код, який я написав для вирішення цієї проблеми:

(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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.