OutWiker 3.0.0.862 unstable с большим количеством изменений

OutWiker 3.0.0.862 unstable с большим количеством изменений

И снова всем привет! Сегодня выложил новую нестабильную версию OutWiker под номером 3.0.0.862. В этой версии было сделано огромное количество изменений, как заметных пользователям, так и тех, которые, я надеюсь, пользователи не заметят. В этом посте будет два раздела. Сначала я опишу изменения в интерфейсе, которые вошли в новую версию, а затем расскажу о том, почему под Linux пришлось переходить на новую версию WebKit, как это происходило и к чему привело.

Изменения в интерфейсе

В интерфейсе OutWiker-а были некоторые шероховатости, которые мне не нравились. Судя по отзывам, они смущали и некоторых пользователей, особенно тех, кто видел программу впервые. До сих пор, если вы запускали программу впервые или закрывали дерево заметок с помощью пункта меню «Файл — Закрыть», то в правой части окна OutWiker, там, где обычно отображается текст заметок, ничего не отображалось, там была пустая панель. Новичков это смущало, и иногда они думали, что в программе что-то пошло не так. Их можно понять, ведь для того, чтобы программа начала что-то показывать, нужно было с помощью меню или кнопок на панели инструментов создать новое дерево заметок.

Поскольку пустые панели — это не самая полезная часть интерфейса, а также, чтобы новички понимали, с чего начать работу, на эту панель были добавлены кнопки «Создать новое дерево заметок…» и «Открыть дерево заметок с диска…». Но все равно оставалось много свободного места, куда можно было бы поместить еще что-нибудь полезное. Поэтому ниже этих кнопок был добавлен список последних открытых деревьев заметок.

Таким образом, ранее пустое место стало достаточно удобным инструментом. Мне даже стало удобнее открывать ранее используемые деревья заметок не через меню «Файл», а с помощью новой панели.

Второе изменение по замыслу перекликается с тем, что я только что описал. Аналогичная пустая панель появлялась при выборе корня дерева заметок. Я давно хотел поместить туда какую-нибудь полезную информацию, только надо было решить, что именно там отображать. При этом не хотелось дублировать информацию, которая и так находится в поле зрения пользователя.

В итоге на эту панель попали три интерфейсных элемента. Сверху там отображается путь до открытого дерева заметок. Если вы постоянно работаете с одним деревом заметок, то можете не помнить, где оно находится, а вспоминать иногда приходится, например, чтобы, сделать резервную копию. К тому же эта информация нигде не отображалась в явном виде.

Ниже была добавлена кнопка для создания новой страницы. Это было сделано по аналогии с кнопками «Создать новое дерево заметок…» и «Открыть дерево заметок с диска…», о которых я писал выше.

А под кнопками теперь отображается список страниц, добавленных в закладки.

Следующее изменение касается страниц с неизвестным типом. Раньше, если в дереве заметок была страница с неизвестным типом, например, если для отображения такого типа страницы требовался дополнительный плагин, или файл с параметрами страницы был испорчен, OutWiker пытался открывать такие страницы как текстовые страницы, чтобы хоть как-то показать содержимое пользователю. Иногда это приводило к проблемам, когда пользователь изменял страницу, она действительно могла преобразоваться в текстовый вид, и для придания ей первоначального типа нужно было вручную исправлять файл __page.opt этой страницы.

Теперь OutWiker поступает более умно. Все страницы неизвестного типа открываются в режиме только для чтения и отображаются в специальном интерфейсе, который сообщает, что с этой страницей что-то не так, но при этом показывает ее содержимое в виде текста. На картинке ниже показано, что будет, если попытаться открыть страницу типа Markdown с отключенным плагином Markdown.

Еще один элемент интерфейса, который мне не нравился чисто субъективно — это окно с отображением информации о том, что дерево заметок загружается. Мне особенно не нравилось, что это окно имеет заголовок, хотя это вспомогательное окно, которое нельзя даже закрыть. Это окно хотелось сделать более лаконичным. В итоге его переделал, и теперь оно выглядит следующим образом:

