歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

X Window 系統使用指南--19


第19章 進一步介紹 uwm 和如何定制它
在第6章,你學到如何使用uwm 來完成基礎的視窗建構工作需求,而能以一個
舒服的方式使用視窗。現在我們繼續談視窗,集中於兩個主要的□圍:
1.此程式所提供的一些特別的特色,特別是:
.不使用選單,直接使用滑鼠建構視窗。
.我們尚未描述過的一些選單選擇。
.編輯現存表徵圖的標題。
2.如何定制uwm ,包含:
.對任何你所需的命令定義你自己的選單。
.將各種不同的視窗管理器功能系結到滑鼠按鈕和修飾鍵 (SHIFT,
CONTROL 等等)。
19.1 uwm 的新特色
現在我們來討論一些在先前介紹視窗管理器時,為了保持盡量地簡單,而省略
的標准的uwm 功能。
19.1.1 不使用uwm 的選單來管理視窗
直到目前,你仍然依賴著uwm 的選單來建構你的視窗 -- 移動它們、對它們重
定大小等等。如果所有的情況都使用選單,是相當慢的,所以uwm 提供你可直
接完成它任何命令的選項。
你可以使用滑鼠按鈕和修飾鍵,來指定你要執行的功能,和所要操作的視
窗。你現在應該已非常熟悉各種不同的視窗管理器功能和它們如何工作,所以
我們將很快地說明如何不使用選單來選擇這些功能。
Move:移動一個視窗
1.按下META鍵,保持按住。
2.指標位置所在的視窗將被移動。
3.用右按鈕,拖拽視窗到新的位置。
Resize:重定一個視窗的大小
1.按下META鍵,保持按住。
2.指標位置所在的視窗將被重定大小。
3.用中按鈕,拖拽視窗的外框到新的大小。
Lower:將一個視窗送到堆疊的底部
1.按下META鍵,保持按住。
2.將欲被送到堆疊的底部的視窗,碰觸一下左按鈕。
Raise:將一個視窗升到堆疊的頂端。
1.按下META鍵,保持按住。
2.將欲被送到堆疊的頂端的視窗,碰觸一下右按鈕。
Circulate up:將最底層被遮蔽的視窗升到最上層,你有兩種選擇:
1.按下META鍵,保持按住。
2.在根視窗上,碰觸一下右按鈕。

1.同時按下META和SHIFT 鍵,保持按住。
2.在螢幕上的任何地方,碰觸一下右按鈕。
Circulate Down:將最上層的視窗移到最底層,作法同Circulate Up,但
改為左按鈕。
Iconify:之前我們曾提過兩種形式的表徵圖化,一種是視窗曾經表徵圖
化過(已定義過表徵圖的位置) ,另一種為對 "新" 的視窗表徵圖化

