Stuurman (Штурман) — файловый менеджер, разрабатываемый на основе pcmanfm

Привет, товарищи! Чтобы долго не пересказывать, скопирую две цитаты из обсуждения на ЛОРе, в которых вся суть:

Вопрос: почему не присоединиться к разработчикам pcmanfm?
Мы с A.G. не сошлись во мнениях относительно принципов развития проекта. У меня есть целостное видение того, каким должен быть ФМ как архитектурно, так и в плане эргономики. С видением A.G. оно не совпадает. Кроме того, у него в приоритете совместимость с BSD и прочими ископаемыми, на которую мне плевать.

Если вкраце, я собираюсь построить документо-ориентированное DE с максимальным использованием IPC. Без ада 100500 зависимостей, но с возможностью комбинировать компоненты GUI настолько просто, насколько просто комбинируются консольные команды.

Вопрос: ОП, расскажите, каким функционалом будет обладать конечный продукт? Какие цели ставятся?
Сейчас pcmanfm представляет собой следующее:

Имеются библиотеки libfm и libfm-gtk, которые реализуют всю ядерную функциональность файлового менеджера. Бинарник pcmanfm служит только мордой, которая собирает компоненты воедино и даёт пользователю взаимодействовать с ними.

Что я хочу сделать. Оставить в libfm только код, отвечающий за работу со свойствами и метаданными файлов (возможно, шире: любых виртуальных объектов, имеющих URI). То есть, задача libfm будет отвечать на вопросы типа «что ты знаешь про этот файл насчёт таких-то его свойств?». Это включает в себя как базовые свойства, такие как mtime, так и виртуальные метаданные, такие как «название песни» или «набор приложений, пригодных для открытия этого файла».

При этом у нас выделяются некоторые группы свойств, каждая из которых требует собственной логики. Например:

Превьюшки.
Контекстные меню файла.
mp3- и exif- и т.п. тэги.

Сейчас обработка таких свойств достаточно негибка, много логики захардкожено непосредственно в libfm. Я хочу вынести столько логики в текстовые конфиги и во внешние утилиты, сколько это вообще возможно без существенной потери производительности.

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

Это означает, что даже такие пункты как «копировать» или «удалить» пользователь сможет заменить на собственные.

Это было первое.

Второе, что следует из первого. Из libfm будет изъят весь код, которые выполняет _действия_ над файлами, и оформлен в виде отдельных агентов (исполняемых файлов). libfm не будет заниматься копированием файлов, удалением файлов, показом диалога свойств файлов и т.п. всё это будет делегировано внешним приложениям.

Соотвественно, у нас появится возможность совершенствовать эти внешние приложения независимо от разработки ядра ФМ. Допустим, пользователю важна такая фича: возможность гибко настроить, какие именно файлы заменять при совпадении имён при копировании. У нас больше не будет такой сущности как «ФМ, который позволяет гибко настроить, какие файлы заменять при копировании», но будет сущность «специальная утилита для копирования, которая позволяет гибко настроить, какие файлы заменять при копировании, и которую можно использовать совместно с любым ФМ или даже просто вызовом из консоли».

Третье.

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

stuurman — однопанельный файловый менеджер
stuurman-desktop — утилита для отображения рабочего стола
Форк gpicview (назовем его, условно, stuurman-image-viewer). Для чего это в просмотрщике: для отображения контекстного меню просматриваемых файлов.
lxpanelx. Для чего это в панели: для контекстного меню на элеметах интерфейса, относяшихся к файлам (пункты dirmenu, например).
Если будут ресурсы — также запилим и двухпанельный файловый менеджер.

Четвертое.

Однопанельник stuurman будет иметь:

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

Это не исчерпывающий список улучшений, просто основное, что вспомнилось из запланированного.

Пятое.

