О версионировании
Версионирование отдельных частей проекта осуществляется независимо. Версии отдельных компонентов SDE не привязаны к версии SDE как целого.
Для версионирования библиотек используется Semantic Versioning, однако только для тех major versions, которые явно указаны как таковые. Например, от libfm нам достался номер версии 1.2.0
, который мы не намерены откатывать на 0.*.*
, однако ветка 1.*
не является стабильной и не следует правилам Semantic Versioning.
Для приложений следование правилам Semantic Versioning не гарантируется.
Для ветки SDE 0.*
будет использовано следующее чередование релизов:
- Нечётные минорные релизы (0.1, 0.3, 0.5…) — исправление известных проблем, совершенствование пользовательского интерфейса, реализация возможностей, не требующих переработки архитектуры и API.
- Чётные минорные релизы (0.2, 0.4, 0.6…) — работа над архитектурой компонентов, задачи рефакторинга, переработка API.
Ветка 1.*
будет создана только когда все необходимые API будут признаны стабильными.
Намеченные Milestones в работе над SDE
Milestone | Основная задача |
---|---|
0.1 | Приведение в надлежащий вид ссылок, копирайтов, лицензий и решение прочих организационных вопросов |
0.2 | Переработка API резолвера ресурсов, внедрение резолвера во все компоненты проекта |
0.3 | Реализация новых возможностей |
0.4 | Разработка и внедрение libsde-utils-amdf |
0.5 | Реализация новых возможностей |
0.6 | Переработка libsmfm |
0.7 | Реализация новых возможностей |
Компоненты SDE
Компонент | Назначение |
---|---|
Опубликованные: | |
libsde-utils | унифицированные средства резолвинга путей к ресурсам и файлам конфигурации; средства ведения отладочного лога; некоторые вспомогательные функции |
libsde-utils-x11 | вспомогательные функции для работы с X11 |
libsde-utils-gtk | вспомогательные функции для работы с Gtk |
libsde-utils-jansson | вспомогательные функции для работы с Jansson |
libsmfm-core | средства управления файлами, не зависящие от графического тулкита |
libsmfm-gtk | средства управления файлами, зависящие от Gtk |
waterline | фреймворк апплетов рабочего стола |
stuurman-desktop | менеджер иконок и фона рабочего стола |
stuurman | файловый менеджер |
spicview | средство просмотра изображений |
rainbow-cm | менеджер буфера обмена |
qk | текстовый редактор на основе medit |
Запланированные: | |
libsde-utils-amdf | Application Metadata Framework - библиотека-перечислитель метаданных приложений |
sde-session-manager | Менеджер графического сеанса |
sde-screensaver | простой скринсейвер, ставящий акцент на надёжности и безопасности, а не на богатстве настроек |
sde-task-manager | диспетчер задач и монитор быстродействия системы |
stuurman-find | консольная утилита поиска файлов с использованием libsmfm |
stormwm | менеджер окон |
Глобальные задачи (затрагивающие все или большинство компонентов проекта)
В этом разделе более развёрнуто описаны упомянутые в списке milestone-ов задачи:
Унифицированный доступ к ресурсам и файлам конфигурации приложений
Текущая реализация резолвера путей в libsde-utils построена на в корне ошибочных принципах. Следующие задачи должны успешно решаться после редизайна API и его реализации:
- Приложение без перекомпиляции и дополнительной настройки запускается и работает из любого установочного префикса.
- В одном установочном префиксе (не важно, системном или нет) может располагаться произвольное количество агентов (агент - приложение или библиотека с уникальным идентификатором).
- Агентам, работающим в одном процессе, доступны для перечисления ресурсы из всех сконфигурированных префиксов (системные префиксы, заданные пользователем префиксы, автодетектированные префиксы).
- При помощи конфигурационных файлов возможно переопределение:
- имени агента (что, в частности, приводит к смене пути хранения настроек);
- префикса или префиксов (в частности, приложение может хотеть sysconfdir или localstatedir, не совпадающие с установочным префиксом);
- прочих переменных, предоставленных агентом для переопределения;
- отдельных путей ресурсов на иные по маске glob или регулярному выражению.
- Как следствие предыдущего пункта - возможность использования приложений в режиме portable, когда все данные и конфигурация приложения располагаются в пределах одного каталога, по какому бы пути он ни был расположен.
Предполагаемый интепретатор конфигурации резолвера - partcl [1], [2], будет встроен в libsde-utils.
Перечислитель метаданных приложений и других компонент
Сейчас для обработки файлов *.desktop используются:
- libmenu-cache (часть LXDE).
- GAppInfo из Glib.
- Непосредственный анализ содержимого файлов.
Этот зоопарк необходимо устранить, разработав и внедрив в состав SDE библиотеку libsde-utils-amdf, обеспечивающую слежение за всеми иcточниками файлов *.desktop, файлами mimeinfo.cache, файлами mimeinfo.cache, mimeapps.list, defaults.list и т.п., предоставляющую унифицированный доступ к этим данным. Также обеспечивающую слежение и за файлами *.menu и *.directory и построение оглавления для меню приложений.
В перспективе - также необходимо обеспечивать сопоставление файлов *.desktop, классов окон WM_CLASS и имён dbus, аналогично тому как это делает bamf.
Переработка архитектуры libsmfm
Примерный план того, что должно получится:
Фундамент фреймворка:
Тип данных | Назначение |
---|---|
FmPath | путь файловой системы или URL |
FmPathList | список FmPath |
FmFileInfo | контейнер метаданных файла |
FmFileInfoList | список FmFileInfo |
FmMonitor | монитор файлов |
FmFolder | объект, обеспечивающий загрузку данных из каталога и слежение за появлением/удалением/изменением файлов |
FmMimeType | тип MIME |
FmIcon | описатель ассоцированной с файлом иконки |
FmFile | субкласс GFile для использования в предоставляемых расширениях GIO |
FmJob | базовый класс для многопоточных операций |
FmFileInfoJob | обеспечивает асинхронное чтение данных для указанного списка FmFileInfo |
FmDirListJob | обеспечивает асинхронное чтение данных для указанного каталога |
FmSimpleJob | обёрртка для запуска указанной функции асинхронно без необходимости создания субкласса от FmJob |
Полезные для менеджмента файлов субклассы FmJob:
Тип данных | Назначение |
---|---|
FmDeepCountJob | рекурсивно подсчитывает элементы |
FmFileOpsJobDelete | рекурсивно выполняет различные операции (копирование, перемещение, удаление и пр.) |
Расширяемая функциональность:
Тип данных | Назначение |
---|---|
FmAddonEnumerator | обеспечивает перечисление и загрузку модулей, расширяющих функциональность |
FmThumbnailProvider | высокоуровневый интерфейс, предоставляющий эскизы содержимого файлов |
FmHighlighProvider | высокоуровневый интерфейс, перечисляющий предлагаемые цвета для имён файлов различных типов |
FmFileMenuProvider | высокоуровневый интерфейс, обеспечивающий построение контекстного меню файлов |
FmAppInfoProvider | высокоуровневый интерфейс перечислителя приложений и их свойств |
FmFileLauncher | обеспечивает выполнение над файлами canonical verbs (Open, Run, View, Play, Edit) с использованием информации от FmAppInfoProvider и FmFileMenuProvider |
FmThumbnailHandler | интерфейс к модулю расширения функциональности |
FmHighlighHandler | интерфейс к модулю расширения функциональности |
FmFileMenuHandler | интерфейс к модулю расширения функциональности |
FmAppInfoHandler | интерфейс к модулю расширения функциональности |
Реализации по умолчанию:
Тип данных | Назначение |
---|---|
FmDefaultFileNameHandler | строит меню для canonical verbs на основании данных от FmAppInfoProvider |
FmDefaultHighlighHandler | простой хайлайтер, читающий соответствия типа MIME и цвета из конфига |
FmDefaultAppInfoHandler | перечисляет приложения с использованием libsde-utils-amdf |
Дополнительные модули в составе фреймворка:
Название | Назначение |
---|---|
thunar-custom-actions-handler | читает custom actions из файлов конфигурации, применяемых в Thunar |
gdk-pixbuf-handler | строит эскизы для файлов, поддерживаемых gdk-pixbuf |
static-custom-verbs-handler | перечисляет дополнительные пункты контестного меню, описанные при помощи особой разновидности файлов *.desktop |
Модули GIO в составе фреймворка:
Название | Назначение |
---|---|
fm-vfs-search | поиск файлов по различным критериям |
fm-vfs-menu | представление меню приложений в виде дерева папок |
Дополнительная функциональность
Название | Назначение |
---|---|
fm-templates | перечисляет известные шаблоны для создания новых файлов |
fm-bookmarks | управляет списком bookmark-ов |
TODO
Различные задачи, не занесённые в багтрекер на данный момент. Если вы заинтересованы в решении каких-то из этих задач, ваши pull-реквесты горячо приветствуются:
- waterline: реализовать поддержку нового типа загружаемых модулей - plugin enumerator. Plugin enumerator - это модуль, перечисляющий и инстанцирующий модули апплетов. Таким образом, станет возможно реализоывать переходники, подгружающие в панель апплеты с другим API.
- waterline: launchbutton: баг: элементы контекстного меню работают только если нажат Ctrl.
- waterline: cpu: баг: изменение размера иконки через контекстное меню не оказывает никакого действия
- waterline: menu: баг: изменение размера иконки через контекстное меню не оказывает никакого действия
- waterline: menu: добавить возможность переопределять в настройках размер иконок в меню (отдельно - для верхнеуровнего меню и для подменю)
- waterline: menu: добавить возможность переопределять в настройках иконку и заголовок меню, отображаемые на панели (по умолчанию считываются из файла меню)
- waterline: menu: реализацию подменю “Recent Documents” следует переписать с использованием libsmfm, пункты меню должны отображать контекстное меню файла при нажатии ПКМ; использовать gtk_recent_chooser_menu_new_for_manager только как fallback, когда libsmfm не установлена
- waterline: dclock: заменить обращение к grep-awk-sort на ручной парсинг списка таймзон
- waterline: dclock: обновлять отображаемое время при скачках системного времени: https://lkml.org/lkml/2010/9/16/405
- waterline: dclock: добавить возможность отображать аналоговые часы, взяв код и изображения из cairo-clock
- waterline: dclock: добавить в выпадающий список несколько стандартных вариантов для полей “Формат часов” и “Формат подсказок”.
- waterline: два регулятора громкости объединить в один универсальный + добавить поддержку PA.
- waterline: dirmenu: добавить поддержку search-as-you-type
- waterline: battery_indicator: реализовать поддержку для систем BSD (пример кода: http://www.nongnu.org/gap/batmon/)
- waterline: battery_indicator: добавить режим отображения в виде иконки (пример кода: https://github.com/valr/cbatticon)
- waterline: battery_indicator: для режима отображения в виде иконки реализовать смешивание иконок аналогично как это следано в volumealsa
- waterline: создать класс виджетов, который будет являться окном контейнером для выпадающих элементов, таких как регулятор громкости и календарь. Класс должен обеспечивать позиционирование окна относительно элемента панели и отрисовку границ.
- waterline: всплывающие подсказки должны позиционироваться за границами панели.
- waterline: xkb_groups: в режиме “показывать раскладку как флаг” вычислять ширину апплета по максимальной из ширины меток, чтобы устранить “дёргание” при смене раскладки.
- waterline: taskbar: в меню, открываемом при щелчке по пустой области, добавить пункты:
- Окна каскадом
- Окна сверху вниз
- Окна слево направо (требуется интеграция с WM)
- waterline: в исходниках заменить все табуляции на пробелы
- waterline: в исходниках привести к единому виду размер отступов
- waterline: разбить configurator.c на несколько файлов
- waterline: использовать привязку панели к монитору по имени
gdk_screen_get_monitor_plug_name()
, а не по номеру монитора - stuurman-desktop: добавить в настройки пункт: “Скрывать/Отображать значки двойным щелчком по рабочему столу” (сама возможность уже есть, требуется её включение/отключение в настройках)
- stuurman-desktop: в контекстном меню рабочего стола делать неактивными пункты, относящиеся к файлам, когда значки раблочего стола скрыты.
- stuurman-desktop: сделать показ/скрытие иконок анимированным (с затуханием)
- stuurman: реализация опции –display-in-folder - открыть каталог с файлом и поставить курсор на указанный файл
- spicview: добавить панель превью списка файлов с навигацией по ней
- spicview: реализовать возможность передавать в агрументах программы несколько файлов (сейчас обрабатывается только первый)
- spicview: загрузку JPEG выполнять при помощи libjpeg(-turbo), чтобы: правильно обрабатывать color spaces
- spicview: реализация поддержки цветовых профилей
- spicview: реализация опций –zoom=fit, –zoom=xx%
- spicview: отображать не только имя файла, но и полный путь к каталогу, содержащему файл, в заголовке окна
- spicview: добавить пункт меню “Открыть расположение файла”
- spicview: весь код, взятый из jhead, собрать в кучу и как-то логически отделить от остального
- spicview: добавить поддержку DevIL как опционального backend
- spicview: добавить поддержку ImageMagick как опционального backend
- spicview: поддержка печати
- spicview: реализовать возможность обрезать изображения
- spicview: реализовать возможность изменять размер изображений
- spicview: реализовать возможность изменять насыщенность, яркость и контрастность
- spicview: добавить настройку: “Показывать скрытые изображения”
- spicview: добавить настройку поведения на колесо мыши: навигация по изображением, масштабировать изображение, прокрутка изображения вверх/вниз
- spicview: добавить настройку поведения на стрелки: навигация по изображением, прокрутка изображения
- new: создать утилиту sde-adjust-clock для настройки времени и синхронизации времени через интернет.
- new: создать независимую от WM утилиту, отображающую список окон по хоткею (то есть, “оторвать” alt-tab от WM). Предполагаемое название - sde-window-switcher.