2011-02-25 26 views
15

如何配置真棒所以它會與兩個窗口這樣的排列啓動新的應用程序:設置窗口布局的真棒-WM特定應用

---------------- 
|xxxxxxxxxx####| 
|xxxxxxxxxx####| 
|xxxxxxxxxx####| 
|xxxxxxxxxx####| 
---------------- 

其中「x」是例如會話窗口中Pidgin和'#'是好友列表窗口。

一般來說,我想指定右側窗口的寬度並將其放在右側(垂直最大化),另一個窗口應占用剩餘空間。

我已經有一些幾乎可以工作的代碼,但它的行爲奇怪(它設置一切正確的pidgin,但它不適用於gimp和v_sim,偶爾沒有任何我知道的原因它會改變左窗口的幾何。或者當我啓動應用程序(v_sim)時,它沒有放置在正確的位置,並且它沒有垂直最大化,但是當我重啓真棒時,它將它正確放置。所以我猜這個應用程序在啓動時改變了一些東西。

下面是代碼,我現在使用:

awful.rules.rules = { 
    ... 
    { rule = { class = "Pidgin", role = "buddy_list" }, 
    properties = { 
     floating = true 
    }, 
    callback = function(c) 
     local w_area = screen[ c.screen ].workarea 
     local winwidth = 340 
     c:struts({ right = winwidth }) 
     c:geometry({ x = w_area.width - winwidth, width = winwidth, y = w_area.y, height = w_area.height }) 
    end 
    }, 
    { rule = { class = "Pidgin", role = "conversation" }, 
    properties = { 
     floating = true, 
     x = 0, 
     maximized_vertical = true, 
     maximized_horizontal = true 
    }, 
    callback = awful.client.setslave 
    }, 
    ... 
} 
+0

你可以發佈你的代碼嗎?這可能比讓人們從頭開始編寫它更有用。 – Olli 2011-02-25 10:28:25

+0

我沒有發佈它,因爲它不能正常工作,但我會更新我的問題。 – klew 2011-02-25 10:43:50

+0

我認爲這可能是StackOverflow的一個問題。 – techie007 2011-02-25 15:40:45

回答

11

我有這個確切的同樣的問題,但我想一拉在右邊的一個小終端左邊的Firefox窗口。爲了使它工作,我專門爲這個目的設置了一個標籤,使用左側佈局,並調整了寬度因子(即通常由CTRL-L執行的操作)。

將以下內容添加到rc.lua的末尾,其中yourtag是您希望放置這些窗口的標籤。 0.15值可根據您的口味進行調整。

awful.tag.viewonly(yourtag) 
awful.tag.incmwfact(0.15, yourtage) 

此外,使用awful.client.setslave爲您要在右側窗口中確保他們沒有得到切換。

{ 
    rule = { class = "URxvt" }, 
    callback = awful.client.setslave 
}, 

您還可以使用tag屬性將某些應用程序引導到標記。

{ 
    rule = { class = "Firefox" }, 
    properties = { tag = browse } 
}, 
{ 
    rule = { class = "URxvt", instance = "browse" }, 
    properties = { tag = browse }, 
}, 

然後我創建了一個綁定來打開這些應用程序,如下所示。

-- Custom programs 
awful.key({ modkey, "Shift" }, "b", function() 
    awful.tag.viewonly(browse) 
    awful.util.spawn_with_shell("urxvt -name browse -e newsbeuter") 
    awful.util.spawn("firefox") 
end) 

這是最後的結果是:

This is the final result.

+0

如果您安裝了pidgin-extprefs,則應確保啓用「允許好友列表縮小到正常限制以下」選項。否則,你必須在屬性中定義'size_hints_honor = false'(或者pidgin的行爲真的很奇怪)。另外,使用'setmwfact(..)'可能比'incmwfact(..)'更好 – coldfix 2012-05-29 09:48:44

4

另外,也可以使用帶有支柱浮動聯繫人列表窗口。 這可以防止在沒有消息窗口時最大化聯繫人列表窗口。此外,它允許CL窗口放置在任意(平鋪)窗口旁邊。

退房:http://www.bramschoenmakers.nl/en/node/738

雖然他的執行情況,對於我的版本的真棒有點馬車。 問題是,它不會調整已經設置的struts。

我的實現:

{ rule = { class = "Pidgin", role = "buddy_list" }, 
    properties = {floating=true, 
        maximized_vertical=true, maximized_horizontal=false }, 
    callback = function (c) 
     local cl_width = 250 -- width of buddy list window 

     local scr_area = screen[c.screen].workarea 
     local cl_strut = c:struts() 

     -- scr_area is affected by this client's struts, so we have to adjust for that 
     if c:isvisible() and cl_strut ~= nil and cl_strut.left > 0 then 
      c:geometry({x=scr_area.x-cl_strut.left, y=scr_area.y, width=cl_strut.left}) 
     -- scr_area is unaffected, so we can use the naive coordinates 
     else 
      c:struts({left=cl_width, right=0}) 
      c:geometry({x=scr_area.x, y=scr_area.y, width=cl_width}) 
     end 
    end }, 

這使CL窗口左側並分配它一個固定的空間。

(你不需要任何對話窗口的規則)