LINUX.ORG.RU

Пара вопросов по управлению окнами в Awesome

 ,


2

2

1.) Как сделать так, чтобы определённое окно (указанное через class, instance или ещё как-нибудь), если находится в режиме floating, по умолчанию открывалось с определённой геометрией (определённое место и размер)? Я предвижу, что это делается через rules, но не знаю, как. Пожалуйста, укажите на нужное руководство.

2.) Как реализовать открытие определённого окна на определённом теге? Я хотел бы, чтобы при запуске awesome нужные мне программы открывались на заданных заранее тегах, а дальше уже на всё воля моя.

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

★★
	{ rule = { class = "Skype", role = "CallWindow"},
	properties = { opacity = 0.8, switchtotag = false, no_autofocus = true, floating = true, ontop = true, sticky = true  },
	callback = function(c)
		local scrgeom = capi.screen[capi.mouse.screen].geometry
		local clgeom  = c:geometry({width = scrgeom.width/10, height = scrgeom.width/10})
		local clgeom  = c:geometry({x = scrgeom.x + scrgeom.width - clgeom.width, y = scrgeom.y + scrgeom.height - clgeom.height}) 
	end
LiBer ★★★
()
Ответ на: комментарий от Valdor

И ещё вопрос появился - стандартный tile в awesome при появлении нового окна делает его приоритетным

     (1)                (2)                (3)
+-----------+      +-----+-----+      +-----+-----+
|           |      |     |     |      |     |  2  |
|     1     |  ->  |  2  |  1  |  ->  |  3  +-----+  ->
|           |      |     |     |      |     |  1  |
+-----------+      +-----+-----+      +-----+-----+

     (4)                (5)                (6)
+-----+-----+      +-----+-----+      +-----+-----+
|     |     |      |     |     |      |     |  5  |
|     |  3  |      |     |  4  |      |     +-----+
|     |     |      |     +-----+      |     |  4  |
|     +-----+      |     |     |      |     +-----+
|     |     |      |     |  3  |      |  6  |  3  |
|  4  |  2  |   -> |  5  +-----+  ->  |     +-----+
|     |     |      |     |     |      |     |  2  |
|     +-----+      |     |  2  |      |     +-----+
|     |     |      |     +-----+      |     |  1  |
|     |  1  |      |     |     |      +-----+-----+
|     |     |      |     |  1  |      
+-----+-----+      +-----+-----+      
Нет ли готовых раскладок, которые бы такое реализовывали?
     (1)                (2)                (3)
+-----------+      +-----+-----+      +-----+-----+
|           |      |     |     |      |     |  2  |
|     1     |  ->  |  1  |  2  |  ->  |  1  +-----+  ->
|           |      |     |     |      |     |  3  |
+-----------+      +-----+-----+      +-----+-----+

     (4)                (5)                (6)
+-----+-----+      +-----+-----+      +-----+-----+
|     |     |      |     |     |      |     |  2  |
|     |  2  |      |     |  2  |      |     +-----+
|     |     |      |     +-----+      |     |  3  |
|     +-----+      |     |     |      |     +-----+
|     |     |      |     |  3  |      |  1  |  4  |
|  1  |  3  |   -> |  1  +-----+  ->  |     +-----+
|     |     |      |     |     |      |     |  5  |
|     +-----+      |     |  4  |      |     +-----+
|     |     |      |     +-----+      |     |  6  |
|     |  4  |      |     |     |      +-----+-----+
|     |     |      |     |  5  |      
+-----+-----+      +-----+-----+      

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

стандартный tile в awesome при появлении нового окна делает его приоритетным

Чтобы избежать этого найди и раскомментируй строчку

-- awful.client.setslave(c)

attempt to index global 'tags' (a nil value)

Так не должно быть, в базовом конфиге определенно есть

tags = {
	names  = { "1", "2", "3", "4", "5", "6" },
	layout = { layouts[4], layouts[2], layouts[2], layouts[2], layouts[2], layouts[2]}
	}
for s = 1, screen.count() do
    -- Each screen has its own tag table.
    tags[s] = awful.tag(tags.names, s, tags.layout)
end

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

1.) Шикарно! Спасибо за подсказку.

