Roll up / shade floating windows in awesome?

533 views Asked by At

I am trying out awesome at the moment coming from KDE/MATE since many years and I really like it a lot. There's really only one thing that I'm missing from my previous workflows.

Occasionally I'm working with applications that have a lot of floating windows. What I found tremendously helpful in floating WMs was the ability to roll up or shade a window, basically only keeping the titlebar of the application but hiding its window contents.

Is this possible in awesome? Alternatively are there other options like tabbing windows (like in i3) or do you have other suggestions?

Thanks a lot in advance!

1

There are 1 answers

5
Uli Schlachter On BEST ANSWER

Is this possible in awesome?

Theoretically yes, but practically I do not know about anyone who implemented the necessary magic yet to make this work properly. A semi-good first approximation might be to resize the window to height 1.

Untested sketch:

function toggle_roll_up_or_shade(c)
    if c.shade then
        c:geometry{ height = c.shade }
        c.shade = nil
        c.size_hints_honor = c.size_hints_honor_before_shade
    elseif c.floating then
        c.shade = c.height
        c.size_hints_honor_before_shade = c.size_hints_honor
        c.size_hints_honor = false
        c:geometry{ height = 1 }
    end
end

The above function would then be bound to some key similar to how Mod+Ctrl+Space is bound to awful.client.floating.toggle in the default config.

Here is a variant which might work on AwesomeWM v3.5:

function toggle_roll_up_or_shade(c)
    if awful.client.property.get(c, "shade") then
        c:geometry{ height = c.shade }
        awful.client.property.set(c, "shade", nil)
        c.size_hints_honor = c.size_hints_honor_before_shade
    elseif c.floating then
        client.property.set(c, "shade", c.height)
        client.property.set(c, "size_hints_honor_before_shade", c.size_hints_honor)
        c.size_hints_honor = false
        c:geometry{ height = 1 }
    end
end

Also, if you want to get the height of the titlebar, you should be able to use local _, height = c:titlebar_top(). I'm not sure if this also works in AwesomeWM v3.5.