Кращий метод зробити черне́тку


Доба́вив у Makefile декілька прикольних дрібни́ць для роботи з черне́тками.

Що це

Що взагалі значить «черне́тка» у контексті Jekyll?

  • Лежить не у _posts, а у _drafts
  • У черне́тки зазвичай немає дати
  • Черне́тки можна побачити, якщо зробити jekyll build --drafts
  • Черне́тку можна закоммітити, але в прода́кшен вона не попаде́

Для мене останній пункт є головним. Черне́тки потрібні там, де мені треба буде зробити перерву у написа́нні посту. Ну, наприклад, якщо я пишу щось довге. Або якщо я не вирішив остаточно, коли і як я буду робити публікацію.

Під час звичайної публікації поста я створюю новий файл поста (користуючись своїми методами автоматизації), пишу в нього текст, роблю звичайні git add, git commit та git push, і все.

Пост, який ще не потрапив в коммі́т і не пішов на прода́кшен — це «черне́тка» у широкому сенсі цього слова, але не ота хитра хрінь, про яку далі.

Як це

Спочатку я роблю щось таке:

$ slug=better-drafts make draft
echo "---\ntitle: better-drafts\nplaceholder: here\n---\n\n..." > _drafts/better-drafts.md

Це створює черне́тку з заданим ім’ям файлу, якийсь мінімальний документ з front matter.

Щось таке:

---
title: better-drafts
date: 2021-10-07 17:36:25 +03:00
---

...

Чесно кажучи, title могло б виглядати краще, але я все одно його завжди редакту́ю. Ну і ось цей от placeholder: here є компромісом, але без нього поки ніяк.

Далі я, зазвичай, хочу відкрити це в редакторі (в мене це найчастіше Geany). Щоб це зробити швидше, не витрачаючи зусиль на вибір або копіювання назви файлу, я роблю таку команду:

$ make geany
git st --porcelain | egrep '(_posts|_drafts)' | cut -c 4- | xargs -L1 geany

Це просто запустить geany _drafts/better-drafts.md і відкриє нову вкладку.

Далі, звісно, я пишу собі контент. Якщо захо́чу подивитись, що там у мене виходить, чи добре все виглядає і чи не налажа́в я з Markdown, то для цього теж є готовий target:

$ make up
jekyll build --drafts --watch

Мені легше запам’ятати назви make post, make draft та навіть оце make up, аніж параметри build --drafts --watch. Ладно, по́фіг. Це була сама тупа частина посту :)

Магія

Пишу, роблю комміти для проміжних версій, відклада́ю черне́тку у довгий ящик. Нарешті, магія:

$ make pub
[ -f _drafts/better-drafts.md ]
mv _drafts/better-drafts.md _posts/2021/2021-10-07-better-drafts.md
sed -i "s/^placeholder: here/date: 2021-10-07 17:36:25 +03:00/" _posts/2021/2021-10-07-better-drafts.md

Ім’я файлу черне́тки опціона́льне; якщо його не вказувати, буде використаний якийсь (рандомний) файл з _drafts, лол. (Це може мати сенс, тільки якщо у вас там лише одна черне́тка).

Ну і, як бачите, дата встановлюється саме під час make pub.

Ну і що

Не знаю, як це словами передати. Дуже приємно поєднувати типовий підхід генераторів статичних сайтів з усякою дрібною автоматиза́цією.

Коротше кажучи, зацініть мій Makefile :)