Я таки рассчитываю запилить собственный велосипед в стиле kparts, который позволит встраивать содержимое документа в окно ФМ (шире: в окно любого совместимого клиента). Граница между «окно файлового менеджера» и «окно приложения» станет весьма условна. Она будет зависеть от того, кому как удобнее организовывать рабочее место.

Шестое.

Данный стек технологий я рассчитываю дополнить протоколами для построения документо-ориентированного интерфейса. Самое основное, что нужно: протокол, который позволит отвечать на вопросы вида: «вот URI, открыт ли он в каком-то из окон как документ?», «вот окно, соответствует ли оно какому-то URI?», «какие URI в данный момоент открыты в окнах рабочего стола?» и т.п.

Совместно со всем вышеописанным, это даёт совершенно новые возможности построения графических сред и управления окнами.

Сейчас возраст проекта — одна неделя. Сайта у проекта пока нет, но будет. (Когда-нибудь. Надеюсь, что скоро.)

Что было сделано за неделю:

  • Бинарник разделен на два отдельных приложения: файловый менеджер stuurman и менеджер рабочего стола stuurman-desktop.
  • Ускорено открытие каталогов с большим количеством элементов путём отложенной загрузки mime-типа и иконок файлов. Например, открытие /usr/bin на моей машине на холодном кэше сократилось с 40 до 11 секунд. (На горячем кэше — с полутора до одной секунды.)
  • В меню "Go" добавлена история переходов по каталогам, сохраняющаяся между перезапусками приложения.
  • В stuurman-desktop исправлены глюки при перетаскивании иконок по рабочему столу.
  • Добавлен вращающийся индикатор загрузки каталога. (Раньше при длительных операциях, таких как поиск файлов или открытие медленного ftp, никакой индикации не было.)
  • Исправлено несколько серьезных багов в поисковом движке и диалоге опций поиска, теперь поиск файлов стал юзабельным.
  • Исправлен глюк с открытием контекстного меню каталога по Shift+F10. (Должно открываться контекстное меню выделенных файлов, и только если файлы не выделены — меню каталога.)
  • Добавлена возможность отображения полного пути в заголовке окна.
  • Добавлена возможность настройки, какие пункты отображать в боковой панели. В том числе, добавлены пункты "My Computer" (перечень точек монтирования) и "File System" (переход в корневой каталог).

Исходники:
https://github.com/geekless/stuurman
https://github.com/geekless/stuurman-desktop
https://github.com/geekless/libsmfm

Обсуждения на ЛОРе:
http://www.linux.org.ru/forum/development/9131302
http://www.linux.org.ru/forum/development/9152780

Пакеты в AUR-е:
https://aur.archlinux.org/packages/stuurman-git/
https://aur.archlinux.org/packages/stuurman-desktop-git/
https://aur.archlinux.org/packages/libsmfm-git/

Просьба тестировать и слать багрепорты и идеи.

Особенно в тестировании нуждается механизм поиска (Инструменты -> Поиск файлов). В pcmanfm он был абсолютно неоттестирован, вплоть до наличия критичных багов из-за опечаток в коде. Я вроде самые очевидные баги выловил, но наверняка там еще куча глюков осталась.
Но поисковый движок отличный, кстати. Как по возможностям, так и архитектурно.

Сейчас составлен примерный роадмап на релиз 1.2. (Продолжаем нумерацию версий, доставшуюся от pcmanfm.)
Это будет промежуточный "нестабильный" релиз: я внесу несколько улучшений юзабилити и производительности и сделаю релиз, чтобы был реальный продукт, который можно тестировать. За это время я подробно ознакомлюсь с архитектурой приложения.
Запланированные существенные переделки архитектуры, которые я описывал в цитате выше, будут только в 1.3.
geekless
Пакеты в AUR-е:
https://aur.archlinux.org/packages/stuurman-git/
https://aur.archlinux.org/packages/stuurman-desktop-git/
https://aur.archlinux.org/packages/libsmfm-git/

