qutebrowser – интернет браузер с минималистичным дизайном и управлением в стиле vim. Написан на python с использованием Qt. Для отображения веб содержимого используются Qt классы QtWebkit и QtWebengine. Автором является Флориан Брухин.

Проблема

Несколько лет назад, когда браузер работал только с использованием движка Webkit, я уже разработал функционал управления кареткой для выделения текста клавиатурой. С переходом на Webengine этот функционал работать перестал.

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

Решение

Webengine основан на Chromium'е. Поэтому, по совету основного разработчика, я обратился к реализации каретки для Chrome браузера. Таким образом, решением задачи являлось портирование расширения caretbrowsing для Chrome в кодовую базу Qutebrowser'а. Причём портировать пришлось только код визуализации каретки. Её положение регулируется с помощью Web API Selection.

Так же как и в предыдущей реализации каретка позиционируется в верхней текстовой строке браузера, либо в месте выделенного текста. Вообще, позиционирование каретки это ещё одна проблема, которую мне хотелось бы решить.

Режим каретки в действии!

Есть пару идей для улучшения опыта работы с возможностью выделения текста с помощью клавиатуры:

  • позиционирование каретки с помощью hint'ов, что-то вроде easymotions расширения для vim;
  • функционал кнопок f и t в vim, для прыжков каретки. Опять же, в стиле расширения clever-f для vim.

Хотя, надо признаться, я пока не вижу пути реализации этих идей. А учитывая дефицит времени, взяться за них я смогу не скоро.

Несколько дней назад, пулл реквест, на слияния моего кода был принят. Время обновляться.