LINUX.ORG.RU

Конфиг Awesome WM, работа с объектами client

 


0

1

Пытаюсь осмыслить, как получить доступ к активным клиентам.

В документации к API (раздел client) описана следующая функция:

get (screen)
Get all clients into a table.
Parameters:
screen: An optional screen number.
Return value:
A table with all clients.

http://awesome.naquadah.org/doc/api/modules/client.html#get

Добавляю от балды в глобальную область видимости конфига код:

y = client.get(1)
for k,v in pairs(y) do
	os.execute("echo sdfsdf >> /tmp/rcluatest")
end

Затем перезапускаю awesome и смотрю результат в файле /tmp/rcluatest. Собственно, там пустота, хотя несколько окон на момент опыта оставались открытыми. Где ошибка?

Ответ на: комментарий от krakatau

Даже несмотря на то, что в lua члены массивов индексируются с единицы, этот вариант я тоже попробовал. Не сработало.

galleyworm
() автор топика

os.execute(«echo sdfsdf >> /tmp/rcluatest»)

А не «/bin/sh -c 'echo ... >> /tmp/xxx'» ?

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

и советую запомнить io.tmpfile может оно будет необходимо

frozenix ★★★
()

думаю тут проблемка в том, когда этот код выполняется.

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

Жаль, но не помогло. У вас это работает? Я думаю, что проблема в неправильном понимании API awesome. Если попытаться вывести в файл абсолютно левую таблицу, то все получится. Вот такой код в конфиге срабатывает:

y = { 1, 2, 3 }
for k,v in pairs(y) do
	os.execute("echo sdfsdf >> /tmp/rcluatest")
end
То есть получается, что функция client.get(screen) возвращает в моем случае пустую таблицу.

И да, я в самом начале немного дезинформировал - файл /tmp/rcluatest даже не создается. То есть не происходит ни одной итерации в цикле.

думаю тут проблемка в том, когда этот код выполняется.

Возможно. Хотя я вообщем-то пробовал забиндить эту функцию на глобальные хоткеи - результат тот же.

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

Да вроде все-таки с единицы по умолчанию:

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio

> tab = { 1, 2, 3 }
> print(tab[1])
1
> print(tab[3])
3
Хотя это неважно, в любом случае в конфиге явно указано, что экраны нумеруются с единицы.

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

Решил перепроверить все-таки и забиндил функцию еще раз:

globalkeys = awful.util.table.join(
-- ..code..
    awful.key({ modkey, "Control" }, "s", 
    	function ()
			local y = client.get(1)
			for _,v in ipairs(y) do
				os.execute("echo " .. v.pid .. " >> /tmp/rcluatest")
			end
		end )
)
Теперь все работает. В прошлый раз, видимо, где-то ошибся. В общем, спасибо.

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

Ооочень странно, lua я знаю, но вот с единицей код у меня не работал, видать где-то опечатался. Действительно, нумерация идет от 1, но для 0 оно отдает такие же данные как и для 1. Кстати проверял все просто Mod4 + x и вводил код :)

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