Просьба тестировать и слать багрепорты и идеи.
1. Пожелание к libsmfm. Она тянет за собой принудительно udisks, а stuurman рекомендует gvfs, которая тянет udisks2. Может, и libsmfm перевести на udisks2?
2. Баг? У меня среда на базе голого openbox без ФМ-дескотпа, и я очень редко использую гуёвые ФМ (предпочитаю mc). Автомонтированием у меня занимается udevil. Так вот, в stuurman я отключил все автомонтирования и воткнул флэшку. Udevil её нормально смонтировал, в левой панели stuurman она появилась, но аж в трёх экземплярах - первый без значка отмонтирования, второй и третий - с ним. Клик на первом приводит к сообщению об ошибке монтирования, поскольку уже смонтировано. Если сначала воткнуть флэшку, а потом вызывать stuurman, том всего лишь двоится (оба со значком отмонтирования). Да, вдруг это важно: у меня udevil монтирует по-старинке, в /media.
Надо сказать, что это наблюдается только для одной флэшки, которая монтируется как-то странно: lsblk не видит точки монтирования:
sdb 8:16 1 1,9G 0 disk
└─sdb1 8:17 1 1,9G 0 part
3. Пожелания к stuurman:
3.1. Добавить ещё один режим отображения, аналогичный компактному, но вообще без иконок. Либо сделать иконки опциональными для компктного вида (и заодно подробного).
3.2. Для вида "подробности" разрешить уменьшать влево и последнюю колонку тоже. В образовавшемся справо пустом месте отображать ещё один комплект тех же колонок для следующих файлов (сколько поместится). Очевидное применение: оставить только одну колонку имени с разумным ограничением длины и пусть этих колонок будет сколько поместится - как в классических командерах, вроде nc, vc, dn, far...
3.3. Добавить фильтр имён, позволющий как оставлять только файлы, подходящие под маски, так и скрывать файлы, подходящие под маски.
3.4. Вернуть кнопки для переключения вида левого окна, как было в pcmanfm 0.9. Нынешний выпадающий список из двух пунктов - это идиотизм. Вот когда видов станет 8, тогда выпадающий список будет иметь смысл, но что, у кого-то есть столько идей?
4. Вопрос о превьюшках. Планируются ли для медиафайлов "живые" превью? Такое уже давно было где-то (не помню, в KDE или Гноме) для аудио: воспроизведение при наведении мыши и прекращение воспроизведения при отводе мыши.
akorop,

1. Ммм... Выложу две версии PKGBUILD для libsmfm: 1) с --enable-udisks и зависимостью от udisks, 2) с --disable-udisks и рекомендацией gvfs.
Если честно, мне хочется просто выпилить поддержку udisk из кода, оставив только gio/gvfs. Но люди просят.
Поддержка udisks2 в планах.

2. Нужно больше информации, не смог воспроизвести баг.
Монтирую флешку через udevil mount /dev/sdb1, в pcmanfm меняется индикатор монтирования устройства в боковой панели, пункты не двоятся.

3.1. Режим без иконок — да, была такая мысль. Думаю, можно добавить опцию, для включения/выключения показа иконок в режимах Компактный и Подробности.

3.2. Это потребует существенной переработки виджета, выполняющего отрисовку. Я подумаю над введением такого режима, но это работа точно не на ближайшее время. С другой стороны, если кто-то виджет под такой режим адаптирует и пришлёт патч, включу его в код без проблем.

3.3 Это будет, в планах.

3.4. С одной стороны, я не против, а с другой, это несущественная фича, на которую надо тратить время.

