Как перехватывать вызовы GTK-приложения? (Или узнать, чего и куда оно пишет, делает...)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
ТВЭЛ
Сообщения: 132
ОС: основана на SlackWare

Как перехватывать вызовы GTK-приложения?

Сообщение ТВЭЛ »

Есть удобная цветовыбиралка gcolor2, но она, к сожалению, вообще на UNIX-style плевать хотела (не принимает ничего в stdin, ничего в stdout не пишет). Хочу научить её запоминать последний выбранный цвет и при закрытии отправлять #hex в буфер обмена. Но не представляю, откуда брать эту информацию. Оно же как-то взаимодействует с X-сервером?
Время не ждет.
Спасибо сказали:
Аватара пользователя
ТВЭЛ
Сообщения: 132
ОС: основана на SlackWare

Re: Как перехватывать вызовы GTK-приложения?

Сообщение ТВЭЛ »

Кстати! В настройках XFCE или рабочего стала LXDE тот же "виджет" используется, при этом он запускается с нужным цветом (с тем, который был выбран в прошлый раз) и без диалога сохранённых цветов. Как делать то же самое? То есть всё же точно какие-то параметры принимает это штука, но в каком виде?

И оно закрывается при нажатии ОК. Вот бы также.

Очень интересно! Если пакет gcolor2 удалить, выбор цвета в настройке рабочего стола всё равно останется и выглядит в точности также.

Если запустить настройку, вообще никаких процессов не появляется в top.
Ничего не понимаю.
Время не ждет.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Как перехватывать вызовы GTK-приложения?

Сообщение /dev/random »

Это стандартный gtk'шный виджет, GtkColorSelection. То, что его использует программа gcolor2 вовсе не мешает и другим программам его использовать.

Если знаете питон, можете за несколько минут написать аналог gcolor2 с использованием PyGtk. А с учётом того, что в VIM есть возможность вызывать питоновые команды, можете сразу в виде VIM-скрипта сделать.
Спасибо сказали:
Аватара пользователя
ТВЭЛ
Сообщения: 132
ОС: основана на SlackWare

Re: Как перехватывать вызовы GTK-приложения?

Сообщение ТВЭЛ »

Питон не знаю :( Про виджет уже почитал, даже попытался исходники gcolor2 поправить под себя, но потратил дофига времени и пока никакого результата. Эх.

Да и вообще, надо ведь чтобы такая штучка мгновенно запускалась. Gcolor2 написан на C и работает очень быстро.
А питонский вариант наверняка притормаживать будет.
Время не ждет.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Как перехватывать вызовы GTK-приложения?

Сообщение deadhead »

ТВЭЛ писал(а):
06.08.2010 21:41
А питонский вариант наверняка притормаживать будет.
от того что вы будите дергать виджет силами питона, сам виджет автоматически на питон не перепишеться... так что в скорости вы не проиграете

P.S. SWIG
[x] close
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Как перехватывать вызовы GTK-приложения?

Сообщение /dev/random »

Код: Выделить всё

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

w = gtk.ColorSelectionDialog('color')
if w.run() == -5:
    c = w.get_color_selection().get_property('current-color')
    print '#%02x%02x%02x' % (c.red/256, c.green/256, c.blue/256)
w.destroy()
Спасибо сказали:
Аватара пользователя
ТВЭЛ
Сообщения: 132
ОС: основана на SlackWare

Re: Как перехватывать вызовы GTK-приложения?

Сообщение ТВЭЛ »

Там ещё надо модули питоновские GTK устанавливать, они тянут всякие зависимости.
В общем, я уже почти доделал другой вариант с UNIX-конвейерами :)

Кстати, немного оффтопный вопрос: как-то можно из консоли сделать активным окно с запущенным приложением?
Время не ждет.
Спасибо сказали:
Аватара пользователя
ТВЭЛ
Сообщения: 132
ОС: основана на SlackWare

Re: Как перехватывать вызовы GTK-приложения?

Сообщение ТВЭЛ »

В общем, пока сделал так:

Код: Выделить всё

colpick() { agave -d | grep current | awk -F# '{print "#"$2}' | tail -1 | > /tmp/lastColor }

+ в Vim сочетание на вставку цвета из /tmp/lastColor.

Поскольку Agave не молниеносно запускается (1-2 сек.), то её открываю на сеанс работы с цветами и переключаюсь между окнами.
В будущем подумываю сделать скриптик под Vim, чтобы он сам менял фокус окна.
Время не ждет.
Спасибо сказали: