Temlibro
May 27

Temlibro в Obsidian, версия 1

Работа с Temlibro не должна быть жестко привязана к одному приложению. Все может резко измениться: разработчик забросит свое приложение, или приложение внезапно станет недоступно по какой-то другой причине, или вам потребуется работать в окружении, которое не будет поддерживать приложение, в котором вы ведете заметки... Скажем, у меня есть старенький 32-разрядный ноут, на котором установлен Линукс. Иногда удобней и безопасней брать такой комп, например, в поездки. И там нет и не будет Obsidian, только Vim или Emacs. С другой стороны, на Макбуке и на смартфоне хочется работать и с картинками, читать и конспектировать PDF, и использовать продвинутые возможности по оформлению текста. Так что я решил, что Temlibro должна работать в Vim и Obsidian, поэтому пытаюсь сделать возможной работу с ней в этих двух приложениях.

Для Vim я потихоньку ваяю плагин. Лучше бы, конечно, и для Obsidian написать полноценный плагин — и удобней, и быстрей. Но я пока не готов этому. Поэтому делаем «из подручных средств» — работа с Temlibro в Obsidian строится на использовании шаблонов плагина Templater и дополнительной синтаксической подсветки, реализуемой с помощью плагинов List Callouts и Dynamic Highlights. Да, в таком виде Temlibro работает небыстро, но у меня шаблоны пока справляются, и я готов терпеть некоторые тормоза некоторое время. :)

Чтобы настроить среду для ведения заметок Temlibro в Obsidian сперва нужно организовать структуру хранилища — требуется создать отдельные каталоги для ежедневных файлов, файлов тем, вложений и шаблонов:

  • assets — все вложения (картинки, PDF и т.п.) должны быть здесь;
  • journals — ежедневник (daily notes)
  • collections — файлы больших тем, вынесенных отдельно
  • templates — шаблоны для плагина Templater

На самом деле вы можете папки назвать, как вам удобно (у меня, например, они на эсперанто: tagoj, temoj, resursoj). Важно, чтобы файлы ежедневников были отдельно от остальных, тяжелые картинки и т.п. тоже отдельно, ну и Templater требует папку для своих шаблонов.

Плагины — без них в Обсидиане вообще никак. :) Поэтому включаем встроенный Daily notes и устанавливаем плагины Templater, List Callouts и Dynamic Highlights.

Настраиваем Daily notes, чтобы ежедневные заметки создавались в каталоге journals — нужно указать эту папку в настройках плагина в New file location. Там же нужно указать шаблон для файла ежедневника — в файле, создаваемом по этому шаблону, первой строкой должен идти §-заголовок с датой — формат даты можете задать самостоятельно:

  # § Дата

О шаблоне Daily notes ниже напишу подробнее.

В настройках самого Обсидиана (Files and links) указываем, что новые заметки нужно создавать в папке collections, а вложения нужно хранить в отдельной папке assets.

Теперь настроим пару плагинов так, чтобы §-ссылки красиво подсвечивались в тексте.

В настройках List Callouts добавляем собственный стиль списка: символ «§» и цвет выделения (по желанию, но я рекомендую задать тот же цвет, что используется как Accent color в разделе Appearance — он используется в том числе для выделения ссылок, а этот стиль списка и есть вариант ссылки в Temlibro).

Идем в настройки Dynamic Highlights и последовательно создаем два правила.

Первое правило:

  • Название: Superlink
  • Выражение для поиска: §\[[^\]]+\]
  • Цвет (нужно кликнуть на кружке между названием и выражением): #00000000 (цвета мы задаем в CSS)
  • Custom CSS:.Superlink { font-weight: bold !important; color: var(--text-faint) !important; }

Второе правило:

  • Название: Superlink-Inner
  • Выражение для поиска: (?<=§\[)([^\]]+)
  • Цвет: #00000000
  • Custom CSS:.Superlink-Inner { --font-weight: var(--link-weight); color: var(--link-color) !important; font-weight: var(--link-weight) !important; }

Ну, а теперь функциональность. Это плагин Templater.

Скачиваем шаблоны из GitHub Gists (справа есть кнопочка Download ZIP) и кладем все файлы в папку templates хранилища.

OpenParalink — переход по §-ссылке. Логика шаблона следующая: если существует только один заголовок в системе, равный тексту ссылки, то Обсидиан откроет файл с ним, если же таких заголовков несколько — будет открыта панель поиска по этому тексту в заголовках.

MoveTheme — перенос темы в отдельный файл. Если тема разрослась, и вы хотите собрать всю информацию по этой теме в одном месте, вы можете воспользоваться этим шаблоном. При его выполнении переносится текущая тема, в которой расположен курсор, от заголовка темы до следующего заголовка того же уровня, горизонтальной черты (---) или конца файла. Перенесенный текст будет заменен §-ссылкой на тему, а в конец перенесенного текста в файле темы будет добавлена §-ссылка исходный журнал.

MakeIndex — генерация файла index.md. Файл индекса распологается в корневой папке хранилища и содержит два раздела: список всех тем и список всех журналов. В начале скрипта шаблона есть три параметра, с помощью которых вы можете настроить заголовок самого файла (TitleHdr), название раздела с темами (ThemesHdr) и название раздела журналов (JournalHdr).

AutocompleteThemes — автодополнение в §-ссылках и заголовках. Может быть полезным для быстрого и безошибочного выбора уже существующей темы в заголовке или §-ссылке. §-ссылка на несуществующую тему в Temlibro смысла не имеет.

InsertParaLink — вставка §-ссылок с автодополнением. Позволяет выбрать существующую тему и вставляет в текст §-ссылку в формате §[тема]. Чтобы иметь возможность вставлять §-ссылки в формате списков, скопируйте этот шаблон под другим именем, и замените в конце его текста editor.replaceSelection("§[" + selected + "]"); на editor.replaceSelection("- § " + selected);.

DailyNote — шаблон для ежедневных заметок (должен содержать заголовок вида # § Дата, дата в этом шаблоне задается в формате ДН ДД МЕС ГГГГ, где ДН — день недели, ДД — день, МЕС — месяц, ГГГГ — год). Можете формат даты поменять на такой, какой вам нужен. Если хотите дату по-русски, как у меня, можете взять этот скрипт, положить его в Script files folder location плагина Templater (может быть тот же templates), и поменять заголовок в шаблоне на такой:

# § <% tp.user.fmtDates(tp, "ddd DD MMM YYYY", true) %>

Если вы хотите перенастроить или как-то доработать шаблоны, вот ссылка на документацию плагина Templater.

Шаблон DailyNotes нужно указать в настройках плагина Daily notes, остальные шаблоны добавляем в Templater — идем в настройки плагина Templater и добавляем их в разделе Template hotkeys. Затем открываем раздел настроек Hotkeys самого Обсидиана, и связываем удобные вам горячие клавиши с соответствующими вызовами шаблонов (только нужно выбирать вариант с Insert template, а не Create template).

Если все сделано правильно, у вас появятся клавиши для:

  • перехода по §-ссылке;
  • автодополнения §-ссылки или названия темы;
  • вставки §-ссылки;
  • обновления файла индекса;
  • переноса записи о теме в файл темы.

Для большего удобства использования можно еще установить плагин Hompage и сказать ему использовать файл index.md в качестве домашней страницы. Тогда по нажатию на кнопку с домиком будет открываться индекс. Дополнительно можно указать в настройках Homepage в секции Commands команду Templater: Insert templates/MakeIndex.md, тогда файл индекса будет автоматически обновляться при каждом открытии.