4. Ну вообще не планировались, т.к. мне эта фича всегда представлялась более вредной, нежели полезной. Сделать API для вызова живого превью не проблема, но вот сами обработчики мне кодить лень. Подумаю.
akorop
Надо сказать, что это наблюдается только для одной флэшки, которая монтируется как-то странно: lsblk не видит точки монтирования:
sdb 8:16 1 1,9G 0 disk
└─sdb1 8:17 1 1,9G 0 part
А ФС на ней какая?
Самое главное, чего лично мне не хватает в pacmanfm (хоть я им и не пользуюсь) - возможности убрать кнопку создания новой вкладки, которая находится на основной панели перед стрелками.
geekless
akorop
Надо сказать, что это наблюдается только для одной флэшки, которая монтируется как-то странно: lsblk не видит точки монтирования:
sdb 8:16 1 1,9G 0 disk
└─sdb1 8:17 1 1,9G 0 part
А ФС на ней какая?
[ak@s2 ~]$ lsblk -o NAME,VENDOR,MODEL,SIZE,FSTYPE,LABEL,MOUNTPOINT | grep sdb
sdb     SMI      USB DISK           1,9G vfat   GDF2
└─sdb1                              1,9G vfat   GDF2
[ak@s2 ~]$ mount | grep sdb
/dev/sdb on /media/GDF2 type vfat (...)
Всё это действительно очень странно, и наблюдается только при монировании через udisks[2]. Если сделать автомонтирование через правила udev, то никаких чудес в выводе lsblk нет. Так что, возможно, не надо брать в голову - источник глюка udisks2, а stuurman просто присоединяется.
akorop
3.4. Вернуть кнопки для переключения вида левого окна, как было в pcmanfm 0.9. Нынешний выпадающий список из двух пунктов - это идиотизм. Вот когда видов станет 8, тогда выпадающий список будет иметь смысл, но что, у кого-то есть столько идей?
geekless
3.4. С одной стороны, я не против, а с другой, это несущественная фича, на которую надо тратить время.
Я думал, что много времени это не займёт, если можно просто вернуть кусок кода из 0.9. А насчёт несущественности - то кому как; лично я часто переключаюсь между устройствами и деревом, и нынешний комбобокс - это дико неудобно.
А может, добавить (опционально) такие иконки на основную панель инструментов? И заодно сделать строку с комбобоксом выключаемой.
Ещё решение - как в spacefm: разрешить одновременное существование и панели устройств, и панели дерева (возможно, это можно выдрать из spacefm).
В общем если автором pcmanfm была поставлена задача сделать максимально неудобный вариант, то она решена успешно.
С другой стороны, если нежелание тратить время на удобности обусловлено желанием поднять функциональность, то я только "за". Я ведь mc использую не по религиозным соображениям, а потому что все линуксные гуёвые ФМ по функциональности не тянут совершенно. И судя по Наутилусу, это генеральная линия партии.
По поводу копирования.
У pcmanfm этот баг проявился достаточно давно (не буду врать, как давно, но ~5-6 мес назад) не работает меню "копировать - вставить",а и так же и "вырезать - вставить"
И у штурмана то же не работает. Где то писали, что проблема в libfm-e.
Это так же относится и к горячим Ctrl-C -X -V .
mango
По поводу копирования.
У pcmanfm этот баг проявился достаточно давно (не буду врать, как давно, но ~5-6 мес назад) не работает меню "копировать - вставить",а и так же и "вырезать - вставить"
И у штурмана то же не работает. Где то писали, что проблема в libfm-e.
Это так же относится и к горячим Ctrl-C -X -V .
Какие-нибудь менеджеры буфера обмена при этом запущены?
geekless
mango
По поводу копирования.
У pcmanfm этот баг проявился достаточно давно (не буду врать, как давно, но ~5-6 мес назад) не работает меню "копировать - вставить",а и так же и "вырезать - вставить"
И у штурмана то же не работает. Где то писали, что проблема в libfm-e.
Это так же относится и к горячим Ctrl-C -X -V .
Какие-нибудь менеджеры буфера обмена при этом запущены?

community/parcellite 1.1.4-1 [installed]
Lightweight GTK+ clipboard manager

Пользуюсь им уже тыщу лет ;-)
 
Зарегистрироваться или войдите чтобы оставить сообщение.