Выглядит может быть не совсем идеально, более современно и плоско, чем было раньше.

На мой взгляд после этих изменений интерфейс стал более удобным. Но это еще не все. Из мелочей можно отметить новую настройку длительности отображения всплывающего окна с предупреждениями и сообщениями об ошибках.

Помимо этого были исправлены некоторые ошибки и обновлены плагины TeXEquation, Snippets, Diagrammer, Markdown и Source. Изменения там незначительные, в основном они связаны с переходом на новые версии используемых библиотек.

Следующий раздел касается в основном пользователей Linux, хотя изменения, которые были проделаны, немного коснулись и пользователей Windows.

Переход на новую версию WebKit в Linux

Недавно я писал пост о том, почему OutWiker использует старую версию движка WebKit (через библиотеку WebKitGTK) и не переходит на более новую версию wxPython. Если коротко, то в более новых версиях WebKit 2 были проблемы с отображением HTML-файлов, если они лежали в папках с русскими буквами, а еще не отображались картинки, если имена их файлов содержали русские буквы. Две недели назад все поменялось. И это была драматичная история.

В апреле вышла очередная версия Ubuntu 19.04. Я обновился почти сразу без каких-либо проблем и начал ждать какой-нибудь подвох. Каждый раз, когда обновляется Ubuntu, что-нибудь обязательно ломается, и OutWiker иногда приходится подстраивать под новую версию. Ubuntu 19.04 не стала исключением. Оказалось, что начиная с этой версии, из репозиториев убрали пакет libwebkitgtk-3.0, то есть тот самый пакет, который отвечал за старую версию движка WebKit 1, с которым не было проблем. Ничего не оставалось делать как переходить на новую версию — WebKit 2.

На самом деле в отдельной ветке исходников у меня уже были некоторые наработки, связанные с переходом на WebKit 2. Чтобы обойти проблему с отображением HTML-файлов, расположенных в папках с русскими буквами, я сделал такой хак: во временной папке /tmp создавалась символическая ссылка на нужную папку и по этой символической ссылке открывался файл. Такой подход решал бо́льшую часть проблем, но не все. Например, по-прежнему на странице нельзя было отобразить картинку, если ее имя тоже содержало русские буквы.

Но выбора не было, теперь я просто обязан использовать WebKit 2, поэтому влил описанные изменения в основную ветку разработки. Кроме этого пришлось пошаманить с тестами, потому что WebKit 2 в отличие от старой версии постоянно норовит упасть при часто создании и удалении компонента. Поправил некоторые различия в поведении WebKit 1 и WebKit 2.

После этого начал выискивать, какие еще проблемы принес переход на новую версию движка. И тут заметил, что картинка с русскими буквами неожиданно отобразилась. Сначала подумал, что может быть у меня еще установлена старая версия пакета libwebkitgtk, который остался от Ubuntu 18.10. Но нет, версия движка оказалась новой. Отменяю хак с символическими ссылками. Все отображается нормально. Пытаюсь понять, как такое может быть. Смотрю версии WebKitGTK, и оказывается, что теперь в Ubuntu 19.04 поставляется версия WebKitGTK 2.24.1, которая вышла буквально перед релизом Ubuntu 19.04. Получается, что в новой версии исправили проблему, с которой я давно мучился.

Это все замечательно, но как быть с пакетом snap и другими бирнарными сборками, которые собираются в Ubuntu 16.04 LTS? Ведь там WebKitGTK уже никто не будет обновлять. Единственный выход — собирать WebKitGTK из исходников при создании snap-пакета. Честно говоря, я не очень верил в успех этого начинания. Я думал, что при попытке собрать движок в таком старом дистрибутиве столкнусь с проблемой версий пакетов, или какого-нибудь пакета не окажется, и на этом все закончится. Придется возвращать хак с символическими ссылками и смириться с тем, что картинки с русскими буквами отображаться не будут.