表徵圖化一個新的視窗:
1.按下META鍵,保持按住。
2.將指標位置移至欲被表徵圖化的視窗。
3.按下LEFT按鈕,保持按住...
4. ... 拖拽表徵圖的外框到你所需的位置。
5.松開按鈕和META鍵。
注意它和Lower 操作程序的不同點,在此你是按下... 拖拽... 松開滑
鼠按鈕,而對Lower ,你只是碰觸一下按鈕。
表徵圖化一個曾經表徵圖化過的的視窗:
1.同時按下META和CTRL鍵,保持按住。
2.在你欲表徵圖化的視窗上,碰觸一下左按鈕。
(如果你對先前並未表徵圖化的視窗作這個操作,或經由resource結構
無法取得表徵圖的位置,表徵圖將出現在指標所在的位置)。
De-Iconify:將表徵圖還原為它的視窗 (在視窗原來的位置):
1.按下META鍵,保持按住。
2.在表徵圖上,碰觸一下中按鈕。
如果你覺得這些對滑鼠按鈕功能的結合十分笨拙且不易記憶,別擔心,很
多人都是如此。有更好的法子,剛才那些只是預設的設定,你可以完全由自己
來建構。在本章的後半部,我們將告訴你如何做。現在我們先來看一看,在標
准選單的一些功能和它們能做些什麽。
19.1.2 一些更多的選單選擇
這是一些我們在第6章中沒有解釋的標准的選單選擇。
Focus:讓你設定鍵盤的焦點(focus),也就是說,將鍵盤附屬於一個視窗
,所以不論螢幕上的指標在何處,鍵盤的輸入總是在同一個視窗。一
般鍵盤的輸入總是指向目前指標所在的視窗。
設定焦點到一個特定的視窗:選擇focus ,出現手指形游標,在你所
欲指定的視窗碰觸一下按鈕。
恢復正常:選擇focus ,在背景視窗上碰觸一下。
Restart:停止uwm ,重新啟動它,重新讀入建構檔 (下節說明) 且執行它
。在你改變建構檔且希望馬上執行新的設定時 (否則將等到你重新啟
動一個新的周期) 使用此選擇。
Freeze:暫停螢幕上所有的顯示,當你要對你的螢幕攝影時可以使用這個
選擇。欲重新恢復顯示,使用 ...
Unfreeze:重新恢復顯示,所有的視窗會立即更新。
Exit:中止uwm 。當你要殺掉uwm 時使用,例如在啟動一個不同的視窗管
理器之前。
Perferences 選單
我們在第6章提過,有兩種方法叫用uwm 的WindowOps選單 -- 在背景視
窗上按下中按鈕,或在按住META和SHIFT 兩個鍵的情況下,在任何地方碰觸一
下中按鈕。用第二種方法讓你呼叫出第二個選單,只要將指標移到WindowOps
選單的外邊,標頭為Preferences 的視窗就會出現。
在Preference中的選擇,只是一些xset程式中設定滑鼠和鍵盤的選項而已。
注意:Lock On 和 Lock Off選擇是和記錄有關的,可能會導致一個錯誤
的訊息在你的主控台視窗印出。
19.1.3 改變現存表徵圖上的標題
uwm 的預設表徵圖 -- 灰色的盒中有一個名稱 -- 如果你對同一個應用程式執
行數次拷貝後會有缺點,例如有三個xterm 的表徵圖,你無法明確的區分它們
。為了克服這點,uwm 允許你可以編輯表徵圖中的字串為你所需的任何字串。
(這只能在uwm 自己預設的表徵圖使用,例如你無法編輯在xclock的特定表徵
圖中的字串)。
欲編輯在一個表徵圖中的名稱:
1.將指標移至所欲編輯的表徵圖。
2.鍵入你所希望的任何文字。
3.你可以去掉文字,不論是先前存在或方才才輸入的,方法如下:
去掉前一個字元:按DELETE。
去掉整個名稱:按ctl-U。
19.2 定制uwm
uwm 具有高度的可建構性。你可以將整個□圍的參數和定義儲存在一個建構檔
中,當uwm 啟始時會將之讀入。我們前節曾經提過,你可以在中途改變建構檔
,藉著在WindowOps選單中Restart選項,告訴uwm 重新讀入它。
uwm 的建構檔
預設uwm 有兩個建構檔,其中之一為
/usr/lib/X11/uwm/system.uwmrc
通常由系統管理者設定,且第一個被讀入。另一個
$HOME/.uwmrc
是你自己的建構檔。兩個檔案均需要存在,uwm 硬性規定了預設設定。
注意:如果你用不正確的語法設定一個建構檔,當uwm 讀入時,你會得到
一個錯誤訊息像:
uwm: /usr/nmm/.uwmrc: 38: syntax error
uwm: Bad .uwmrc file...aborting
uwm 將不會啟動。當在一個新的周期啟動時,這沒有什麽大問題。然而,如果
你是在中途重新設定uwm ,你可以結束但沒有視窗管理器,且沒有xterm ,沒
有編輯視窗來編輯這個錯誤的檔案,無法啟始其它的視窗。如果此種情況發生
,你必需從其它的終端機或機器關閉X,或毀壞 (crash)你的系統。
uwm 的命令列選項
如果你不需要系統建構檔案,也不需要任何預設的設定,你可以藉著uwm 的命
令列選項 -b 抑制它們。
如果你要使用其它的檔案,就像兩個預設的建構檔一般,你可以用
-f filename 來指定它。
19.2.1 系結功能到鍵和按鈕
uwm 讓你定義當一個特定的滑鼠按鈕按下時,有某個功能會作用,例如當你在
一個視窗中碰觸一下中按鈕,它將被升到堆疊的頂層。這種系結結構和Toolkit
轉譯並沒有牽連,它完全由uwm 本身來完成。
為了讓這些結構更有用,你可以指定其它的條件來運用更多的功能,或許一個
修飾鍵 (像META) 需被按下,或許作用只發生在指標位於一個表徵圖上而非應
用程式視窗或背景視窗。我們已實際的看過這些例子:
此功能發生 ... 只有在這些 ... 只有指標在 ... 當這個
於... 修飾鍵被按下, 此種型態的視窗 滑鼠事件發
而且... ,而且... 生時
Resize META 一般視窗 按住中按鈕
且移動
WindowOps 沒有 背景視窗 按住中按鈕
選單
WindowOps META 和 沒有關系 按住中按鈕
選單 SHIFT
你藉著你的 .uwmrc(或其它的建構檔)所包含的系結規格來指定系結。規格
的格式和上面的表格類似,就像:
uwm-function = modifiers : window context : mouse events
( uwm 功能 = 修飾鍵 : 視窗的環境 : 滑鼠事件 )
這些元素為:
uwm 功能:uwm 的內建功能之一的名稱。例如功能f.move即是你用以移動視
窗的功能,f.lower 將視窗降低一層等等。這些功能將於下更完整地描
述。
功能名稱必需跟隨著一個等號(=)。
修飾鍵:在運用上述功能時,當指定的滑鼠事件發生時,必需被按下的修飾鍵
表列。正確的修飾鍵名稱為:
ctrl(或c),對CONTROL鍵。
meta(或m或mod1),對META鍵。
shift(或s),對SHIFT鍵。
lock(或l),對CAPSLOCK鍵。
這些名稱必需正確的列出。你可以使用一或二個修飾鍵,如果你使用兩個
鍵,用一個 "|"符號來分開它們。
你可以省略整個修飾鍵表列 (即此功能對應於滑鼠事件發生時並沒有修飾
鍵被按下),但尾端的冒號 ":" 不可省略。
視窗的環境:限制只有指標在螢幕上指定位置的型態符合特定條件時,功能
才會發生。正確的環境如下:
window(或w):指標必需位於一個應用視窗中。
icon(或i):指標必需位於一個表徵圖中。
root(或r):指標必需位於根視窗或背景視窗中。
你可以指定任何數目的環境,用 "|" 來區隔它們。如果你沒有指定,則功能
的發生與指標位置無關。
滑鼠事件:何種滑鼠事件對應到此功能。指定的事件為一個按鈕名稱 -- 任何的
left(或l)
middle(或m)
right(或r)
跟隨著一個動作:
down : 當按鈕被按下時會符合。
up : 當按鈕被松開時會符合。
delta : 當按鈕被按下且移動超過一定數目的像素時會符合。
所有的這些你已實際使用過它們,在本章開頭所描述的一些作用的系結為:
f.resize = meta : window : middle delta
f.iconify = meta : icon : middle up
f.raise = meta : window|icon : right down
uwm 的預設系結在檔案 $TOP/clients/uwm/default.uwmrc,見圖19 - 1。
┌————————————————————┐
│ p242-243 fig 19.1 │
│ │
│ 圖19-1 預設的 .uwmrc 建構檔 │
└————————————————————┘
uwm 的內建功能
uwm 的指南頁列出可應用的功能。你已經從圖19 - 1見過其中大部份,你可以
看出,功能是和WindowOps及Preferences中的選項相關。
然而,有一個有關pushing視窗(f.pushleft, f.pushup等等)的功能集合你
從未見過。pushing的意思為:你朝一個特定的方向移動一個視窗,移動的距離
固定。這和f.move不同的是,後者以交談的方式,指定視窗移動的方向和距離。
預設f.pushdown系結到同時按下CONTROL和META鍵,且按住中按鈕。試它幾
次,你將發現你的視窗稍微移動了一點 -- push 功能對細部移動視窗非常有用。
另一個功能為f.moveopaque。它也移動一個視窗,但不像f.move,它並不會
給你一個指示視窗新的位置的方格,你直接拖拽整個視窗本身。這可以讓整個螢
幕清爽些,但比較慢,且一般視窗移動時會有抖動的現像。
19.2.2 定義你自己的選單
用到uwm 本身的功能,或任何的shell 命令,或一個特定的動作,像是在一個
剪緩沖區插入本文。
在你的建構檔中定義一個選單共有兩個步驟。首先你定義選單上所需的
系結,其次你定義選單本身的內容。系結的部份像我們先前所用過的,但在尾
端增加了一欄選單名稱。例如WindowOps 選單 (藉著在背景視窗中按下中按鈕
來呼叫)的系結是:
在此,選單名稱既是用以顯示選單出現時的名稱,也連結到建構檔中的選單內
容規格。
選單內容的格式很簡單:對每一個選擇項,包含了一列當選擇項出現在選
單的 "名稱" ,和當它被選擇到時所做的動作。讓我們觀察一個縮水的WindowOps
定義:
menu = "WindowOps" {
New Window : !"xterm &"
RefreshScreen : f.refresh
Redraw : f.redraw
Move : f.move
}
從這裡,我們可以看到其語法為:
menu = "menu name" {
...
selection lines
...
}
選單名稱和系結所指定的相同。選擇項列包含了選擇項名稱,分隔的冒號,和
負責的動作。這些動作為下列三者之一:
1.一個uwm 的功能:只用到它們的名稱,在上例為move那一列。
2.一個shell 命令:命令包含在雙引號中間 (用shell 的& 語法使其在背
景視窗中執行) 且在前面加一個驚歎號。在上例為xterm 那一列。 (如
果你省& ,uwm 將被懸置 (hang) 起來,等待命令的完成,如果此程式
為X的應用程式,它需要uwm 來安排它的視窗,這將會招致麻煩)。
3.一個本文字串:這將插入到一個 "剪" 的緩沖區,而後你可以像平常一
樣的 "貼" 它。
多種的選單連結到同一個鍵系結
通常你對一個特定的鍵/按鈕的組合,只會系結到一個選單,但你可以對同一個
系結有多種選單:如果你在一個選單中不選擇任何項目且把指標移動到選單的
邊上,你將得到下一個選單。你已經實際地看過這種例子:在同時按下META和
SHIFT 鍵的情況下按下中按鈕,你可以得到WindowOps 選單,然後是Preferences
選單。
系結多種選單非常的容易,只要在定義每一個系結時當作其它的系結並不
存在,而在定義選單的內容時用標准的方式即可。例如uwm 的預設設定包含了
系結:
注意一個選單只能定義一次,但你可以用它來做任意多次的系結。 (查看預設
設定,你將看到WindowOps 選單被定義了一次但使用到兩次)。
指定選單的顏色
你可以指定在一個選單中所用的色彩。對選單名稱標題、每一個選擇項、指標
所在的高亮度選擇項,你都可以指定一個前景和背景色彩。一個有色彩的選單
的格式如下:
menu = "menu name" (head-fg : head-bg : hilite-bg : hilite-fg) {
...
selection-name : (item-fg : item-bg) : action
...
}
以下為一個混合的□例,使你的WindowOps 能擁有更多的色彩:
menu = "WindowOps" (yellow : blue : red : green) {
New Window : !"xterm &"
RefreshScreen : f.refresh
Redraw : (navy : magenta) : f.redraw
Move : f.move
}
此選單標題為藍底黃字,大多數的選擇項為白底黑字 (預設值),只有 "Move"
選擇項為紫紅色底海藍色字,而目前指標所在的選擇項為綠底紅字。
19.2.3 控制uwm 的參數變數
到目前為止,你可以用指定滑鼠和鍵的前後關系,來改變所指定的功能。在此
有一個另一種型態的uwm 的定制:你可以藉此改變許多內建功能操作的作法 (
mode) 和風格 (style),例如你可以指定在resize或move操作下,指示視窗新
的位置的九宮格,改變為只是一個外框而已。在指南頁中有列出所有的變數和
它的意義,在此我們只提一些特別有用的,和解釋一些比較模糊的。
讓預設建構檔中的設定無效:uwm 並沒有結構抑制讀取系統和使用者建構
檔。(-b 不會影響 $HOME/.uwmrc)。欲取消早先檔案中的設定,可以含入uwm
的變數resetbinding、resetmenus和resetvariables,將會分別的取消早先定
義的系結、選單和變數。 (確定你將這些變數放在檔案的頂端,否則它將取消
在檔案中所有在它之前的定義)。
限制視窗和表徵圖在螢幕的□圍以內:X允許你指定你的視窗位於螢幕的
任何位置,甚至部份或全部在螢幕之外,這樣有時會引起麻煩。當你建立一個
視窗,uwm 並未提供任何的幫助。但當你使用f.newiconify對一個表徵圖作解
除表徵圖化,如果變數normalw 被設定,則視窗會被完整的放在螢幕中,且盡
量接近你用指標指定的位置。 (如果你包含了normali 變數,同樣可用於表徵
圖)。
控制push作用:預設f.pushxxx 功能將一個視窗往適當的方向推動一個像
素的距離。你可以藉著指定 push=num 來推動num 個像素。你也可以完全地改
變操作的作法:取代通常的推動固定數目的像素的作法 (叫做pushabsolute)
,你可以指定pushrelative:這種情況視窗會被推動num 分之一大小的視窗。
例如如果你指定
push=5
pushrelative
則一個f.pushup將把視窗向上推動視窗本身高度五分之一的距離。
防止uwm 功能鎖定應用程式:預設一些uwm 的操作,像resize和move會導
致所有其它的client應用程式被凍結,也就是說,防止它們輸出到它們的視窗
。你可以藉著指定nofreeze取消它。
如果你需要獲得一些uwm 所屬短暫視窗的視窗傾印,則這是必需的 (如在
圖6 - 6 的resize盒)。 它的副作用為當使用resize和move時,外框格會大量
的閃動,以致難以看到。
19.3 結論
本章告訴你如何使用一些更多的uwm 的功能,現在你對系統有更多的經驗且可
以利用它們。特別是看到不用預設選單如何建構視窗,它使你工作的更迅速。
本章的第二個部份,列出你如何能定制uwm :如何附屬uwm 的內建功能到
指定修飾鍵和滑鼠動作的組合,如何定義一般性的選單,如何使用uwm 的參數
變數修改操作的作法。
在結束之前說一點題外話,uwm 和 xterm、xclock、xedit等一樣,只是server
的一個client程式而已。所以,遠端地執行uwm 是可能的,例如在saturn執行
uwm ,但是指定 -display venus:0,所以它是venus 的視窗管理器。這解釋
了網路元素深殖於系統,在一般工作站,這只是好奇,但在X終端機 (它不提
供一般性目的的處理 (processes)) 它實際地需要。
我們現在接近尾聲:你已有所有你執行視窗系統的所需的功能。你有視窗管理
器、應用程式、便利的工具、視窗有關的公用程式、大□圍的設施所以可以修
改以適合你的顯示器、你網路上的建構和你比較喜歡的工作。下一章,我們將
會把目前所學的放在一起,告訴你如何管理你完整的工作周期,且我們將包含
定義uwm 選單和perferences的實際的□例。
Copyright © Linux教程網 All Rights Reserved