2.) У меня вот так:

tags = {}
for s = 1, screen.count() do
    -- Each screen has its own tag table.
    tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, lain.layout.centerfair)
end

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor
local capi = {
    mouse = mouse,
    client = client,
    screen = screen
    }

Когда добавлял это в свой конфиг, придумал зачем это нужно, теперь вот не уверен :)

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

http://pastebin.com/AFhMsGS0

Как-то так. Заодно, если заметишь какой-нибудь идиотизм - сообщи, пожалуйста.

Кстати, не прояснишь один вопрос? В чём разница между

local lain = require("lain")
vicious = require("vicious")
require('freedesktop.utils')
Я имею в виду стиль объявления.

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

У тебя банально Rules объявлены ДО Tags, поменяй эти блоки местами.

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

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

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

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

В чём разница между

local lain = require("lain")
vicious = require("vicious")

Никакой особой разницы, делай как тебе удобно. Теоретически там есть разница в скорости в пользу local, но вряд ли это актуально в данном случае.

Хотя я таки предпочитаю local, если нет явной причины сделать данную переменную глобальной. Задать при подключении модуля ему свое уникальное имя может быть очень удобно и полезно.

local lain = require("lain")
local my_cute_lain = require("fixedmodule.lain")
Далее
require('freedesktop.utils')
Так подключаются модули старого образца, им вроде свое имя задать нельзя, если я не ошибаюсь.

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

Да мой конфиг это ужас, и я всё никак не соберусь его перелопатить, просто его нужно заново переписать распихать по отдельным модулям/пакетам, не очень хочется этим заниматься, тем более, что велик соблазн перейти на использование xmonad

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

это явно оптимизация, только вот не уверен, что я проверял, что она хорошо работает :)

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

А если я указываю local, то в какой области этот модуль становится локальным, т.е. что на практике меняется?

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

Все как и с обычными переменными, за исключением одной вещи, вот пример

local function is_exist(arg) print (arg and "Yes" or "No") end

-- В целом область видимости модулей аналогична обычным переменным
local mymodule1 = require("testmodule1")

do
	local mymodule2 = require("testmodule2")
	mymodule3 = require("testmodule3")

	is_exist(mymodule1) -- Yes
	is_exist(mymodule2) -- Yes
	is_exist(mymodule3) -- Yes

	-- Внесем некоторые изменеия в подключенный модуль
	-- это для примера чуть ниже
	print (mymodule2.some_value) -- nil
	mymodule2.some_value = 100500
	print (mymodule2.some_value) -- 100500
end

is_exist(mymodule1) -- Yes
is_exist(mymodule2) -- No
is_exist(mymodule3) -- Yes

-- А теперь нюанс
-- при повторном подключении модуля уже использовавшегося ранее
-- он берется из кеша, то есть со всеми проделанными изменениями
local second_req = require("testmodule2")
print (second_req.some_value) -- 100500

Worron ★★★
()

Когда уже в привычку войдёт подкреплять вопросы версией и конфигом? Или оплачивайте и призывайте экстрасенсов, чтобы они делали это за вас.

Да и тег tiling wm здесь лишний.

1.)

В правилах для клиентов (awful.rules) должен быть соответствующий array. Пример уже показали

attempt to index global 'tags' (a nil value)

Покажи ту часть конфига, где у тебя создаются таги.

2.)

Читай то, что я написал к 1.

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

Я решил пройтись по конфигу и вникнуть в некоторые бинды, которые никогда не использовал. Не смотря на то, что я прочитал документацию по этим командам, я так и не смог понять, что символизирует вот эта команда:

awful.screen.focus_relative

Ты не мог бы прояснить, чем сабж отличается от awful.screen.focus?

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor
awful.screen.focus(2) -- перейти на второй монитор, безотносительно того на каком мониторе фокус сейчас
awful.screen.focus(3) -- перейти на третий монитор, безотносительно того на каком мониторе фокус сейчас

awful.screen.focus_relative(1) -- перейти на следующий (напоимер на третий, если сейчас фокус на втором) монитор
awful.screen.focus_relative(-1) -- перейти на предыдущий (напоимер на первый, если сейчас фокус на втором) монитор
Worron ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.