Awesome 3.5 — две панели (wiboxes) вверху

До перехода на Awesome 3.5.1 у меня было две панели в верхней части экрана (как бы друг над другом) и ни одной внизу. Код, который я использовал для достижения этой версии до версии 3.5.*, приведен ниже:

-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", height = "32", screen = s })

-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
    {
        {
            -- Upper left section
            mylauncher,
            mytaglist[s],
            mypromptbox[s],
            -- My custom widgets, separators etc...
            layout = awful.widget.layout.horizontal.leftright
        },
        {
            -- Upper right section
            mylayoutbox[s],
            mytextclock,
            -- More widgets, separators, etc...
            s == 1 and mysystray or nil,
            layout = awful.widget.layout.horizontal.rightleft
        },
    },
    {
        -- Lower section (only the tasklist)
        mytasklist[s],
    },
    layout = awful.widget.layout.vertical.flex,
    height = mywibox[s].height
}

Теперь мне трудно понять, как добиться того же с конфигурацией 3.5. На данный момент я использую довольно простую панель (с большинством виджетов) вверху и одну (со списком задач) внизу. Код можно увидеть ниже:

    -- Create the wibox
mywibox[s] = awful.wibox({ position = "top", height = "18", screen = s })
mywibox2[s] = awful.wibox({ position = "bottom", height = "18", screen = s })

-- Widgets that are aligned to the left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(mylauncher)
left_layout:add(mytaglist[s])
left_layout:add(mypromptbox[s])
-- My custom widgets, separators, etc...

-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
-- My custom widgets, separators, etc...
right_layout:add(mytextclock)
right_layout:add(mylayoutbox[s])

-- Now bring it all together
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_right(right_layout)

local layout2 = wibox.layout.align.horizontal()
layout2:set_middle(mytasklist[s])

mywibox[s]:set_widget(layout)
mywibox2[s]:set_widget(layout2)

Если у кого-то есть идеи, как отредактировать мой текущий rc.lua, чтобы он работал так же, как верхний код в Awesome 3.4.*, буду очень признателен.


person debil    schedule 20.10.2013    source источник


Ответы (2)


Вы можете попробовать что-то вроде этого, не зная, делает ли это именно то, что вы хотите (32 - это высота вашего wibox в соответствии с вашим кодом):

local const = wibox.layout.constraint()
const:set_widget(layout)
const:set_strategy("exact")
const:set_height(32/2)

local l = wibox.layout.fixed.vertical()
l:add(const)
l:add(mytasklist[s])

mywibox[s]:set_widget(l)

Сначала он создает «ограниченный» макет, который гарантирует, что «макет» макета (виджеты, которые должны отображаться вверху) всегда имеют размер 16 пикселей. Затем он помещает этот макет ограничения поверх списка задач и отображает результат в wibox.

Часть этого кода может быть немного сокращена в последней версии, но я не уверен, что в 3.5.1 уже есть эти аргументы удобства.

person Uli Schlachter    schedule 23.10.2013
comment
Этот сделал это. На самом деле я пытался поместить два макета в вертикальный, но не мог понять, как выделить правильный размер для двух внутренних макетов. Во всяком случае, теперь он работает как надо. Большое спасибо! - person debil; 24.10.2013

Я сделал подобное со следующим кодом:

wiboxes["top"]=awful.wibox({position="top",height=26})
local top_layout = wibox.layout.fixed.horizontal()
sublayout["cpu"] = wibox.layout.fixed.horizontal()
for i=2,3 do
  sublayout["cpu" .. i] = wibox.layout.fixed.horizontal()
  sublayout["cpu" .. i]:add(graphs["cpu"]..i) -- the graphs table already initialized
  sublayout["cpu" .. i]:add(textboxes["cpu"]..i) -- textboxes table already initialized
  sublayout["cpu"]:add(sublayout["cpu"..i)
end
.....
top_layout:add(sublayout["cpu"])
.....
wiboxes["top"]:set_widget(top_layout)

С этим кодом у меня есть два графика и текстовые поля, чтобы увидеть использование ЦП (каждого ядра), первое сверху, второе вниз. Он должен работать с taglist или любым другим виджетом.

person uzsolt    schedule 21.10.2013
comment
Лайк за пример. Я еще не заставил его работать, как ожидалось, в моем случае использования. Но это неудивительно, потому что я новичок в Lua. Однако это дало мне некоторые идеи. Я должен сначала поэкспериментировать и сообщить, когда (надеюсь) получу какие-то результаты. Приветствия для указателей. - person debil; 22.10.2013