LINUX.ORG.RU

[awesome] Фокус на окно с определенным именем

 


0

1

Впечатлившись и воодушевившись некоторыми ссылками наваял скрипт:

#!/bin/sh

xwin=`wmctrl -l | awk '{print substr($0, index($0,$4))}' | sort -u | dmenu $@` 
wmctrl -F -a "$xwin"
 
exit 1

Теперь есть желание сделать то же самое, но средствами awesome. Пока родил следующее, но оно не работает:

echo -e 'for k, c in pairs(client.get()) do if c.name == "Untitled" then c.focus = not c.focus end end' | awesome-client

Что я делаю не так?

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

Можно поподробнее?

echo -e 'for k, c in pairs(client.get()) do if c.name == "Untitled" then c:raise() c.focus = not c.focus end end' | awesome-client
raise срабатывает, а фокус все равно нет.

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

awful.tag.viewmore(c:tags(), 1)

1 — это номер скрина. Его тоже можно получать, но у меня никогда не было двух мониторов, поэтому тупо хардкодил.

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

Спасибо. остался один тупой вопрос:

echo -e 'for k, c in pairs(client.get()) do if c.name == "Untitled" then awful.tag.viewmore(c:tags(), 1) end end' | awesome-client && \
echo -e 'for k, c in pairs(client.get()) do if c.name == "Untitled" then client.focus = c c:raise() end end' | awesome-client
echo -e 'for k, c in pairs(client.get()) do if c.name == "Untitled" then awful.tag.viewmore(c:tags(), 1) client.focus = c c:raise() end end' | awesome-client 

Почему первый вариант работает, а второй нет?

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

Знаешь, для меня большие новости, что в луа можно так вольно в одну строку писать. Может awesome-client не ругается на корявый синтаксис? Потому как в rc.lua подобная активация у меня работала.

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

>для меня большие новости, что в луа можно так вольно в одну строку писать
Ну это ж не питон:)

Может awesome-client не ругается на корявый синтаксис?

Ругается, но не в данном случае. Причем во втором варианте срабатывают tag.viewmore и raise, а focus - нет.

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

В конечном счете скрипт приобрел такой вид:

#!/bin/sh

xwin=`wmctrl -l | awk '{print substr($0, index($0,$4))}' | sort -u | dmenu $@` 

echo -e " 
		for k, c in pairs(client.get()) do 
			if c.name == \"$xwin\" then 
				cf = c
				break
			end
		end
		if cf then
			awful.tag.viewmore(cf:tags(), 1) 
		end
		if cf then
			client.focus = cf cf:raise()
		end" | awesome-client 

exit 1

Но я забил на эту затею. Фокус срабатывает через раз. А

awful.tag.viewmore(cf:tags(), 1) 
client.focus = cf 
cf:raise()
в одном блоке вообще не работает.

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

Последний раз, когда сидел за awesome, в начале лета, у меня всё прекрасно работало. Именно в такой последовательности. Например:

function spawn_or_raise(cmd, matcher)
    local c = get_client(matcher)
    if c then
        awful.tag.viewmore(c:tags(), 1)
        client.focus = c
        c:raise()
    else
        awful.util.spawn(cmd)
    end
end

Может опять что-то сломали? Хотя рандомные глюки с фокусом на некоторых приложениях были (opera, evince), собственно поэтому и убежал на openbox.

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