Есть ли в awesome
4.0 способ отображать заголовок только в плавающих окнах?
Глядя на документы, кажется, что нет варианта из коробки.
Указать; Я ищу решение, которое работает, когда я динамически переключаю окна между плиткой и плавающим.
Есть ли в awesome
4.0 способ отображать заголовок только в плавающих окнах?
Глядя на документы, кажется, что нет варианта из коробки.
Указать; Я ищу решение, которое работает, когда я динамически переключаю окна между плиткой и плавающим.
Немного поздно, но я тоже хотел это сделать, и у меня это в основном работало. Он не охватывает все случаи, когда вы ожидаете, что клиент покажет или скроет свой заголовок, но он достаточно близок для моего варианта использования. Это довольно просто: сначала вам нужно отключить заголовки для каждого клиента, поэтому добавьте titlebars_enabled = false
в свойства правила по умолчанию, соответствующего всем клиентам.
Затем, когда клиент становится плавающим, вам нужно включить его заголовок и отключить его. когда он перестает плавать.
Я написал эту маленькую вспомогательную функцию, чтобы сделать код более понятным. Это довольно просто, если s
равно true
, то показать панель, иначе скрыть. Но есть одна загвоздка: в нашем случае у окон никогда не было заголовка, поэтому он еще не создан. Мы отправляем сигнал, чтобы построить для нас один, если текущий пуст.
-- Toggle titlebar on or off depending on s. Creates titlebar if it doesn't exist
local function setTitlebar(client, s)
if s then
if client.titlebar == nil then
client:emit_signal("request::titlebars", "rules", {})
end
awful.titlebar.show(client)
else
awful.titlebar.hide(client)
end
end
Теперь мы можем перехватить изменение свойства:
--Toggle titlebar on floating status change
client.connect_signal("property::floating", function(c)
setTitlebar(c, c.floating)
end)
Но это относится только к клиентам, которые меняют состояние после создания. Нам нужен хук для новых клиентов, которые рождаются плавающими или в плавающем теге:
-- Hook called when a client spawns
client.connect_signal("manage", function(c)
setTitlebar(c, c.floating or c.first_tag.layout == awful.layout.suit.floating)
end)
И, наконец, если текущий макет является плавающим, у клиентов не установлено плавающее свойство, поэтому нам нужно добавить хук для изменений макета, чтобы добавить заголовки на клиентах внутри.
-- Show titlebars on tags with the floating layout
tag.connect_signal("property::layout", function(t)
-- New to Lua ?
-- pairs iterates on the table and return a key value pair
-- I don't need the key here, so I put _ to ignore it
for _, c in pairs(t:clients()) do
if t.layout == awful.layout.suit.floating then
setTitlebar(c, true)
else
setTitlebar(c, false)
end
end
end)
Я не хотел тратить на это много времени, поэтому он не охватывает случаи, когда клиент помечен в плавающем макете или когда клиент помечен несколько раз, и один из этих тегов является плавающим.
Изменять
{ rule_any = {type = { "normal", "dialog" }
}, properties = { titlebars_enabled = true }
},
to
{ rule_any = {type = { "dialog" }
}, properties = { titlebars_enabled = true }
},
property::floating
(client.connec_signal("property::floating", function(c) ... end
), так и к тегу property::layout
(и для каждого видимого клиента). Затем переключите на них заголовки. Но будьте осторожны, вы нажмете github.com/awesomeWM/awesome/issues/1588. , это не нарушает функцию, но будет работать только в том случае, если в какой-то момент у клиента была панель заголовка.
- person Emmanuel Lepage Vallee; 22.02.2017