LINUX.ORG.RU

изменение параметров окна в иксах в момент запуска приложения

 ,


0

2

Приветствую.

Есть хотелка. Нужно менять WM_CLASS, к примеру, на лету (точнее на момент запуска приложения). Есть ли какие-то методы реализации подобного?

PS: Нужно это для того, что бы несколько разных хромчиков раскидывать по разным табам awesome, при условии того что title каждый раз может быть разным. Сейчас я могу, скажем, запускать хром, xdotool'м каким-то или xprop'ом искать хромого, заменять его класс. Но после этого необходимо перезапустить awesome, что бы он перечитал имена и классы окон, и разложил их уже в соответствии с новыми именами. Это не круто. Хотелось бы менее кривого решения.

PPS: Когда-то, когда хром использовал GTK+, мне достаточно было добавлять только `--class`. Но теперь, как я обнаружил (потекла криокамера), у них свой тулкит, и потому не работает (хоть бы в мане это исправили, изверги).

Заранее спасибо.



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

Сейчас я могу, скажем, запускать хром, xdotool'м каким-то или xprop'ом искать хромого, заменять его класс

Если эта часть устраивает, то можно написать функцию, чтобы awesome читал классы окон и раскладывал без перезапуска, по хоткею или команде. Это обходной путь на случай, если не получится сразу запускать с измененным классом.

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

Я думал он перечитывает классы и прочее только на старте. А как можно реализовать перетасовку, не передёргивая абсолютно всё?

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

Правила срабатывают для стартующих, но ничто не мешает задать собственную систему распределения по тегам, вроде

-- Таблица соответвия приложений (по имени класса) тегам
local app_sorter_list = {}
app_sorter_list["Nemo"] = tags[1][5] -- где "1" номер монитора, "5" номер тега
app_sorter_list["Geany"] = tags[1][4]

-- Функция перемещения по тегам
function app_sorter()
    for _, c in ipairs(client.get()) do
        if app_sorter_list[c.class] then awful.client.movetotag(app_sorter_list[c.class], c) end
    end
end
Функцию можно повесить на хоткей или вызывать из шела командой
echo "app_sorter()" | awesome-client

К слову, возможно более элегантным решением будет повесить обработчик сигнала property::class на хромы, но сейчас лень проверять этот вариант на работоспособность.

Worron ★★★
()

можно так:

где-нибудь в начале конфига

local sn_tag_table = {}

забиндь на какую-нибудь кнопочку:

local _, sn = awful.utils.spawn('firefox', true)
sn_tag_table[sn] = tags[1][3]

и добавь в коллбэк сигнала manage:

for _sn, _tag in pairs(sn_tag_table) do
  if c.startup_id == _sn then
   awful.client.movetotag(c, _tag)
   sn_tag_table[_sn] = nil
  end
end

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

Прошу прощения за задержку с ответом.

Спасибо огромное за решение, да еще и сразу с кодом.

PS: а за конкретно моё решение, видимо нужно будет раскуривать в иксы и думать о возможности написания какого-то пре-врапера; тебя кастонуть, в случае успеха в этом вопросе?

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

тебя кастонуть, в случае успеха

Спасибо, но думаю не обязательно. Если возникнет подобная задача скорее попытаюсь нагородить решение полностью средствами awesome. Удачи.

Worron ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.