Snippets. Новый плагин для OutWiker

Развитие OutWiker продолжается, наконец-то я могу показать то, над чем работал с декабря прошлого года.
Я очень давно собирался сделать плагин, который бы позволял вставлять на страницы заранее подготовленный шаблонный текст, и вот, наконец, этот плагин готов. Называется он Snippets, для его работы требуется последняя (на момент написания этих строк) нестабильная версия OutWiker, т.е. OutWiker 2.0.0.808.
Этот плагин я довольно долго вылизывал с точки зрения интерфейса, чтобы сократить количество кликов, которые бы пришлось сделать пользователю при использовании этого плагина. На странице плагина Snippets вы можете прочитать подробное описание всех его возможностей, а здесь я кратко расскажу, что он умеет, и как им пользоваться.
После установки плагина Snippets в главном меню программы OutWiker появится новый раздел — «Шаблоны». В этом меню первые три пункта предназначены для работы с шаблонами, а после них будут добавляться шаблоны, которые вы будете создавать. Шаблоны могут быть сгруппированы в папки, поэтому меню «Шаблоны» может иметь вложенные подменю. Вот, например, как это меню выглядит в данный момент у меня:
Чтобы создать шаблон, нужно выбрать пункт меню «Шаблоны — Управление шаблонами», после чего откроется диалог, в котором можно будет создавать папки для шаблонов и сами шаблоны.
Сохранять обычный текст, который бы не мог изменяться, не так интересно, хотелось сделать, чтобы шаблон мог подстраиваться под каждое конкретное использование. Поэтому в шаблон была добавлена возможность использовать переменные и некоторые языковые конструкции. Когда я думал о том, какой синтаксис выбрать для задания таких переменных, то не хотелось изобретать велосипед, а использовать синтаксис, который может быть уже знаком пользователям (и даже если синтаксис будет незнаком, то зачем плодить сущности?) Подумав еще немного, решил сделать следующий логический шаг, и не писать свой парсер шаблона, а использовать готовую библиотеку для генерации шаблонного текста. В качестве такого парсера я выбрал библиотеку Jinja2, которая может быть знакома многим веб-программистам на языке Python. Обычному пользователю об этом задумываться не надо, но если вы хотите выжать из шаблонов максимум возможностей, то имейте в виду, что все возможности этой библиотеки доступны, но большинство этих возможностей просто не показаны в интерфейсе плагина.
Самое главное, что умеет плагин Snippets — это использовать переменные в тексте шаблона. На предыдущей картинке в выбранном шаблоне видны две такие переменные: message и title, которые в тексте шаблона оборачиваются двумя фигурными скобками.
Если вы на какой-нибудь странице выберите пункт меню «Шаблоны», соответствующий созданному шаблону, то вам будет предложено задать значения этих переменных в открывшемся диалоге:
К сожалению, из-за ограничений библиотеки Jinja имена переменных могут содержать в себе только латинские буквы, цифры и знак подчеркивания (есть подозрение, что если я когда-нибудь переведу OutWiker на Python 3.x, то это ограничение будет снято), при этом в плагине Snippets добавлено еще одно ограничение — имена переменных должны начинаться с буквы.
В правой части диалога вы можете увидеть текст, который будет вставлен на страницу после нажатия кнопки «OK».
В качестве небольшого лайфхака намекну, что этот текст не обязательно вставлять на страницу, вы можете скопировать сгенерированный текст в буфер обмена и вставить его в другое приложение, поэтому вызов шаблона работает даже в том случае, если у вас не открыта никакая заметка.
Кроме переменных, которые вы сами задаете в тексте шаблона, есть еще встроенные переменные, имена которых начинаются с двойного подчеркивания. Значения этих переменных зависят от текущей страницы и ее свойств. Например, это может быть тип страницы, дата последней правки страницы и т.д. Полный список встроенных переменных вы можете увидеть в окне управления шаблонами, если нажмете на соответствующую кнопку:
Кроме переменных через интерфейс плагина вы можете вставлять еще пару конструкций из библиотеки Jinja: оператор if и include (для вставки текста одного шаблона в другой), но остальные обширные возможности этой библиотеки я не стал выставлять на показ, чтобы не пугать обилием непонятных операторов неподготовленных пользователей.
Просто для иллюстрации покажу один шаблон, который я использую для вставки затраченного времени (обратите внимание, что в плагине реализована раскраска синтаксиса в редакторе шаблонов):
Но и это еще не все. 🙂 Шаблоны можно вставлять с помощью викикоманды (:snip:)…(:snipend:). Про эту возможность я скажу совсем кратно, на странице плагина Snippets она описана более подробно (также у плагина имеется справка, которая вызывается из меню «Шаблоны»).
Например, шаблон «Программирование/MessageBox», который был показан на предыдущих рисунках, можно вставить на викистраницу с помощью следующей команды:
(:snip file="Программирование/MessageBox" message="Сообщение для пользователя" title="Заголовок окна":) (:snipend:)
Если у вас нет заранее подготовленного шаблона, и вы не хотите делать его доступным для всех страниц, то текст шаблона можно вставить между командами (:snip:) и (:snipend:):
(:snip message="Сообщение для пользователя" title="Заголовок окна":) MessageBox( _(u'{{message}}'), _(u'{{title}}'), wx.ICON_ERROR | wx.OK) (:snipend:)
Это основные возможности, которые предоставляет плагин Snippets, хотя уже есть идеи по его дальнейшему развитию.
PS. Большое спасибо моей жене Юле, которая помогала переводить справку на английский язык. У нас обоих английская грамматика несколько хромает, поэтому, если кто-то увидит ошибки в англоязычной справке, то пишите на jenyay.ilin@gmail.com.
PPS. В последнее время постоянные переводчики программы на украинский язык перестали обновлять перевод (уж не знаю, связано это с политикой или нет), поэтому, если кто-то готов дополнить перевод, то вы можете это сделать на странице https://crowdin.com/project/outwiker.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Блин. Только сейчас заметил плагин hackpage и узнал, что у страниц существует «параметр» alias. Четко. Теперь в именах страниц можно юзать любые символы, а то задолбали ограничения винды 🙂
6 февраля 2017, 4:08 ппЯ этот плагин (HackPage) выложил чуть больше недели назад — https://jenyay.net/blog/2017/01/26/outwiker-2-0-0-808-beta-i-plagin-hackpage/
6 февраля 2017, 4:33 пп