Linux-порт Far Manager: теперь beta

Я планировал выпускать заметки с новостями про far2l — Linux/Mac/BSD-порт (автор считает, что, скорее, «форк») Far Manager примерно раз в год, предыдущая вышла в декабре. Однако вчера произошло значимое событие, требующее лаконичного, но всё же поста — проект перешёл из стадии «alpha», длившейся долгих 5 лет, в стадию beta!

image-loader.svg

Это значит, что уже довольно продолжительное время не было сообщений об ошибках, приводящих к потере данных, и общая стабильность порта признана достаточной, чтобы можно было говорить об использовании в повседневном режиме (хотя и всё ещё «на свой страх и риск»).

За прошедшие 5 лет (днём рождения проекта можно считать 10 августа 2016 года — день, когда сообщение об открытии репозитория на GitHub было опубликовано на форуме оригинального фара) проделан огромный объем работы.

Изначально не было консольной версии, только графическая. Некоторые архивы открывались криво (не поддерживались русские буквы в .zip-ах с Windows, а .tar.gz требовали полной распаковки для просмотра списка файлов). Не было SFTP, SMB и WebDAV-плагина (первое время из сетевых плагинов был только FTP, для SFTP приходилось использовать sshfs). Лог встроенного терминала был чёрно-белым, что не очень-то помогало разбирать ошибки компилятора. Сообщения об ошибках самого far2l были совершенно неинформативными (наследство использованного при портировании кода Wine). А интерфейс отображался со странными «дырками» между символами псевдографики.

far2l alphafar2l alpha

Кроме того, был некоторых хаос с зависимостями — часть библиотек была вклеена прямо в дерево исходников, хотя они вполне представлены в современных дистрибутивах. Одна из библиотек была лицензионно несовместима с Debian. Время от времени порт просто падал на тех или иных операциях.

Сейчас же у нас есть пригодный для повседневного применения (я использую в производственных процессах уже несколько лет) файловый менеджер, обладающий, помимо привычности для пользователей, мигрирующих с Windows, целым набором уникальных достоинств — от способности запрашивать повышение привелегий до возможности писать плагины на Python. И всё это работает вполне стабильно. Готовимся отправить debian-пакет в основной репозиторий.

За прошедшие 5 лет закрыто 566 сообщений об ошибках, сделано 2618 коммитов. Популярность репозитория на GitHub сравнима с популярностью репозитория оригинального Far Manager.

Проект понемногу обрастает собственной экосистемой. Появился ppa для Ubuntu с регулярно обновляющимися пакетами. Появились portable-сборки, работающие на shared-хостингах. Появилась поддержка расширений терминала far2l (это специальные escape-последовательности, позволяющие использовать любые сочетания клавиш и буфер обмена в консольном far2l при работе в совместимых терминалах) в putty, и даже двух её форках: KiTTY и putty-nd. В русскоязычном чате проекта, где можно быстро получить ответ на вопрос или предложить улучшение, уже больше сотни человек.

В завершении поста расскажу историю про красивое техническое решение, добавленное в far2l буквально на днях.

Исторически команда Far Manager называла две причины «невозможности» его портирования на *nix-системы: 1) глубокую привязку к WinAPI и 2) ограничения *nix терминалов, в частности — невозможность использования всех нужных фару сочетаний клавиш.

Как эти проблемы решили в far2l?

Реализацию необходимого подмножества WinAPI взяли из Wine (часть вызовов WinAPI-функций впоследствии перевели на нативные, а кое-что переводить оказалось нецелесообразно: например, преобразование кодировок Wine делает, как выяснилось, быстрее iconv).

А вот с терминалами и поддержкой всех сочетаний клавши долгое время были проблемы. Изначально это решилось написанием своего графического бекенда, и рендером окна far2l через wxWidgets. Конечно, в X11-окружении можно было спокойно получать любую информацию о нажатых клавишах, недоступную в терминале.

Чуть позже появилась и консольная версия, но она долгое время обладала в плане поддержки клавиатуры существенными ограничениями. Как в терминале различить »+» с малой цифровой клавиатуры и »+» с клавиши в верхнем ряду (той, на которой также символ »=»)? Примерно никак.

И вот недавно мы всё-таки нашли способ. Для консольного «бекенда» far2l появился дополнительный модуль, загружающийся только на системах с установленными библиотеками X11 — far2l_ttyx.broker. Эта штука взаимодействует с X11-сервером, если он запущен, и позволяет консольной версии делать вещи, обычно в консоли невозможные — взаимодействовать с «иксовым» буфером обмена и — SIC! — распознавать вообще любые сочетания клавиш. То есть, теперь, когда far2l работает в «терминалке» под иксами, такой как GNOME Terminal или Konsole, он отлично различает клавиши с плюсиком, не только анализируя входящий поток символов в терминале, но и сверяясь с тем, что о нажатых клавишах сообщают иксы. И эта штука, кстати, работает даже через ssh, если подключаться с ключём -X, и поставить на удаленный сервер libx11 и libxi.

© Habrahabr.ru