歡迎您光臨本站 註冊首頁

Subtle: 有趣的偽平鋪式窗口管理器

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

本文向你介紹 Subtle 這個有趣的偽平鋪式窗口管理器。

Author: 吳吉慶
email: [email protected]
home: http://hi.baidu.com/jiqing0925
create: 2011-02-19
update: 2011-02-20

目錄

  • 安裝subtle
  • views:虛擬桌面
  • Grabs:鍵盤和滑鼠行為的綁定
  • subtle的特色所在:gravity
    • 什麼是gravity
    • 如何平鋪
    • 是不是真的平鋪式窗口管理器
  • 討厭的Tags
  • 其它特性

自從發現 Musca 后,大部分時間都在用 Musca ,用它可以方便地構建我的集成工作環境。可惜作者已經很久很久沒有繼續開發了,等我有時間了,要好好研究一下 Musca 的代碼。

在網上亂逛,偶然發現了一個窗口管理器的截圖,它自稱是手動平鋪的窗口管理器,叫subtle。這個東西在我以前寫的 《平鋪式窗口管理器Musca初體驗》 一文中曾提了一下,但當時我也是道聽途說。

這次,嘿嘿,又讓我撞見它,我的手又癢了。於是我搜索到它的 主頁 ,看見它的開發很活躍,於是想體驗一下,看看它會不會比 Musca 更好用。

體驗的結果令我驚訝,subtle雖然也號稱是手動平鋪的管理器,但和 Muscaion 的思想完全不同,可以說是一款很有特色的窗口管理器。果然有點 subtle 的意思。如何有特色,且聽我與諸位看官分解。

安裝subtle

既然要體驗,就先裝一個吧。

subtle是C開發的,本身很小巧,不過它選用了ruby做配置和擴展語言。大概作者很喜歡ruby吧。不過,這綁定推廣ruby的行為,讓對 ruby 不感冒的用戶有點為難。而且要安裝體積比較大的ruby1.9以上的版本。

好了,不再多愁善感了,開始行動。在 這裡 上下載一個源碼包,我下載了最新的,解開后,第一步居然不是 make 而是 rake ,好吧,安裝rake和ruby::

  sudo apt-get install rake ruby1.9.1  

