Emacs как средство публикации записей
Предисловие
Итак, это наконец-то случилось. Допилил экспорт из Emacs в html с нормальным sitemap’ом. Теперь буду как все социокуртизанки постить про всё подряд. Ага.
Что использовалось
Для публикации записей использован замечательный org-mode.
Для запиливания были использованы сайт org-mode и stackoverflow.
Как сделано
Итак, начнём.
Базовые штуки
projects.el
Именно в этом файле находится основная конфигурация проекта.
Кроме материалов мануала ничего не использовалось, поэтому комментировать нечего.
Немного фарш, конечно, и raw html в конфиге. Но с этим я пока возиться не стал. Может быть когда-нибудь сделаю нормально.
customized-org-html.el
-
org-export-html
Ввиду того, что оригинальный org-export-html делает пару вещей не так, пришлось сделать свою функцию экспорта (копипаста оригинала, C-s и C-S-%). Также пришлось сделать собственную функцию публикации.
-
Ссылки на файлы
Org-mode умеет красиво делать ссылки на файлы (в моём случае — картинки). Но не очень красиво их заворачивает при экспорте. Слава stackoverflow, я нашёл решение. Приведу здесь код
(defun org-custom-link-img-follow (path) (org-open-file-with-emacs (format "../images/%s" path))) (defun org-custom-link-img-export (path desc format) (cond ((eq format 'html) (format "<img src=\"/images/%s\" alt=\"%s\"/>" path desc)))) (org-add-link-type "img" 'org-custom-link-img-follow 'org-custom-link-img-export)
UPD Также добавил тип ссылок с превью img-t. И сейчас же его использую, чтобы потом возвращаться к тексту поста. Автор фотографии — Глеб Гончаров.
Разные плюшки
С основной частью мы разобрались, теперь про остальное.
Стили
Для внешнего вида решил пользовать pure css. Приятный и простой css-framework, показался мне симпатичным.
Подключается всё это дело через шаблоны (org-template). Вот код шаблона
#+AUTHOR: Emperor
#+EMAIL: valentine.emperor@gmail.com
#+STYLE: <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/pure/0.4.2/pure-min.css">
#+STYLE: <link rel="stylesheet" type="text/css" href="/stylesheets/post-style.css" />
#+STYLE: <link rel="stylesheet" type="text/css" href="/stylesheets/post-layout.css" />
#+STYLE: <link rel="stylesheet" type="text/css" href="/stylesheets/menu.css" />
#+STYLE: <script async="true" src="/javascript/run_prettify.js"></script>
#+STYLE: <link rel="stylesheet" type="text/css" href="/stylesheets/google-code-prettify/desert-theme.css" />
#+OPTIONS: toc:t
#+LANGUAGE: ru
-
Подсветка кода
Для подсветки кода используется google-code-prettify. Как видно выше, в шаблоне подключаются соответствующие .js и .css. Также перепилена функция экспорта кода.
Меню
Для меню у меня отдельный кусок html-кода, который нагло украден со страницы соответствующего layout’а pure css. Подключается отдельным org-файлом. К сожалению, приходится подключать вручную в каждом файле поста. Щито поделать, десу.
Карта сайта (aka index.html)
Тут основные настройки прописаны в projects.el.
Стоит только отметить, что для sitemap’а отдельный шаблон. Ради этого была препилена функция генерации sitemap’а. Приведу текст шаблона.
#+AUTHOR: Emperor
#+EMAIL: valentine.emperor@gmail.com
#+STYLE: <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/pure/0.4.2/pure-min.css">
#+STYLE: <link rel="stylesheet" type="text/css" href="stylesheets/sitemap-style.css" />
#+STYLE: <link rel="stylesheet" type="text/css" href="stylesheets/sitemap-layout.css" />
#+HTML_CONTAINER: div
#+OPTIONS: toc:nil
#+LANGUAGE: ru
Очевидно, что отличается он только layout’ом.
Что дальше
Теперь надо прикрутить комменты из google+ добавил disqus убрал комменты (пишите на почту), angular/jquery/что ещё там напридумывали для жабоскрапта для некоторой интерактивности, допилить стили. В первую очередь надо прикрутить сворачиваемость кода и содержания.