FreeSource: AltLinux/Sisyphus/Alterator/start

Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Низкий старт

или как сделать свой первый модуль для Alterator за пять минут

1. Подготавливаем почву

Прежде всего надо поставить в систему следующие пакеты:

Создадим также каталог, в котором будем проводить все дальнейшие эксперименты; пусть он называется alterator-hello.

2. Сборочная среда

Alterator поставляется с большим количеством готовых функций для создания файлов описаний проектов на базе makefile.

Вот как будет выглядеть минимальный Makefile для нашего модуля:

Мы включили специальные функции для поддержки работы с файлами переводов (po.mak), файлами описания интерфейса (ui2.mak), а также файлами бакендов (backend.mak)

3. Первый интерфейс

Для создания первого интерфейса необходимо создать подкаталог ui и в нём разместить файл hello.scm содержащий описание интерфейса:

Как можно догадаться по описанию, после запуска Alterator мы увидим окно с текстовой меткой “Hello world” и кнопкой “Quit”, при нажатии на которой произойдёт завершение работы с программой. Первое слово document:surround можете считать обязательной конструкцией или почитать другую документацию за разъяснениями её назначения.

Итак, на данный момент дерево модуля выглядит следующим образом:

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

Для этого, находясь в каталоге alterator-hello, дадим команду make.

В результате будет создан профиль для alterator-standalone с именем hello, файл меню, для запуска профиля и ещё несколько вспомогательных карт.

Теперь запустим центр управления командой /usr/sbin/alterator-standalone -l hello. Обратите внимание на полное указание пути к /usr/sbin и параметр -l. Первое требуется чтобы запустить центр управления напрямую а не через утилиту console-helper, второе — включает режим функционирования alterator, в котором начинают рассматриваться локальные файлы, а не те, что находятся в основных системных каталогах.

//NB: описание запуска при помощи alterator-standalone -l <имя> для альтератора из 4.0 соответствует реализации до версии 2.5 включительно.

В версиях 2.6/3.0 <имя> игнорируется, поскольку предполагается навигация из меню, которое строится из файлов applications/*.desktop установленных в системе модулей — для отладки надо подкладывать такой .desktop в /usr/share/alterator/applications/ (от имени root).

Исправлено в alterator-standalone-4.0-alt3, .//

Первый вариант интерфейса для центра управления готов.

4. Улучшаем интерфейс

Вы, наверное, заметили, что как-то неудобно размещается кнопка “Quit”. На самом деле в распоряжении модуля находится вся нижняя панель сбоку от кнопки “<<", каждый модуль может менять её по своему разумению. Давайте переместим туда кнопку “Quit”.

Все элементы интерфейса, размещённые внутри frame:buttons-view, автоматически попадут на нижнюю панель кнопок. Запускаем alterator-standalone и смотрим результат:

Работаем дальше. Английский язык хорошо, но родной гораздо лучше. Для перевода (i18n) интерфейса Alterator использует стандартные mo-файлы GNU gettext.

Первым делом добавим магическую строчку после document:surround (подробности в отдельной документации):

После этого все строчки, которые хотим перевести окружаем конструкцией (_ xxx ), где xxx — требуемая к переводу строка. Усовершенствованное описание интерфейса теперь выглядит следующим образом:

С помощью make update-po создадим файл-шаблон — po/alterator-hello.pot, скопируем его в po/ru.po и переведём нужные строчки. Следующей командой make build-po скомпилируем mo-файл po/ru.mo. Результат можно видеть на следующем рисунке:

5. Создаём простейший backend

Alterator предоставляет несколько вариантов backend (кода, который непосредственно выполняет работу); здесь будет продемонстрирован только один из них. Создадим подкаталог backend3 и файл backend3/hello следующего содержания:

Первым делом подключаем вспомогательную библиотеку, которая делает написание backend делом очень простым. Данный бакенд в случае входящего запроса типа “list” выдаст в качестве ответа список из двух объектов “first” и “second”. А в случае запроса типа “write” запишет значение переданного в этом запросе параметра param (это не ключевое или предопределённое слово, а просто выбранное нами имя переменной!) в файл ~/tmp/backend-out.

Перед дальнейшей работой убедитесь, что файл backend3/hello помечен как исполняемый.

Теперь остаётся привязать интерфейс к backend. Внутри интерфейса backend будет иметь имя '/hello (то есть имя совпадает с именем файла бакенда).

Список имён объектов будем получать командой (woo-list-names '/hello)), а записывать параметр param с помощью команды (woo-write '/hello 'param “tram-param”).

Вот обновлённый файл описания интерфейса:

Помимо уже известных элементов появляется listbox, строки которого заполнены списком имён, полученным из backend, а также кнопка, которая произведёт обращение к backend при щелчке на ней.

После запуска интерфейса и нажатия на копку “Write” можете убедиться, что содержимым файла ~/tmp/backend-out будет param=tram-param.

Q: а если хочется, скажем, имя выделенного пункта туда записать, а не трам-парам?

A: (со слов inger) необходимо немного модифицировать hello.scm, чтобы код принял вид:

Q: а если две кнопки надо?

A: (со слов lioka) делаем сколько надо button и в их clicked передаём 'param и (или) 'action; backend3.sh позаботится, чтобы значение можно было получить в обработчике как $in_param и $in_action. Соответственно меняем имена по вкусу и надобности.

6. Запаковываем и повязываем бантиком

Дело за малым, запаковать всё это великолепие в rpm-пакет и показать всем, как быстро вы смогли сделать модуль для Alterator.

Первым делом очищаем содержимое, и запаковываем всё в архив

Создаём примерно такой вот spec-файл...

Запаковываем, собираем, устанавливаем, запускаем через alterator-standalone hello, или даже через config-hello получаем удовольствие ;)

Game is over... show must go on ;)

Страницы, ссылающиеся на данную: AltLinux/Sisyphus/Alterator

PS: следующий модуль можно «зарыбить» при помощи alterator-sdk ;-)