Примерно две недели я возился со сборкой WebKitGTK. Проблемы были, но все они обходились тем или иным способом. Например, для сборки требуется более новая версия компилятора gcc, по сравнению с той версией, которая поставляется в репозиториях Ubuntu 16.04. Но есть неофициальный PPA с более новыми версиями gcc. Для сборки иногда были нужны библиотеки более новых версий или библиотеки, которых еще не было в Ubuntu 16.04. Тут я не стал углубляться в сборку этих библиотек из исходников, а просто отключил некоторые возможности движка WebKit, для которых эти библиотеки требовались. К счастью, пожертвовать пришлось теми возможностями, которые в OutWiker не используются — использование Web Crypto API, OpenJPEG, WOFF2 (Web Open Font Format) и Media Source Extensions API. К счастью, отключаются возможности достаточно легко с помощью флагов компиляции.

Главная сложность сборки заключается в том, что компиляция исходников на моем ноутбуке занимает 2 часа + сборка snap-пакета. Поэтому часто очередную итерацию компиляции я запускал на ночь, утром до работы разбирался с новой проблемой, запускал следующую итерацию сборки и уходил на работу. В итоге все-таки удалось создать snap-пакет с новой версией WebKit 2, в которой нет проблем с русскими буквами.

Переход на WebKit 2 открыл путь для других обновлений. Например, после этого можно переходить с wxPython 4.0.1 на последнюю версию wxPython 4.0.4. А это, в свою очередь, позволило удалить некоторые костыли из кода, которые были вставлены для обхода ошибок в wxPython 4.0.1. Кроме того, костыли были убраны из плагина TeXEquation, потому что там они были для обхода проблем в WebKit 1.

Однако не все так радостно. Почему-то новая версия движка WebKit не хочет работать в бинарной сборке, созданной с помощью PyInstaller, и в формате AppImage. Вроде и ошибки не выводятся, но страница не отображается. Поэтому пока под Linux будет только сборка в формате snap. Если удастся решить проблемы, то верну и бинарные сборки. Теперь надо будет внимательнее посмотреть, появились ли какие-нибудь еще проблемы после перехода на WebKit 2.

PS. Пока я писал этот пост, вышла новая версия WebKitGTK 2.24.2. Сходу не удалось ее скомпилировать с теми же самыми параметрами, которые использовались для сборки WebKitGTK 2.24.1. Надо разбираться, в чем проблема. Хотя с другой стороны, это уже и не так актуально. Пока версия 2.24.1 меня устраивает.

PPS. Также вышла новая версия wxPython 4.0.5, а вслед за ней через пару дней wxPython 4.0.6. В эти версии в основном вошли исправления ошибок. Я еще не пробовал использовать новые версии в OutWiker, но надеюсь, что в будущем обновление пройдет безболезненно.

На этом пока все. Жду ваших замечаний и сообщений об ошибках.

PPPS. В сборке под Windows обнаружилась ошибка, из-за которой программа может не запускаться. Поэтому для скачивания временно доступна предыдущая версия 3.0.0.860.

PPPPS. Сборка под Windows исправлена и перезалита.

OutWiker в социальных сетях:

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 4, средняя оценка: 5,00)
Загрузка...

комментария 4

  1. Юрий:

    Приветствую. Как обычно: спасибо, что не бросаете!
    Заметил неприятное поведение с новой обработкой неизвестных страниц: если в глобальном поиске находится страница, один из родителей которой неизвестен — то ссылка из глобального поиска просто не откроется

  2. Jenyay:

    Спасибо, проверю.

  3. Jenyay:

    Да, подтверждаю. Это проблема вообще ссылок со страницы поиска.

    PS. Исправил.

  4. Юрий:

    Да, согласен, не связано с неизвестными страницами. Просто у меня их много 🙂
    Спасибо!

Leave a comment

Subscribe without commenting