然後rape一下,哦,不對,是rake一下::

  rake  (in /home/jiqing/subtle-0.9.2573-lambda)  rake aborted!  no such file to load -- mkmf  /home/jiqing/subtle-0.9.2573-lambda/Rakefile:12:in `require'  (See full trace by running task with --trace)  

google之,原來要ruby1.8-dev,真是得寸進尺::

  sudo apt-get install ruby1.8-dev  

再rake::

  rake  (in /home/jiqing/subtle-0.9.2573-lambda)  rake aborted!  Ruby 1.9.0 or higher required  /home/jiqing/subtle-0.9.2573-lambda/Rakefile:176  (See full trace by running task with --trace)  

真想rape之了,都裝了ruby1.9.1還叫什麼叫。:

  ls -l /usr/bin/ruby  

發現居然是到ruby1.8的符號鏈接。rape!

  sudo ln -sf /usr/bin/ruby1.9.1 /usr/bin/ruby  

然後你就可以順利地rake它了。:

  rake  sudo rake install  

rake出來的執行文件除了subtle,還有:

  • subtler - 一個subtle的命令行介面,怎麼用,man subtler吧。
  • subtlext - ruby擴展介面,讀取subtle的配置文件就靠它了。

在你的 .xinitrc 中添加 exec /usr/bin/subtle ,startx就進入了 subtle。如果你使用某種登錄管理器,要把subtle加入可選擇的會話列表中,我不會,嘿嘿,歡迎會的同鞋補充吧。

views:虛擬桌面

進入subtle后,先別動,冷靜觀察,上面有個細長狀態欄,其它就是一片廣袤的黑色屏幕。

狀態欄左邊有四個標籤,每一個標籤代表一個view,其實就是工作區(虛擬桌面),你可以通過小鍵盤上的 + 切換到下一個 view,通過小鍵盤上的 - 切換到上一個view。也可以通過Win+n 切換到第n個view。

為了給大家直觀的印象,先放張圖片吧,不過這是我改了配置后的截圖。

Grabs:鍵盤和滑鼠行為的綁定

W+Enter,W表示windows鍵,會啟動一個終端。:

  cp /etc/xdg/subtle/subtle.rb ~/.config/subtle/  

這就生成咱自己的subtle.rb配置文件了,用你喜歡的編輯器打開它,它是配置文件,同時也是咱的幫助。

  vim ~/.config/subtle/subtle.rb  

搜索 == Grabs ,找到 Grabs 一節,這是綁定鍵盤和滑鼠按鍵的部分,如何使用,有詳細的解說。:

  grab "W-Return", "urxvt"  

這表示按 Win+Enter,會打開一個urxvt的終端,如果你用的不是rxvt,就改成你的終端模擬器的名稱,保存然後Win+Ctrl+r,讓subtle重新載入配置。幸好我用的也是rxvt,不然按了Win+Enter還沒反應。作者也太不考慮廣大用戶的感受了,如果把urxvt換成 x-terminal-emulator ,不就能適用各種終端了嗎。

現在默認的終端窗口是最大化的,跟我來體驗一下:

  • 按Win+KeyPad_4(小鍵盤上的7),終端窗口佔據了左半邊屏幕;
  • 按Win+KeyPad_6(小鍵盤上的6),終端窗口佔據了右半邊屏幕;
  • 按Win+KeyPad_8(小鍵盤上的8),終端窗口佔據了上半邊屏幕;
  • 按Win+KeyPad_2(小鍵盤上的2),終端窗口佔據了下半邊屏幕;
  • 按Win+KeyPad_7(小鍵盤上的7),終端窗口佔據了左上四分之一的屏幕;
  • 按Win+KeyPad_9(小鍵盤上的9),終端窗口佔據了右上四分之一的屏幕;
  • 按Win+KeyPad_1(小鍵盤上的1),終端窗口佔據了左下四分之一的屏幕;
  • 按Win+KeyPad_3(小鍵盤上的3),終端窗口佔據了右下四分之一的屏幕;
  • 按Win+KeyPad_5(小鍵盤上的5),終端窗口又佔據了整個屏幕。

聰明的你,早就發現了,小鍵盤上9個鍵直觀地對應著9個方位。

接著按 Win+KeyPad_5 ,發現終端窗口變小了,佔據了屏幕中間某個區域;再接著按,發現終端窗口的大小又變了,不過還是在屏幕中間。再按的話,又變成最大化了。不只Win+KeyPad_5,連續Win+其它的小鍵盤數字鍵,也會改變窗口的位置和大小,不過相對位置還是對應於小鍵盤數字鍵所在的方位。

這是怎麼做到的,在subtle.rb的Grabs一節中有這樣的鍵綁定::

  grab "W-KP_7", [ :top_left,     :top_left66,     :top_left33     ]  grab "W-KP_8", [ :top,          :top66,          :top33          ]  grab "W-KP_9", [ :top_right,    :top_right66,    :top_right33    ]  grab "W-KP_4", [ :left,         :left66,         :left33         ]  grab "W-KP_5", [ :center,       :center66,       :center33       ]  grab "W-KP_6", [ :right,        :right66,        :right33        ]  grab "W-KP_1", [ :bottom_left,  :bottom_left66,  :bottom_left33  ]  grab "W-KP_2", [ :bottom,       :bottom66,       :bottom33       ]  grab "W-KP_3", [ :bottom_right, :bottom_right66, :bottom_right33 ]  

那裡的 :top:top_left 都是什麼玩意,哈哈,這就要提到subtle里很有特色的一個概念: gravity

subtle的特色所在:gravity

什麼是gravity

什麼是gravity,就是窗口的位置和大小。在subtle.rb中搜索 == Gravities ,找到那一節,可以看到詳細的說明。

往下看,就發現了那些 :top:top_left 之類的定義,以 :top 為例,:

  gravity :top,            [   0,   0, 100,  50 ]  gravity :top66,          [   0,   0, 100,  66 ]  gravity :top33,          [   0,   0, 100,  34 ]  

後面的四個值都不是像素值,而是比例,以 gravity :top, [   0,   0, 100,  50 ] 為例,可以這樣理解,窗口在最左邊,最上邊,寬度100%的屏幕,高度占 50%的屏幕。

回頭再看看, grab "W-KP_8", [ :top, :top66, :top33 ] 原來Win+KeyPad_8對應了一個gravity的列表,難怪連續按會改變窗口的大小和位置呢。

如何平鋪

現在我們已經有一個終端窗口了,按Win+KeyPad_4,讓它靠左邊呆著。按Win+Return,再打開一個終端窗口,按Win+KeyPad_6,讓它靠右邊呆著。看,嚴絲合縫地平鋪了吧。

你可以按Win+方向鍵遍歷各個平鋪在表面的窗口,如果窗口多了,被蓋住的看不見的窗口你是遍歷不了的,怎麼辦?對上層的窗口按Win+l,讓它降到下一層,被蓋住的窗口就上來了。

居然沒有提供一個遍歷當前工作區所有窗口的快捷鍵,多少有些可惡吧。

是不是真的平鋪式窗口管理器

對於平鋪的兩個終端窗口,我們聚焦在左邊的終端窗口,再次按 Win+KeyPad4,改變它的大小,它變大了,但右邊的終端沒有改變,這樣右邊終端的一部分區域就被蓋住了。再按 Win+KeyPad4,左邊終端又變小了,屏幕中間空出一部分區域,右邊的終端並沒有變大來填充。

當一個窗口的大小改變時,有其它窗口的大小也會跟著改變,這才是平鋪式窗口管理器的本質吧?而當一個窗口的位置和大小的改變獨立於其它窗口時,它就是浮動式窗口管理器吧?我想這就是平鋪與浮動的本質區別,從這個意義上看,subtle是真的平鋪式窗口管理器嗎?

subtle中也有浮動的概念,你對聚焦的窗口按Win+f,它就有了浮動的屬性,但是有什麼分別嗎?即使被你平鋪的窗口,你按住窗口鍵,用滑鼠左鍵同樣能自由地改變它的位置,用滑鼠右鍵同樣能改變它的大小。

要說subtle的特色,我看就在於它是一個提供了一組快捷鍵,能快速改變窗口布局的浮動式窗口管理器。

討厭的Tags

除了Grab和Gravity,還有一個Tag值得一提。 Tag的主要作用是控制窗口放在哪個view中。看下面的例子::

  tag "terms" do    match "xterm|[u]?rxvt"    gravity :right  end    view "dev",   "terms"  

這表示如果我啟動rxvt,就會匹配到terms這個Tag,而匹配terms這個 Tag的窗口都會放入dev這個view中。也就是說,不管我在哪個view中啟動rxvt,都必定放入dev這個view中,這算什麼。

文檔中還說,每個應用程序的窗口必定關聯到一個view,如果沒有顯式關聯,就會關聯到default view。如果你沒有顯式指定default view,第一個 view就是default view。

也就是說,如果我沒有把gvim匹配到某個tag,也沒有關聯到某個view,我想在第三個view中,啟動gvim,結果gvim會被放入第一個view,我還得去第一個view找它。這算什麼特性?

窗口又不能在view之間移動,只能通過Win+s,讓它具有stick屬性,從而在所有view中可見。這個……,俺非常不喜歡。

Tags這個特性,有些stupid,請作者看見不要生氣,請心平氣和地把這當作用戶的反饋,認真對待吧。

其它特性

除了Grab、Gravity、views、Tags,還有Hooks屬性,用戶可以通過這個定義subtle中的行為會觸發一些什麼事件。我卻不知道如何在subtle啟動時觸發外部的程序(如conky等)啟動,不知道有沒有這個功能呢?

另外,依賴ruby也不是白依賴的,你可以安裝用ruby寫的sublets,加一些時鐘、cpu利用率之類的插件,不過我沒弄成功。我耳邊不禁響起《色戒》中梁朝偉的聲音:有這麼難嗎?有興趣的朋友有時間玩玩看。

體驗完,我又用回 Musca 啦,小聲告訴你:我現在寫這篇文檔,也不是在用subtle,哈哈。不過,subtle體現了一種新的思想,推薦朋友們嘗試一下,尤其是喜歡ruby的同學。儘管我不喜歡它的風格,沒有堅持用下去,我想應該會有人喜歡的。

(全文完)



[火星人 ] Subtle: 有趣的偽平鋪式窗口管理器已經有308次圍觀

http://coctec.com/docs/linux/show-post-65612.html