前兩天我談了窗口匹配工具Devil’s Pie的使用,和DP一樣,wmctrl同樣可以控制窗口的行爲。不同的是,DP是一個規則匹配工具,通過檢查既有的窗口規則配置文件在DP啓動時或窗口打開時應用規則到窗口;而wmctrl是一個命令行工具,它完全通過命令行命令來控制窗口行爲。
一個使用wmctrl操縱窗口行爲的實際命令如下:
wmctrl -r firefox -b add,shaded
此命令將標題中含有”firefox”字串的窗口摺疊起來。
wmctrl的命令行命令格式分爲三個組成部分:動作、選項和參數。
要控制一個窗口的行爲,首先要讓wmctrl找到這個窗口。在這一點上,wmctrl是通過參數來實現的。
<DESK>
值爲一個整數,用來指定相應的工作區。和DP不同,wmctrl從0開始計數,即第一個虛擬桌面爲0,第二個是1。
<MVARG>
一個”g,x,y,w,h”格式的字符串,用來指定窗口的層次、位置和大小。其中,”g”代表窗口的層次,所有窗口普通層次的值都爲0;”x”和 ”y”分別是窗口的橫、豎座標;”w”和”h”分別是窗口的寬度和高度。五個參數都是整數,寬度和高度的值如果不需要改變,可以使用”-1″來代替。
<WIN>
缺省情況下,此參數表示一個字符串,所有標題中含有此字符串的窗口都是匹配項,忽略大小寫。如果加上”-F”選項,則會檢查大小寫。如果使用”-i”的選項,此參數將被當作一個整數來進行比較。
此參數有兩個特殊值:”:SELECT:”表示命令執行後需要用戶選擇一個窗口作爲目標,然後將命令作用到該窗口;”:ACTIVE:”表示將當前處於活動狀態的窗口作爲命令執行目標。
<WORKAROUND>
當前只實現了一個workaround屬性,即”DESKTOP_TITLES_INVALID_UTF8″。在使用Window Maker作爲窗口管理器時可以修正打印非ASCII編碼窗口標題的輸出結果。
wmctrl選擇目標窗口的選項並不如DP豐富和精確,不過大多數情況下並不影響使用,況且通過”<WIN>
“參數的兩個特殊值可以多少彌補一些選項上的缺失,且能提供一種更機動的操作方式。
當選擇了目標窗口後,就要向該窗口指定具體行爲了。這一點通過”動作”來實現。
-a <WIN>
移動到該窗口所在的工作區,提升該窗口的層次,並將輸入焦點置於該窗口上。
-b ( add | remove | toggle),prop1 [,prop2 ]
爲選定窗口添加(add)、移除(remove)或切換(toggle)相應的一個或兩個屬性。這些屬性包括:modal, sticky(粘貼), maximized_vert(豎向最大化), maximized_horz(橫向最大化), shaded(摺疊), skip_taskbar(不在任務欄中顯示), skip_pager(不在pager中顯示), hidden(隱藏), fullscreen(全屏), above(窗口置於最上層)和below(窗口置於最下層)。
-c <WIN>
試探性地關閉指定窗口。
-d
在終端中列出當前窗口管理器管理的所有虛擬桌面的詳細信息。
-e <MVARG>
將窗口幾何屬性字符串應用到指定窗口。
-g w,h
改變窗口的寬度和高度。
-h
打印wmctrl的幫助信息到終端。
-I name
設定一個窗口的縮略名爲”name”。
-k ” (” on ” | ” off ” )”
打開或關閉窗口管理器的”show the desktop”模式,如果該窗口管理器支持的話。
-l
在終端中列出當前所有窗口的屬性。如果使用了”-p”的參數,屬性中將包含窗口的PID值;如果使用了”-G”參數,屬性中將包含窗口的幾何屬性(橫豎座標、寬度和高度)。
-m
顯示窗口管理器的信息。
-n N
改變當前虛擬桌面的數量。
-N name
改變指定窗口的標題。
-o x,y
改變指定窗口的”viewport”值,窗口管理器可能會忽略這個命令。
-r <WIN>
選擇標題中含有相應字符串的窗口。
-R <WIN>
選擇標題中含有指定字符串的窗口,將它移動到當前工作區,提升其層次並將輸入焦點置於其上。
-s <DESK>
移動到該工作區。
-t <DESK>
將通過”-r”選定的窗口移動到指定工作區。
-T name
同時修改選定窗口的的標題和縮略名。
通過參數和動作,wmctrl已經可以控制大多數窗口的行爲了。同時,通過選項,wmctrl可以進一步細化這些行爲。
-F
在通過”-r”進行窗口標題匹配時使用不忽略字母大小寫的精確匹配。
-G
在通過”-l”動作輸出窗口屬性時,在輸出結果中添加窗口幾何屬性。
-i
將窗口標題作爲一個數字值進行比較。
-p
在通過”-l”動作輸出窗口屬性時,在輸出結果中添加窗口PID屬性。
-u
覆蓋自動探測和強制UTF-8編碼模式。
-v
打印詳細的信息到終端,在調試wmctrl自身時很有用。
-w [ <WORKAROUND>
[,<WORKAROUND>
]… ]
在參數中使用指定的workaround屬性值。
-x
在窗口列表中包含窗口class屬性,或指定”<WIN>
“爲窗口的class值而非標題。
下面是一些wmctrl命令的例子:
wmctrl -l
列出當前所有窗口的信息。
wmctrl -p -G -l
列出包含窗口PID和幾何屬性信息的所有窗口信息。
wmctrl -a emacs
移動到標題中含有”emacs”字符串的窗口。
wmctrl -r mozilla -b add,shaded
將標題中含有”mozilla”的窗口摺疊起來。
wmctrl -F -c ‘Debian bug tracking system – Mozilla’
將一個標題與給定字符串大小寫匹配的窗口關閉。
wmctrl -i -r 0×0120002 -b add,sticky
將窗口標題按照數字值進行大小比較,然後將選定的窗口置爲粘貼狀態。
wmctrl -r :SELECT: -T “Selected Window”
選擇一個窗口,然後將它的標題修改爲”Selected Window”。
直接在終端中輸入命令來控制窗口行爲顯得很笨拙,不過,我們可以通過設置熱鍵來代替常用命令的輸入,這就簡便多了。