habrahabr

Кросс-платформенный файловый менеджер? Это реальность

  • четверг, 19 июня 2014 г. в 03:11:11
http://habrahabr.ru/post/226669/



Доброе время суток, граждане хабражители! Сегодня открылся для сторонних разработчиков новый open-source проект, кроссплатформенный двухпанельный файловый менеджер. Начну данную статью, пожалуй, с предыстории. Для Windows существует всем известный файловый менеджер Total Commander, выгодно отличающийся от других богатым функционалом, мощной системой плагинов, основанной на Win32 API, глубокой настройкой и многооконным режимом. Для других ОС сравнимых по высоте функционала файловых менеджеров пока не существует. А те, что существуют либо давно не развиваются, либо не поддерживают плагины. И всё было нормально, да однажды я решил почистить свой Debian от накопившегося хлама. Процесс чистки стал представлять собой кучу окон и вкладок терминала с Midnight Commander, кучу вкладок и окон различных редакторов и просмотрщиков, графическая оболочка к архиваторам FileRoller и т.д… «Не дело» — решил я, и 24/06/2013 начал изобретать велосипед сделал git init и запустил MonoDevelop…

Так появился новый некоммерческий стартап, ещё один двухпанельный файловый менеджер, правда, в отличие от большинства, кроссплатформенный. Его название долго выбиралось, однако решил остановиться на File Commander (не путать с заброшенным FileCommander). Простое, понятное название, по аббревиатуре не путающееся с другими * Commander’ами. Он написан на C# с использованием тулкита XWT, о котором на Хабре писалось ранее. Использование .Net/Mono и XWT обеспечивает полноценную кроссплатформенность (Windows, Linux, Mac OS). Собственно, ключевой фишкой FC является не столько оригинальная функциональность, сколько независимость его и всех плагинов от используемой операционной системы.

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

Возможности


FC представляет из себя классический двухпанельный файловый менеджер, в целом похожий на Total Commander и ему подобные. Однако в нём присутствует сравнительно полноценная командная строка а-ля FAR или Midnight Commander. Для работы с нелокальными файловыми системами имеется поддержка плагинов ФС. Плагины ФС обеспечивают и работу командной строки, вдумайтесь, каково это работать по SSH одновременно и с терминалом и с файлами не выходя из файлового менеджера?



В программу встроен комбинированный просмоторщик-редактор (VE), вызываемый по стандартным клавишам F3 и F4 (по F3 редактирование отключается). VE поддерживает подключение плагинов для работы с разными типами файлов. Фишкой VE является командная строка (в чём-то аналогичная Vim), позволяющая с клавиатуры осуществлять широкий спектр действий с файлами, ограниченный только возможностями плагина. К сожалению, на данный момент выбор плагинов не велик. Хотя есть возможность подключать плагины через файлы fsplugins.conf и fcveplugins.conf, отдельных плагинов пока не существует, только встроенные – «Локальные ФС» (file://) и «Простой текст» (*.txt). Интерфейс программы может быть переведён на любой язык мира («локализатор» сейчас в зачаточном состоянии, но задел под это есть), а внешний вид подстроен «под себя» при помощи тем оформления в формате CSS (ограничено возможностями XWT).

Архитектура


FC построен по монолитно-модульной архитектуре. Т.е., есть монолитное ядро, fcmd.exe, обеспечивающее пользовательский интерфейс и загружающее переключаемую часть функционала из плагинов, используя особую прослойку – pluginner.dll. Плагины отвечают за работу с файловыми системами, за просмотр и редактирование файлов, в будущем планируются архиваторные плагины и плагины, модифицирующие пользовательский интерфейс (как в Firefox). Плагины представляют из себя классы, наследуемые от pluginner.IPlugin и хранящиеся либо в DLL-файлах, либо вшитые в fcmd.exe (встроенные плагины). Функции и классы, которые могут использоваться не только FC, но и его плагинами вынесены в pluginner. Так, например, виджет «список файлов», FileListPanel, можно внедрять в плагины VE, где его можно использовать для оперирования с несколькими файлами сразу. В качестве библиотеки UI используется официальный тулкит XWT от разработчиков Mono. Темы оформления представляют собой практически обыкновенные CSS-файлы, обрабатываемые отдельным проектом (но также моего производства), библиотекой µCSS. Панель выбора дисков комбинирована с панелью закладок, хотя простое меню закладок никуда не убиралось. Список дисков на панели дисков-закладок реализован в виде динамической закладки (которые можно добавлять и в меню закладок) «список дисков». Это облегчает редактирование в графическом режиме файла speed dial list, именно так обозван файл списка закладок, выполненный в формате XML.

Функциональность, представленная на данный момент, может показаться недостаточной и крайне сырой, богатой на баги. Это из-за того, что у меня не хватает времени и опыта (ваш покорный слуга – любитель, пишу код, когда нечем заняться). Кроме того, до декабря 2013 г. FC писался на WinForms, после чего, будучи практически законченным, несколько месяцев переписывался на XWT. Но это всё отговорки, главное, что идея постепенно воплощается в реальность!

Планы на ближайшее будущее


  • Сделать сортировку файлов.
  • Довести до ума быстрый поиск (использовать последние нововведения в XWT).
  • Сделать в модуле VE PlainText полноценное редактирование текста с подсветкой синтаксиса, автодополнением, hex-выводом и печатью.
  • Сделать плагины ФС для FTP, WebDAV (Yandex.Disk), SSH.
  • Сделать древо каталогов.
  • Сделать графический diff.
  • Сделать иконку.
  • Сделать функцию массового переименования файлов.


В четверг, 19 июня, в 20:00 MSK на канале #fcmd-dev в сети IRC RusNet для всех интересующихся состоится онлайн-конференция по архитектуре проекта и перспективах развития. Успеть здесь отвечать всем у меня возможности нет, уж слишком велика местная аудитория, просьба задавать вопросы и сообщать о найденных багах на IRC и GitHub.

Скачать


Репозиторий File Commander размещается на GitHub, там же и Wiki со справочными материалами: github.com/atauenis/fcmd/ (также есть готовая бинарная сборка для всех ОС и PPA для Ubuntu: launchpad.net/~keks9n/+archive/fcmd)

Клонируйте, развивайте, pull-request’те. Сторонние коммиты крайне приветствуются. Приветствуются и создание багов в трекере (Github Issues), с тестированием в одиночку тоже беда.

Ссылку на оф. сайт и форум проекта дать не могу, VDS за 99 руб/мес, более чем уверен, не потянет хабраэффект, хотя если надо – всё ищется.

С уважением, разработчик проекта, Александр Тауенис (A.T., ATauenis).

P.S. Почему именно четверг? Дело в том, что в вечер пятницы меня могут сорвать с места без предупреждения, а в выходные я вне города и чисто технически не могу оперативно отвечать на возникающие вопросы.

P.P.S. Для публикации в «Я пиарюсь» на хватает кармы, да и цели повысить мою стоимость на рынке труда данный пост не имеет, так что помилуйте.