Kraplax 22.01.2009 17:50
Я рекомендую — MakeStatus: новый плазмоид для разработчиков!
ОригиналЯ всегда хотел создать плазмоид с тех самых пор, как появился kde4.0 но у меня просто не было достаточно интересных идей. Наконец, около 2х (на момент написания статьи автором - прим. пер.) дней назад в результате ситуации типа "помоги себе сам" у меня появилась идея.
Позвольте представить вам функциональность данного плазмоида, который я сделал для изучения Plasm'ы.
Обычно мы разработчики довольно часто собираем из сырцов. Часто мы запускаем несколько процессов сборки в фоне. И это довольно надоедает следить за процессом сборки уставившись в экран. Некоторые запускают какую-нибудь задачу только для того, чтобы обнаружить что компиляция уже давно завершилась.
Некоторые умные люди ставят echo -e '\a' на запуск сразу же после вызова make для оповещения.
Однако, было бы гораздо удобнее иметь средство слежения за процессом где-нить на панели или в качестве апплета на рабочем столе.
Особенно, когда у cmake есть такая замечательная способность выдавать прогресс в процентах. Так что организовать отображение совсем несложно.
Ориентируясь на такой сценарий использования (см. также Use case - прим. пер.) я разработал простой плазмоид основанный на движке данных (data-engine, термин специфичный для Plasma - прим. пер.), который состоит из трех основных компонент:
Движок данных с D-Bus интерфейсом для добавления и удаления make source, а также задания прогресса для уже добавленных make-source.
Плазмоид, который на данный момент служит для отображения общего прогресса всех процессов компиляции.
makeinvoker, отдельная программа основанная на qt-core, которая служит "оберткой" ("wrapper", если такой термин более привычен читателю - прим. пер.) для make и выбирает из вывода последнего информацию о прогрессе. Как только он находит информацию о прогрессе, то тут же передает ее движку данных с помощью D-Bus вызовов. Также makeinvoker выводит стандартные потоки вывода (stdout) и ошибок (stderr) от make в свои аналогичные потоки.
Вот скриншот работы данного апплета.
Вооружившись информацией с TechBase я сразу уловил основы. Я действительно люблю архитектуру Plasma - гибкую, интуитивную, и при этом такую мощную :)
Однако, код MakeStatus не очень-то красиво выглядит, потому что я еще новичек в плазмоидах, движках данных и D-Bus. Понадобится время чтобы привести все к достойному виду.
Вот несолько идей, которые можно будет воплотить в жизнь:
Механизм уведомлений об окончании работы make (возможно, с подсказками об ошибках/предупреждениях, если таковые будут)Возможность приостановить/продолжить выполнение makeОтображать все процессы make с их прогрессом в extender'e (также особенность архитектуры Plasma - прим. пер.) при нажатии на плазмоид.
На данный момент есть проблема для которой, боюсь, нет легкого решения. Проблема эта в том, что "окрашивание текста" выводимого из Makefiles сделанных с помощью cmake не работает. Я незнаю как читать stdout из QProcess и перенаправлять то же самое в родительский процесс с окрашиванием текста. Любая помощь приветствуется :)
Также почему-то я не могу заставить соединение D-Bus с движком данных существовать отдельно как я хотел. Я пробовал
1 |
|
Но как-то это создает соединение на ":1.125". Я, правда, мало знаю dbus - поэтому разрешу этот вопрос потом (или может быть мне кто-нибудь поможет).
Сейчас путь к интерфейсу dbus находится в соединении "org.kde.plasma".
Кстати, для мэйкфайлов созданных не с помощью cmake не существует способа получить информацию о прогрессе. Для таких систем компиляции прогресс равен либо 0%, либо 100% (да, по своей натуре он бинарен ;) )
Вот и все что я хотел сказать. Любые отзывы приветствуются. Вообще-то, я был бы рад услышать как можно больше идей для этого плазмоида.
Ranma 22.01.2009 19:24 #
+ 0 -
Скажите, у Вас yakuake под KDE 4 работает?
оффтопик, конечно. Но да, работает, причем прекрасно. И если что - yakuake есть как для 3х так и для 4х КДЕ. Причем, насколько помню - оба работали у меня адекватно.
Да, пардон, за оффтопик, просто именно для описанных выше целей я и использую yakuake, но под KDE 4 он у меня не запускался, правда пробовал я это дело в конце декабря на Debian sid…
Эээ... Я не понял он вызывает заместо make некую свою программу эквивалентную make+что-то?
насколько я понял он просто делает обертку, которая все равно потом вызывает make. Обертка нужна, опять же, как я понял, для того чтобы парсить вывод стандартного мэйка, ибо мэйкфайлы сделанные с помощью cmake обладают ценной информацией о прогрессе.
Гм... Штука любопытная, но всё зависит от того как она реализована. Сам я использую костыль:
make install && kdialog --passivepopup 'Успех!!!'
ну вот в том-то и дело, что здесь смысл не столько в том чтобы узнать завершилось задание или нет, сколько в том, чтобы на панели у тебя или на рабочем столе отображался прогресс в процентах. Такими метками процентов обладают мэйкфайлы созданные с помощью CMake.
идея хороша! Я лох, объясните мне на пальцах, он любой make отслеживает, или запущенный по-особому? Круто бы было время до завершения показывать, но эт я так понимаю, сложно.
Насчет любого мэйка или нет - незнаю, автор сего плазмоида не выложил его еще в svn даже, так что не особо понятно. Я думаю что там все настраивается. Возможно, просто вместо make нужно будет использовать makeinvoker для билда, что было бы просто прекрасно.
Насчет расчета времени - это было бы действительно удобно, однако довольно сложно и все равно неточно.
Насчет расчета времени - это было бы действительно удобно, однако довольно сложно и все равно неточно.