Пилим уютный бложик на Emacs: Идея
В самом начале скажу, что я - не любитель пилить руководства, если у инструмента, о котором идет речь есть вменяемая документация на любом из языков, которым обучают в школе. Довольно забавно в 2017м году встречать все новые посты а-ля "Как установить Apache на Ubuntu". Цель этой серии постов - не научить тому, как это делается, а привлечь внимание сабжу и, может быть, заинтересовавшийся человек, дальше самостоятельно разберется с вопросом при помощи исчерпывающей документации по org-mode.
До нынешнего момента я менял блог раз в год или чаще на протяжении вот уже 5 с лишним лет. За это время я успел перебрать и Wordpress с прочими php-движками, и джангу, и на сегодняшний день могу с уверенностью сказать, что лучший опыт взаимодействия с блогом - генераторы статических сайтов.
Не буду долго рассказывать обо всем, что успел попробовать с тех пор, как попробовал Jekyll, скажу лишь, что все генераторы статических сайтов, которые мне попадались, были по-своему хороши, но у каждого из них свой круг почитателей, в который я по тем или иным причинам не попал. Кроме того, одним из аспектов, почему эту версию блога я решил пилить именно на Emacs с org-mode, стало то, что я не так уж часто выкладываю посты, но с удовольствием вожусь с самим блогом, а здесь в этом отношении - разгуляйся.
Я видел определенное количество блогов, полностью реализованных в Emacs, однако, как минимум, внешний вид большинства из них, производил если не отталкивающее впечатление, то уж точно возвращал в 90-е. Сам я тот еще дизайнер, однако, идея реализовать блог не выходя из редактора с приемлемым внешним видом, показалась мне интересным челленджем. Ну и, плюс ко всему, я имею слабость к лиспам. Не то, чтобы писать на Emacs Lisp сколько-нибудь сравнимо с той же Clojure или, на худой конец, Scheme, но отвлекает от PHP и других моих повседневных языков.
Надо сказать, что вполне неплохие по меркам емаксовых блогов экземпляры все же попадаются, например, этот блог о лиспе, smalltalk и вебе.
Итак, с предисловием покончено, можно рассказать о том, что же, собственно, должно быть реализовано и какими средствами:
- Ванильный org-mode. В сети существует много различных вариаций на
тему генерации статического блога на Emacs Lisp, но я хочу
пользоваться непосредственно
org-publish
. - HTML. Сам по себе
org-publish
генерит нечто несъедобное не только по эстетической составляющей, но и с точки зрения современных стандартов. Нет, оно, конечно, абсолютно валидно, однако даже иметь такое на жестком диске не очень-то улыбается. - Вменяемый внешний вид. Об этом много сказано выше, но сакцентирую еще раз на этом внимание.
Ну а теперь немного реализации того, о чем идет речь. В сети несложно найти примеры того, как преобразовать папку с org-файлами в набор html-файлов. Тем не менее, просто, чтобы информация была собрана в одном месте, положу сюда минимальный пример конфигурации.
(setq org-publish-project-alist `(("blog" :base-directory "~/blog/posts/" :publishing-directory "~/blog/public/" :publishing-function org-html-publish-to-html)))
Собственно, этого достаточно, чтобы M-x org-publish
создал пачку
html-файлов, соответствующих содержимому папки ~/blog/posts/
.
Как следует из названия переменной, org-publish-project-alist
-
список проектов, предназначенных для публикации. Каждый проект, в свою
очередь, тоже представляет из себя список, первым элементом которого
является строка с названием проекта, а остальными элементами - пары
ключ-значение. Учитывая отсутствие нормальных хешмапов в Emacs Lisp,
абсолютно нормально положение ключей на четных элементах списка -
извлечение производится конструкцией типа (plist-get (cdr project))
.
Проекты могут объединять множество вложенных проектов, тогда они
должны содержать свойство :components
, являющееся списком,
содержащим имена вложенных проектов в виде строк.
Подробнее об org-publish-project-alist
можно почитать здесь, в доке
по org-mode.
На этом достаточно подробное изложение того, что я хочу получить в итоге, можно считать исчерпанным и двигаться дальше.
Недавно я отказался от использования Disqus, равно как и любых других видов обратной связи на сайте.
Если вам есть что сказать по поводу прочитанного - можете написать на мою основную электронную почту i@nickey.ru, на данный момент это самый надежный способ связаться со мной.