Emacs, скрипт экспорта файлов из org в html

Давно и много пользуюсь великолепным org-mode в Emacs. Иногда использую его для подготовки небольших наборов связанных между собой гиперссылками наборов HTML страничек. Всегда готовил странички, а потом экспортировал каждую вручную. Недавно подготовил простенький shell скриптик для автоматизации этого процесса.

Скрипт

Сначала подготовим простенькую elisp функцию, которая будет дергаться из shell скрипта:

(defun eik/make-html  (fname)
  "Doc string"
  (interactive)
  (find-file fname)
  (setq org-export-run-in-background t)
  (org-export-as-html 3 t nil nil nil)
  )

Функция открывает файл, имя которого передано ей в качестве аргумента, и экспортирует его в html.

В shell скрипте делается следующее:

  1. Файлы с префиксом links копируются во временный директорий.
  2. Переход во временный директорий
  3. Для каждого файла во временном директории в начало добавляется общий заголовок, при желании можно добавить и футер и строку навигации.
  4. Для каждого файла вызывается emacs в batch режиме с вызовом нужной elisp-функции.

Текст shell-скрипта:

#! /bin/bash
# Copyright Evgeny Kazanov 2012

DIRIN="$HOME/_wiki/org"
DIROUT="/tmp/make_links"
FILE_EL="$HOME/lib/make_links/make_links.el"
FILE_HD="$HOME/lib/make_links/header.org"
FILE_FT="$HOME/lib/make_links/footer.org"
FILE_NAV="$HOME/lib/make_links/navigation_bar.org"
FILE_TMP_BODY="tmp_body.org"

mkdir $DIROUT
rm $DIROUT/*
cp $DIRIN/links*.org $DIROUT
cd $DIROUT

for F in `ls links*.org`
do
    echo $F
    mv $F $FILE_TMP_BODY
    cat $FILE_HD > $F
    cat $FILE_TMP_BODY >> $F
    cat $FILE_FT >> $F
    emacs --batch -l $FILE_EL --eval "(eik/make-html \"$F\")"
done

mv links_index.html index.html

exit 0

В конце скрипта (здесь не приведено, можно добавить команды копирования в нужные места. У меня, например, полученные html файлы копируются в поддиректорию Dropbox и по ssh на мой хостинг.)

Заключение. Что можно улучшить.

Все работет хорошо. Но. Поскольку в скрипте есть небыстрые операции (как сам экспорт, так и копирование по ssh), планиирую переделать скрипт с испольованием команды make. Так, чтобы операции проводились только с измененными файлами.

Опубликовано: May 1, 2012

Комментарии:


Комментировать:

Имя:

Комментарий: