Plan 9 探險 (三)
四、基本操作
Plan 9 的 rio 窗口系統比起 Unix v1~v10 的純文本界面,那是一個巨大的進步,但跟現代常見的窗口系統相比,則是巨大的不一樣——跟 Xwindow 的操作習慣也很不一樣。我剛開始玩的時候,沒看文檔亂摸索,心中跑過無數只草泥馬,後來慢慢發現規律了,也仔細看了下 9front 手冊中的使用介紹,覺得這貨還是挺有意思。
與傳統 Unix 的鍵盤黨使用風格不同,Rio 重度依賴滑鼠,而且是三鍵滑鼠(1 - 左鍵,2 - 中鍵,3 - 右鍵)——不知道是不是故意擠兌蘋果早期的單鍵滑鼠,手冊中提到如果你的滑鼠只有兩個按鍵,那麼可以用 Shift+右鍵來模擬中鍵。個人發現,如果你用Mac OS X默認的觸摸板設置,雙指按觸摸板表示右鍵,那麼 VirtualBox 並不能可靠的轉換成右鍵,所以建議在 Mac OS X 的 System Preferences -> Trackpad 里把 Secondary Click 改成 "Click in bottom right corner",當然,如果你有外置滑鼠,那就不需要改觸摸板設置了。
三個滑鼠鍵的分工:
- 左鍵:選擇,切換窗口到前台,跟現代常見窗口系統使用習慣一樣
- 右鍵:菜單,跟現代常見窗口系統使用習慣很不一樣,有點類似老 Mac OS 系統,按住右鍵過程中不要釋放,挪到期望的菜單項,鬆開右鍵(如果滑鼠指針挪到菜單外面再鬆開右鍵,則取消右鍵操作)。在這之後,進入菜單項對應命令(例如New, Move, Resize)的「操作狀態」,如果此時(鬆開右鍵之後)單擊其它滑鼠鍵(比如左鍵或者中鍵),則取消這個命令。這個操作序列需要習慣一下,雖然詭異,但這裡面有個一致的地方:凡是右鍵開始的命令,接下來的操作也要用右鍵完成,下面再細講。
- 中鍵:跟右鍵用法類似,只是出來的菜單不一樣,跟滑鼠指針處於什麼窗口上有關。
窗口的基本控制:
- 滑鼠左鍵單擊聚焦窗口並使其切換到前台。
- 滑鼠左鍵在窗口邊框或者角上按住拖拽可以改變窗口大小,文檔說中鍵也是這個用途,但我試驗了無效。
- 滑鼠右鍵在窗口邊框或者角上按住拖拽可以移動窗口。
- 在桌麵灰色區域或者 shell 窗口裡(其它地方要麼出不同菜單要麼不出菜單)按住右鍵會出來菜單: "New | Resize | Move | Delete | Hide | 被隱藏或者被完全遮擋的窗口的列表",保持右鍵按住,在期望的菜單項上鬆開就選擇中了指定菜單項。 這裡有個技巧,Rio 的菜單會記住上次選擇了什麼項,再次出菜單時,滑鼠會自動在上次選擇的菜單項上,所以單擊右鍵立刻鬆開,就是選擇了上次那個菜單項。
- 右鍵在 New 上釋放,則進入新建 shell window 命令,此時用右鍵拖動以划出一個矩形區域,鬆開右鍵後,此區域成為一個新的 shell window。
- 右鍵在 Resize 上釋放,則進入 Resize 命令,滑鼠指針變成一個瞄準器樣子(一個圓,裡面一個加號),在期望 Resize 的窗口上右鍵單擊,然後在桌面上右鍵拖動以划出一個矩形區域,鬆開右鍵後,被選中的 shell window 挪到此新矩形區域里。
- 右鍵在 Move 上釋放,則進入 Move 命令,滑鼠指針變成一個瞄準器樣子(一個圓,裡面一個加號),在期望 Move 的窗口上右鍵拖動。注意這裡沒有右鍵單擊的選擇步驟,而且被移動的窗口可以被某個前台窗口擋住一部分,不需要事先左鍵單擊切換到前台。
- 右鍵在 Delete 或者 Hide 上釋放,則進入 Delete 或者 Hide 命令,滑鼠指針變成一個瞄準器樣子(一個圓,裡面一個加號),在期望的窗口上右鍵單擊,則刪除此窗口或者隱藏此窗口。
- 右鍵在 Hide 菜單項下面的某個窗口標題菜單項上釋放,則將之前隱藏的、或者某個被其它窗口完全遮擋的窗口切換到前台。
上述滑鼠基本操作請多練習幾遍,試驗下把 stats windows 縱向拉升下,看看每一行是什麼統計信息。滑鼠玩不轉的話,基本會萬馬奔騰然後玩不下去了…… Rio 的這個獨特的窗口控制非常開眼吧??
窗口的滾動控制也是很特別的,首先來講 shell window 的滾動控制:
在 term 窗口裡輸入 ls / 後,你立馬會注意到文字居然不滾動!這是 Rio 特意的設計,這樣不需要在命令後面寫個 "| less" 之類的翻頁了——真的非常方便,腦洞大開有沒有! 但要注意命令的執行實際被阻塞住了,類似管道的輸入因為輸出沒有進一步讀取而阻塞,在編譯或者IRC聊天時不希望有這樣的阻塞行為,可以在 shell window 上用中鍵菜單選擇 scroll,會進入 scroll 模式,同時那個菜單項變成 noscroll。
第二個詭異的地方是「編輯游標」可以停留在任意文字上,並且編輯!這是因為 Rio 可以直接用任何文本組成命令並執行,也是個非常特別的UI設計。
在 shell window 里按 Up、Down、PageUp、PageDown 是近似翻半頁的效果,shift + Up/Down是逐行滾動。左邊是滾動條,白色塊是滾動塊,操作比較詭異:
- 在滾動條任意位置左鍵單擊是向上滾動
- 在滾動條任意位置右鍵單擊是向下滾動
- 在滾動塊上方中鍵單擊向上滾動
- 在滾動塊下方中鍵單擊向下滾動
- 左鍵在滾動條上長按,則向上持續滾動
- 右鍵在滾動條上長按,則向下持續滾動
- 中鍵在滾動條上長按,滾動塊會自動跑到滑鼠指針處,然後可以拖動滾動塊
如果沒有左鍵單擊某行改動游標位置,那麼滾動到文本行最末尾時,游標就在 term% 提示符那裡,可以直接輸入命令(也可以不滾動,直接輸入新命令,會自動滾動到末尾),如果用滑鼠左鍵單擊改變了游標位置,那麼要在最後的 term% 提示符那行左鍵單擊,以定位游標,然後可以繼續輸入命令。
文檔里說滾輪也可以用來滾動,反正我在 Virtualbox 上沒試驗成功,大概是模擬的 PS/2 滑鼠沒把滾動識別進去。
對 shell window 的操作也是非常基本的,請勤加練習New/Move/Resize/Delete/Hide/Scroll,否則又會萬馬奔騰不息……
然後是 stats window 里菜單項的滾動,也很別緻~
在 stats window 上按住右鍵,會出來上面的菜單,讓你選擇增加或者刪除某個統計信息。注意菜單的左側有個小綠條,那個是滾動塊,滾動辦法是按住右鍵不放,挪到左側滾動條(不必是滾動塊上)上,然後依然按住右鍵不放,上下滑動,當右側出現期望的菜單項後,挪動滑鼠過去再放開右鍵。
請勤加練習菜單的滾動,到此為止,你的 Rio 操作就算入門了,再也不會像剛使用 VIM 的菜鳥一樣,連退出 VIM 都不會??
來一點高階技巧。
- 滑鼠左鍵拖動選擇文本,easy!
- 滑鼠左鍵雙擊單詞以選擇單詞,easy!
- 滑鼠左鍵雙擊行首或者行末,選擇整行,嗯哼!
- 拖動或者雙擊選擇結束時,保持左鍵按下,按中鍵,然後鬆開兩鍵,則剪切文本
- 拖動或者雙擊選擇結束時,保持左鍵按下,按中鍵,鬆開中鍵,按右鍵,然後鬆開兩鍵,則複製文本
- 拖動或者雙擊選擇結束時,保持左鍵按下(或者未選擇文本時直接按住左鍵),按右鍵,然後鬆開兩鍵,則粘貼文本
- 拖動或者雙擊選擇結束時,保持左鍵按下(或者未選擇文本時直接按住左鍵),按右鍵,鬆開右鍵但不要鬆開左鍵,此時文本已經粘貼,然後按中鍵,鬆開兩鍵,則撤銷粘貼
- Ctrl-u 刪除從游標到行首的字元
- Ctrl-w 刪除游標前面的單詞
- Ctrl-a 移動游標到行首
- Ctrl-e 移動游標到行末
- Ctrl-b 移動游標到命令提示符(只對 shell window 有效)
- 中鍵菜單除了 Cut/Paste/Snarf(Snarf 等價於 Copy),還有其它幾個菜單項:
- plumb: 將選擇的文本,或者複製、剪切的文本送給 plumber
- look: 在當前窗口查找選擇的文本,或者複製、剪切的文本
- send: 將選擇的文本,或者複製、剪切的文本粘貼到末尾的 term% 提示符後面,並添加回車,相當於把這個文本送給 rc 執行
- scroll: 切換shell window內文本的滾動模式
上面的滑鼠剪切、複製、粘貼操作序列我練習了很久還是覺得挺變態的,同覺得不舒服的同學可以用中鍵菜單的 cut / paste / snarf 菜單項,其中 snarf 是 copy 的意思。
Rio 的使用很依賴滑鼠,9front 手冊中有兩幅圖風趣的表達了這個設計,另外 Rio 的配色初看起來很幼稚,其實是有專門的色彩專家設計的,特意採用暗淡的色系,避免干擾用戶注意力以及視力疲勞。
推薦閱讀: