LINUX.ORG.RU

Статично-динамичный тайлинг

 


2

4

Есть у меня тег 'media' (floating), на котором живет deadbeef, а еще там я смотрю кино в gnome-mplayer. А еще я на нем могу запустить fm для выбора кино, ну или даже urxvt иногда. deadbeef я хочу видеть занимающим только половину экрана (что реализовано через callback в rules), а mplayer по центру экрана поверх всех окон (реализовано тем же образом).

Хочу следующее: deadbeef вне зависимости от типа тега, всегда занимает половину экрана, а все остальные приложения тайлятся на оставшейся половине.

Из идей только писать хитрый callback, но может есть способы получше?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от serkhay

Этого недостаточно. Если говядина на теге одна, то ее разнесет на всю рабочую область.

kernelpanic ★★★★★
() автор топика

Задачку решил следующим образом:

1. У меня awesome 3.4.15 и функции setmaster в нем нет. Берем ее из 3.5

--- Set the client as master: put it at the beginning of other windows.
function setmaster(c)
    local cls = util.table.reverse(capi.client.get(c.screen))
    for k, v in pairs(cls) do
        c:swap(v)
    end
end

2. Добавляем новый тип тайлинга tile.rightsm

--- /usr/share/awesome/lib/awful/layout/suit/tile.lua	2013-08-06 00:24:46.654058938 +0400
+++ /home/v/.config/awesome/mytile.lua	2013-08-06 02:02:57.191384558 +0400
@@ -114,7 +114,7 @@
     for d = 1,2 do
         if place_master and nmaster > 0 then
             local size = wa[width]
-            if nother > 0 then
+            if nother > 0 or (nother == 0 and orientation == "rightsm") then
                 size = math.min(wa[width] * mwfact, wa[width] - (coord - wa[x]))
             end
             if not data[0] then
@@ -176,5 +176,13 @@
     return tile(p, "top")
 end
 
+--- The main tile algo, on right. Single master honor mwfact.
+-- @param screen The screen number to tile.
+rightsm = {}
+rightsm.name = "tilerightsm"
+function rightsm.arrange(p)
+    return tile(p, "rightsm")
+end
+
 arrange = right.arrange
 name = right.name

3. Добавляем сигнал

client.add_signal("manage", function (c, startup)
    if not startup then
        if awful.tag.getidx() == 9 then
            if c.class == "Deadbeef" then
                setmaster(c)
            else
                awful.client.setslave(c)
            end
        end
    end
end)

4. Правила для говядины

    { rule = { name = ".*DeaDBeeF" },
      class = { "Deadbeef" },
      properties = { tag = tags[1][9],
                     switchtotag = true } },
    { rule = { class = "Deadbeef" },
      except = { name = ".*DeaDBeeF" },
      callback = function(c)
                 p = awful.client.focus.history.get(mouse.screen, 0)
                 awful.placement.centered(c, p)
                 end },

Вот как-то так.

kernelpanic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.