m039 03.02.2010 02:06
Linux Games — Через wine к PlayOnLinux - Скриптописание
Дальше идут рассуждение и переваривание системы написания скриптов для POL.
Хочу начать с того, что валидация скриптов в POL мне не нравится. Мой скрипт пролежал у меня в профиле месяца 3, потому что руки никак не доходили его изменить. А исправить нужно было 2 строчки. Как мне кажется, если исправление не существенное или малозначительное валидатор должен его подправить. Но они сделали свой выбор в сторону сообщества..
Скрипты для POL написаны на shell-e, словом ничего сложного в этом нет. Даже это акцентируется, дабы для написания скрипта нужен оочень маленький уровень начальной подготовки. Уже одно это спорно, но не буду влезать своим мнением и оставлю выбор читателю. Хотя все таки, мне будет тяжело не фыркнуть то там, то тут.. Извиняюсь..
Качаем любой скрипт.
Если появится желание протестировать эту программу, попробуйте скачать скрипты с главного сайта проекта. И продолжайте читать.
Запускаем скрипт из POL
Сначала скопируйте содержимое скрипта и сохраните на жесткий диск.
Чем мне нравится система POL это идеей обмена скрипта для wine-a. Вот например скачали(или написали) скрипт, а потом заходите в программу playonlinux выбираете "Утилиты -> Запустить неофициальный скрипт" и начинается установка.
Заметка: И тут сразу же недочет интерфейса - выбрали "Запустить неофициальный скрипт" нажали отмену, а он побежал и не остановился. А потом решили заново запустить скрипт, опять выбираете "Утилиты -> Запустить неофициальный скрипт", а путь к папке не сохранился и приходится заново выбирать скрипт, который может находится в "/media/flash/games/kbtl/script/old/tmp/smth.sh"Смекалка проявляется и скрипт перемещается в ~/smth.sh
Поэтому я нашел очень здоровское решение. Нужно запускать скрипты в отладчике. Но на самом деле это с натяжкой можно назвать отладчиком - это лишь стандартная консоль. Выбираем "Утилиты -> Отладчик PlayOnLinux".
Появилась консоль.
Заметка: что бы выполнить скрипт из консоли, достаточно перейти в папку со скриптом и выполнить "sh script.sh"
Экспериментируем с "API" (через отладчик)
Теперь можно экспериментировать с PlayOnLinux. Да-да, лучше не писать большие и страшные скрипты, что бы проверить правильно ли работает та или иная функция, а прямо в консоли штудурить.
Попробуем поиграться, для начало можно набрать команду "env". На экран будут выведены переменные окружения консоли, среди которых можно найти, например, вот такую $REPERTOIRE. Проверив её командой "echo $REPERTORIE", можно убедиться, что ссылается она на ~/.PlayOnLinux.
Дальше еще проще, переходим к гайдам, которые предоставляет POL:
Посмотрим, воо.. замечательная функция POL_SetupWindow_message ну и нотация команд. Хотя можно попробовать автодополнение в консоли и выбрать POL , на что вылетит списочек из функций данной программы.
Попробовал сейчас эту функцию, не запускается. А проблема вот в чем, что перед использованием этих функций нужно выполнить вот эту POL_SetupWindow_Init. После чего, можно уже пользоваться POL_SetupWindow_message.
А произошло, то что функцией инициализации создается окно даже боюсь сказать, какие виджеты используются, после чего следующей функцией посылается нужный сигнал или сообщение. Ни кому не советую так проектировать GUI..
Экспериментируем с "API" (заметка о встроенном дополнении редактирования)
Теперь по крайней мере понятно как разбираться с этой программой. Но я хочу упомянуть вариант, который иногда предлагают на форуме. Использовать дополнение ScriptCreator, которое как мне кажется унижает полное достоинство и так не подготовленного пользователя линукс, которое сформулировал POL. Это среда разработки, т.е. редактор, в котором есть автодополнение мышкой по меню.. хм.. по верхнему меню, которое вставляет комманду, да еще спрашивает в отдельном окошечке какие параметры передать. Ужос одним словом!
Заметка: Правильный подход это брать готовый скрипт и кромсать его, пока он не станет похожим на работающий. К этому и приступим.
Справка POL
При написании скрипта у меня возник вопрос, как узнать, что делает та или иная функция. Как выяснилос, достаточно просто нужно лишь воспользоваться ctag-ом и любимым редактором. После чего, можно прыгать по исходникам. Я так и сделал, пока не узнал, что есть заныканный на самом верху странички референс всех функций. Исходники POL-a настолько же ужасны как и идея с GUI-йа и shell-a. Референс лучше, потому что исходники не могу назвать симпатичными.
Заметка: Перед написанием скрипта, я убрал строчки ответственные за directx и установку его. В POL это можно делать через кнопку на панели задач "Установить", а там выбрать понравившуюся версию directx. Имхо мило. :)
Заметка: Главное выбрать скрипт поновее, иначе могут использоваться конструкции, которые уже не используются, т.е. запрещены. Вам просто потом посоветуют от них избавиться. Да и поновей скрипты выглядят получше.
Немного в целом, что представляет скрипт
Не буду описывать подробно, что делает та или иная функция все достаточно понятно, если вы взялись писать скрипт. Но алгоритм в скрипте есть, хоть и достаточно прозрачный:
Сначала создается окно командой POL_SetupWindow_Init, в конце же оно уничтожается командой POL_SetupWindow_Close. В промежутке между этими функциями выполняются другие, задача которых либо спросить пользователя нажать кнопку "Next" или в редком случае что-нибудь написать. Функции которые запрашивают данные, результат возвращают в глобальных переменных. В принципе, это все особенности скриптописания.
Мааленькие после заметки:
Так же не забудьте ставить скобочки, на случай если в пути файла окажутся пробелы.
Не выполняйте в отладчике комманду ". script.sh" .Взамен используйте "sh script.sh".
Так же хочу обратить внимание на архитектуру проекта. Функции, которые выполняют действия, а в данном случае спрашивают данные у пользователя не совсем корректны. Если бы они были корректы, то последующие действия, которые выполнялись, были крайне простыми. А так получается, что появляются много обходов вполне простым действиям. Самый простой пример - это установка всех программ в ~/.PlayOnLinux/wineprefix папку. И приходится извращатся, если установилось куда-нибудь в другое место. Я молчу о локали.
В целом, получилось какое-то путешествие в мир проекта PlayOnLinux. Да это не есть великолепный проект, но все таки иногда он приносит удовольствие, когда любимая игрушка устанавливается в минимум движений. А если этот скрипт выполняет достаточно большую работу с регистром оффтопика, то вообще замечательно.
З.Ы. Отправил заново на проверку скрипт King's Bounty: The Legend, который я написал 2-3 месяца назад. Посмотрим, что из этого выйдет.
exelens 03.02.2010 09:09 #
+ 0 -
А продолжение будет?