wmctrl控制窗口應用範例

2008年04月08日 星期二 , 1,260 次點擊

前兩天我談了窗口匹配工具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”。

直接在終端中輸入命令來控制窗口行爲顯得很笨拙,不過,我們可以通過設置熱鍵來代替常用命令的輸入,這就簡便多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章