Выпуск дистрибутива - прекрасное время для того, чтобы расслабиться заняться более глобальными задачами. На этот раз такой задачей оказался вывод списка значений переменных… Для многих не секрет, что утилиты в своей работе используют внутренние переменные, которые получают свои значения исходя из переданных параметров, настроек системы, аппаратных особенностей и т.д. В процессе подготовки утилит 3.0 мы пренебрегли добавлением функционала отображения переменных и сейчас настало самое время заняться этим вопросом.
Графический интерфейс диктует свои правила, с которыми приходится считаться. Если в утилитах 2.2, при выполнении команды, достаточно было параметром '--set'
передать новое значение переменной, то в графическом интерфейсе такой подход уже явно не подходит. В итоге три идеи объединённые вместе зародили новый проект - ветку 3.1.
Первую идею подкинула новая возможность утилитой cl-core изменять значение переменных, записывая изменения в /etc/calculate/calculate3.env
. cl-core работает на стороне сервера и такая возможность нужна была для отладки. Тем не менее, подобный подход отлично подходит для реализации изменений значения переменных. cl-core для указания метода использует запись вида метод.переменная, что также подтолкнуло на мысль использовать такую запись в шаблонах.
С момента перехода на утилиты 2.0, пакет calculate был разбит на несколько. Каждый пакет отличался своим набором переменных и своей логикой работы. В версии 2.2 мы выполнили объединение шаблонов в одну директорию templates. Все шаблоны в ней разделены по по древовидной структуре, в основе которой лежат директории с именами пакетов утилит. Если мы сможем обращаться сразу ко всем переменным утилит, то почему бы нам не переделать структуру портежей, взяв за основу события, а не методы. Подробнее про события можно почитать здесь.
Что мешало это сделать раньше?
Как я уже упоминал, утилиты раздробились на несколько пакетов. Некоторые, например calculate-assemble не входят ни в один дистрибутив, какие-то могут быть удалены впоследствии. Любое обращение к переменной удалённого пакета приведёт к ошибке. Мы решили изменить структуру шаблонов, чтобы обойти это ограничение.
Что изменится?
# Немного ускорится обработка шаблонов, т.к. вызов наложения шаблонов для изменения системных файлов не нужно будет производить отдельно для пакетов calculate-desktop и calculate-client.
# Расширится функционал Clt шаблонов. Теперь можно будет обращаться к любым переменным. В настоящее время Clt шаблоны могут использовать только переменные calculate-install.
# Новая структура дерева шаблонов выглядит более логичной и понятной. Во главу угла ставится событие, а не пакет.
Чтобы не переписывать шаблоны, добавляя к каждой переменной метод, будет добавлена поддержка указания метода на уровне не только переменной, но и заголовочного файла или директории, через опцию module. Т.е. достаточно указать ‘module=install’, чтобы для всех файлов внутри директории по-умолчанию работа была с переменными пакета calculate-install
.
Так как новая система шаблонов не будет поддерживаться утилитами 3.0
, решено было взять номер версии 3.1
.
И напоследок самое интересное, возвращаясь к реализации изменения значений переменных. Такая поддержка появится и в консоли, и в графическом клиенте. Причём в последнем она будет чем-то напоминать изменение параметров в браузера firefox при вводе в адресной строке ‘about:config’. Изменённые значения будут сохраняться и использоваться при последующих запусках утилит.
Где можно посмотреть?
Лучше один раз увидеть. Обновите оверлей и перейдите в директорию шаблонов:
eix-sync
cd /var/lib/layman/calculate/profiles/templates/
ls -l
Это текущая система шаблонов. Перейдя в директорию ‘3.1’, вы увидите новую структуру шаблонов.
cd 3.1
ls -l
Easy Linux from the Source