Литературное программирование
Офигенная картинка для привлечения внимания. Сова с титьками
Содержание
Трактат http://www.howardism.org/Technical/Emacs/literate-programming-tutorial.html Самое лучшее что я нашел, документация с офф.сайта слишком сухая и без примеров.
Вот ещё ничего https://caiorss.github.io/Emacs-Elisp-Programming/Org-mode-recipes.html http://cachestocaches.com/2018/6/org-literate-programming/
1 Один файл , один код
Начнем с простого создадим кодовый блок и экспортируем его в файл
import time print("Hello, today's date is %s" % time.ctime()) print('Two plus two is') return 2 + 2
В данном кодовом блоке используеться управляющие слово :tangle: yes
При запуске функции org-babel-tangle этот кусок будет перемещен в
файл litrus.python
Добавим простой отрезок на другом языке
(message "Hello World!")
Итак у нас два файла с расширение .el и .python , теперь укажем файл
напрямую :tangle src/main.py
print('Target main exist') return 2 + 2
И второй кусок
# Комментарий print("42")
Оба куска будут добавлены разделеные пробелами.
Также можно глобально указать свойство
# ,#+PROPERTY: tangle src/main.py
1.1 TODO Добавление результата а не кода
можно указать :file а формат результата это :results
1.2 TODO Разбросанные куски
Создадим кодовый блок с параметром #+NAME: counter-do
print("Hello!")
Создадим новый кодовый блок и разместим в нем существующий с помощью :noweb tangle
for i in range(0,10): <<counter-do>> <<do-counter>>
Причем в начале или дальше указан кусок кода он будет все равно вставлен.
print(i)
1.3 TODO Вставка в указанное место
1.4 TODO Использование результатов одного блока для работы второго
1.5 DONE Вычисление блоков не отдельно а вместе
Each block re-starts its interpreter every time you evaluate a
block. Use the :session
header parameter as a label and have all
blocks with that label use the same session.