Как программно управлять окнами приложений?

3

Кто-нибудь знает библиотеку, желательно для ruby ​​или python, которая позволит вам получить доступ к списку открытых приложений и позволить вам манипулировать ими? Все, что я действительно хочу сделать, это изменить их геометрию и свести к минимуму или закрыть их. Я немного рубился с ruby-gnome2, но не нашел ничего для манипулирования окнами, отличными от тех, что вы делали.

Я использую 10.10.

    
задан greg 21.01.2011 в 08:58
источник

3 ответа

4

Самый простой способ сделать это - использовать wmctrl . Вы можете прочитать man wmctrl , чтобы узнать, как его использовать.

sudo apt-get install wmctrl

В основном вы можете связать командную строку с классом «Window» и добавить к ней методы, которые используют команды wmctrl в фоновом режиме.

class Window
    @@windows = []
    def self.windows
        @@windows
    end
    def self.get_windows
        @@windows.clear
        'wmctrl -l'.split("\n").map do |str|
            @@windows << self.class.new(str.split(' ')*)
        end
    end
    def initialize window_id, desktop_id, client_machine, window_title
        #set up object here
    end
    #add other methods here
end

Это должно быть хорошей отправной точкой. Это не протестировано или что-то еще, но вы должны уметь это отсюда. Теперь вы можете добавить методы экземпляра, например. change_geometry , который может использовать параметр -r <WIN> -e <MVARG> .

Вам следует ознакомиться с каналами и IO в целом , прежде чем делать это.

Возможно, когда вы достигнете того, что вам нужно, вы можете распространять это как рубиновую библиотеку и упаковать ее для Debian / Ubuntu.

    
ответ дан dv3500ea 21.01.2011 в 11:16
источник
3

Вы можете использовать расширенные подсказки диспетчера окон , чтобы сообщить WM для изменения некоторых окон. Это трюк, который использует wmctrl.

Обычно вам нужно использовать XLib для использования EWMH, но для python есть этот приятный проект: PyTile . Это программа python для разбиения окон. Мало того, что это хороший пример, он включил наиболее важные функции в один класс. Просто скачайте источник и посмотрите на Probe.py, он делает большую часть того, что вы просите.

В этом примере максимизируются все окна:

import Probe

prob=Probe.Probe()
winlist=prob.get_window_list()
for win in winlist:
    prob.window_maximize(win)
    
ответ дан Javier Rivera 21.01.2011 в 11:49
1

Эй, взгляните на wmctrl. Это не настоящая библиотека, а скрипт командной строки, который позволяет управлять окнами через ключи командной строки. Вы, конечно, сможете позвонить через систему.

sudo apt-get install wmctrl

Я использую его во многих сценариях оболочки, а иногда и perl-скриптах, используя system ()

HTH     

ответ дан finley 21.01.2011 в 11:18