文章目錄
Jef Raskin 在 The Humance Interface: New Directions for Designing Interactive Systems 一書中提到,好的使用者介面應當把使用者當前的關注對象(文檔)和使用者要施加給對象的操作(命令)統一起來。由此出發,Jef Raskin談到了好幾個非常前衛的介面設計理念。其中之一是,使用者可以在編輯過程中,即時地計算或處理被選中的內容,甚至把被選中的內容當作命令或指令碼來執行。
我對這種設計理念非常感興趣,這個思路有點兒像LISP或類似的FP編程裡說的程式與資料的統一了。網上好像有這種即時的計算軟體,不過想不起來在哪裡了,乾脆我自己做一個吧,於是就得到了下面這個小工具。這個工具雖然粗糙(用C語言寫的,也沒做什麼測試和最佳化),但運行起來還挺有趣的,可以在一定程度上反映Jef Raskin的人本思想。
對此感興趣的朋友可以到下面的網址下載xeval及其源碼。如果你在xeval的基礎上實現出了更好的工具,別忘了告訴我一聲。
http://www.contextfree.net/wangyg/c/xeval/xeval.html
以下是xeval的文檔
xeval 可擴充Realtime Compute工具 v1.0使用方法
這是一個簡單、有趣的小工具,它的設計思想來自Jef Raskin所著的The Humance Interface: New Directions for Designing Interactive Systems一書中介紹的介面設計技術。
xeval不用安裝,直接運行bin目錄下的xeval.exe程式就可以了。運行xeval後,除了螢幕右下角工作列上多了一個小表徵圖外,你看不出任何異常(在表徵圖上點滑鼠右鍵,可以看到xeval的菜單)。
現在,你在Word、PowerPoint、Notepad、UltraEdit甚至Visual Studio等應用軟體中錄入文字內容時,可以試著錄入一個數學運算式。如在下面的Word文檔中,你突然想計算今年公司人均費用的增幅,沒關係,不用開啟計算機,只要在Word文檔中輸入你想計算的運算式,再用滑鼠或鍵盤選中這個運算式:
然後按 Ctrl + Alt + F5(這是xeval預設為數學運算定義的熱鍵),你會發現,該數學運算式被替換成了
這就是那個數學運算式的計算結果了。是不是很方便?——這也是“即時”一詞的由來。
當然,xeval的作用還遠不止這些。xeval是一個可“擴充”的、“廣義”的計算工具,你可以通過添加外掛程式的方式,為xeval添加各種功能,如為正在編輯的文本加密解密,改變字母的大小寫,在編輯文本的同時直接獲得一段指令碼語言的運行結果,把鍵入的縮減語替換成預先定義的文字,對正在編輯的文本做簡繁體轉換,完成即時的度量衡單位轉換,等等等等。
比如說,我在編寫PowerPoint文檔的同時,就會隨手寫下一段Scheme代碼,選中它,像下面這樣:
然後按一下快速鍵,讓xeval幫我產生一串標準的斐波那契(Fibonacci)數列(在我的電腦上,我把PLT Scheme中的mzscheme解譯器當作外掛程式嵌入了xeval中,所以計算的結果還有mzscheme的著作權資訊,我沒有把它濾掉):
所以只要你想得出來,只要你簡單地為xeval開發一個外掛程式,或者找一個別人做好的程式作為外掛程式,你就可以讓xeval發揮出越來越大的效能。
原理和擴充方法
其實,xeval的實現原理很簡單。xeval為每個外掛程式註冊一個系統級的快速鍵,當我們在其他軟體如Word中選中了某些文字,並按下快速鍵時,xeval就自動向當前軟體發送類比的“Ctrl-C”按鍵組合,大多數標準的Windows程式這時都會把我們選中的文字複製到剪貼版裡。xeval立即把剪貼版中的內容寫到臨時檔案ext.in裡,並用如下的指令調用外掛程式程式(其中的大於、小於符號起I/O重新導向的作用):
some-plug-in.exe < ext.in > ext.out
接下來,xeval讀出ext.out的內容,把它寫回剪貼簿,再向當前軟體發送類比的“Ctrl-V”按鍵組合。就這麼簡單,這裡面沒有任何玄機(追求完美的人也許會用類似金山詞霸那樣的螢幕取詞技術實現更強大的Realtime Compute功能)。
所以,任何以stdin為輸入,以stdout為輸出的可執行程式都可以成為xeval的外掛程式。你可以自己編寫外掛程式(用什麼語言都可以,但執行速度最好不要太慢,要不然xeval會等著急的),也可以找別人寫的程式來用。其實,xeval預設的那個數學運算外掛程式就是我從bison手冊中的mfcalc樣本程式改出來的。xeval本身以及數學運算外掛程式的原始碼都在src目錄下,大家可以自由查閱、使用和修改。
安裝外掛程式的方法也很簡單,你只要把可執行程式複製到ext目錄下,或複製到環境變數PATH所指的目錄下,然後按下面的格式配置好ext目錄下的ext.conf檔案就可以了:
######################################################################################## xeval 外掛程式設定檔## 由 # 開頭的是注釋行,其他都是配置行。配置行可以有一個或多個,每一個配置行的格式是# (不符合如下格式的配置行將被忽略):##<可執行程式名>, <快速鍵定義>## 其中,<可執行程式名> 對應的 EXE 或 COM 檔案或者放在 ext 目錄下,或者放在環境變數# PATH 指明的目錄下。該可執行程式應該是一個讀取標準輸入並將結果寫到標準輸出的控制# 台程式。<快速鍵定義> 是由 +、Ctrl、Shift、Alt、F1-F10、1-9、A-Z 組成的字串,如:##Ctrl + Alt + P## 表示按下 Ctrl 和 Alt 的同時,按下 P 鍵##Alt + Ctrl + Shift + F3## 表示按下 Ctrl、Shift 和 Alt 的同時,按下 F3 鍵,等等######################################################################################## 四則運算和Function Compute器的外掛程式calc.exe, Ctrl + Alt + F5# Scheme語言解譯器外掛程式(如果安裝了PLT Scheme且配好了執行路徑,就可以使用這個外掛程式)# mzscheme, Ctrl + Alt + F9
補充說明
最後,說明一點,我開發xeval只是為了實踐Jef Raskin所說的使用者介面設計思想,並不試圖編寫出十分強壯、穩定的軟體(網上應該也有類似的但更成熟的軟體工具)。所以,我在編碼時使用的都是些最簡單的技術,編碼後也沒做更多的測試。如果你發現xeval存在這樣或那樣的問題,你完全可以自行更改和調試xeval的原始碼,以獲得最佳的使用效果。