LINUX.ORG.RU

Расположение yad и zenity на экране

 , , ,


0

1

Сейчас делаю GUI к своему скрипту и столкнулся с неприятной эстетической проблемой - окно, которое создаёт yad или zenity, всегда в левом верхнем углу, как бы я его не двигал во время работы скрипта, при последующем запуске - всё равно окошко появляется в левом верхнем углу. Возможно ли как-то сделать так, чтобы оно всегда открывалось по центру экрана или в том месте, где было закрыто?

Решение найдено тут

★★★★★

Последнее исправление: Desmond_Hume (всего исправлений: 1)

Ответ на: комментарий от papin-aziat

Тогда было бы devilspy. Я думаю, тут всё замешано на дьявольски вкусном пироге, который пока не поддаётся мне. Не понимаю, почему скрипт тупит и не хочет делиться пирогом. Пишу такой скрипт:

devilspie2 conv_enc

zenity --list --width=530 --height=300 --title="Конвертация кодировки файлов" --text="Выберите назначение конвертации" --column=" " --column=" " --radiolist 1 "Для чтения в Ubuntu (UTF-8)" 2 "Для чтения в Windows (ISO-8859, WIN-1251)" 

Но ничего не происходит. Даже zenity не запускается.

Если же запустить вторую команду в одном терминале, а первую — в другом, то devilspie2 отрабатывает настройку на отличненько.

Конфиг для devilspie2 такой вот:

if (get_window_name()=="Конвертация кодировки файлов") then
	-- x,y, xsize, ysize
	set_window_geometry(800,400,530,300);
end
Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от Desmond_Hume

https://man.archlinux.org/man/yad.1.en

–geometry=WIDTHxHEIGHT+X+Y
Use standard X Window geometry notation for placing dialog. When this option is used, width, height, posx, posy, mouse and center options are ignored.

–posx=NUMBER
Set the X position of dialog window. NUMBER can be negative.

–posy=NUMBER
Set the Y position of dialog window. NUMBER can be negative.

anonymous
()
Ответ на: комментарий от dmitry237

Да, возможно так сработает, такая мысль не пришла в голову, что ошибка могла быть в количестве дефисов. Да, yad работает. Жаль, что в zenity такого нет.

Desmond_Hume ★★★★★
() автор топика
Последнее исправление: Desmond_Hume (всего исправлений: 1)

Мужики, решение оказалось, как обычно, до неприличия простым:

devilspie2 conv_enc &
zenity --list --width=530 --height=300 --title="Конвертация кодировки файлов" --text="Выберите назначение конвертации" --column=" " --column=" " --radiolist 1 "Для чтения в Ubuntu (UTF-8)" 2 "Для выгрузки в 1С, на Windows (ISO-8859, WIN-1251)"

Надо было в фон загнать процесс от devilspie2 c помощью «&» на конце команды. Вот именно с «&» скрипт работает на ура!

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от Desmond_Hume

В ~/.config/autostart (у меня гном {закомментил}) devilspie2.desktop:

[Desktop Entry]
Name=devilspie2
# Icon=preferences-system-windows
Exec=devilspie2
Terminal=false
Type=Application
# X-GNOME-Autostart-enabled=true

У меня документация в /usr/share/doc/devilspie2/README
Срипты класть в ~/.config/devilspie2
Для удобства, чтоб не запоминать, где почитать

ln -s /usr/share/doc/devilspie2/README ~/.config/devilspie2/README

Надо туда положить скриптик для дебага, чтоб получать инфу об окне, у меня как-то так

debug_print("================================================================================");
debug_print("Application: " .. get_application_name());
debug_print("Window NAME: " .. get_window_name());
debug_print("Window CLASS: " .. get_window_class());
debug_print("CLASS instance: " .. get_class_instance_name());
debug_print("Window TYPE: " .. get_window_type());
debug_print("Window ROLE: " .. get_window_role());
x, y, width, height = get_window_geometry();
debug_print("Geometry: X: "..x..", Y: "..y..", width: "..width..", height: "..height);

Теперь, когда нужное окно открыто, можно глянуть его свойства

devilspie2 -de
# Ctrl+C, чтоб не висел второй процесс

К сожалению, не все окна распознаются при открытии, например firefox очень вредный, приходится по-всякому подшаманивать.

Для окошек, к которым привязываешь события на открытии, просто кладёшь скрипты с расширением .lua в каталог. Для тех, к которым на закрытии, чуть сложнее: должен быть скрипт devilspie2.lua, в котором указывать скипты, которые работают на закрытии окон (иначе будут работать на открытии), например

scripts_window_close = {
    "foo.lua",
    "bar.lua",
    "another.lua"
}

После манипуляций со скриптами перезапускать devilspie2 не надо (он тупо читает каждый раз заново), но если косячил в скриптах, то лучше проверить наличие процесса (у меня падал много раз из-за косяков).

Вроде всё. Ну, и если не хватает штатных возможностей, то через os.execute творишь любую дичь на открытии и закрытии окон типа

if (get_window_name() == "Telegram") then
    os.execute("kill $(pgrep Telegram)");
end
papin-aziat ★★★★★
()
Последнее исправление: papin-aziat (всего исправлений: 2)