Показывать строку заголовка только в плавающих окнах

Есть ли в awesome 4.0 способ отображать заголовок только в плавающих окнах?

Глядя на документы, кажется, что нет варианта из коробки.

Указать; Я ищу решение, которое работает, когда я динамически переключаю окна между плиткой и плавающим.


person Juicy    schedule 21.02.2017    source источник


Ответы (2)


Немного поздно, но я тоже хотел это сделать, и у меня это в основном работало. Он не охватывает все случаи, когда вы ожидаете, что клиент покажет или скроет свой заголовок, но он достаточно близок для моего варианта использования. Это довольно просто: сначала вам нужно отключить заголовки для каждого клиента, поэтому добавьте 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)

Я не хотел тратить на это много времени, поэтому он не охватывает случаи, когда клиент помечен в плавающем макете или когда клиент помечен несколько раз, и один из этих тегов является плавающим.

person Niverton    schedule 22.05.2017
comment
Потрясающе, спасибо. Но по какой-то причине с этими изменениями, когда вы переключаетесь между плавающим и мозаичным, awesome больше не запоминает размер плавающих окон, он просто заставляет плавающее окно покрывать всю область экрана. - person devalone; 06.10.2018

Изменять

{ rule_any = {type = { "normal", "dialog" }
  }, properties = { titlebars_enabled = true }
},

to

{ rule_any = {type = { "dialog" }
  }, properties = { titlebars_enabled = true }
},
person Emmanuel Lepage Vallee    schedule 21.02.2017
comment
похоже, что это применимо только к новым клиентам, а не к клиентам, которых я переключаю с мозаичных на плавающие? - person Juicy; 22.02.2017
comment
В этом случае вам нужно подключиться как к 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