Introduction
本文的主旨以討論 EMACS 的入門為主,其內容包括 EMACS
發展的概述, EMACS 整合環境的簡介以及 EMACS 的基石
- editor 的詳談。本文在結構上分成八章,
第一章討論有關 EMACS 的源起、發展歷史以及 EMACS 的特性簡介。
第二章討論 EMACS 的 on-line help。第三章則簡單介紹 EMACS
的整合環境。接下來就是本文的重點,探討 EMACS 的本質。
所以,第三章之後的各章節則詳細探討 EMACS 為 editor
的這一個主題。
現在就來討論與 EMACS 發展有關的機構組織以及 EMACS 所扮演
的角色特質。
GNU 是 Richard Stallman 於 1975 年,在 MIT 所成立 的
Free Software Foundation (FSF)中所執行的一項計劃。GNU 的
本意代表 ``Gnu's Not Unix'';雖然如此,它卻是一個與 UNIX
完全相容的軟體系統。二者最大不同在於,GNU 是一個 free 的
軟體, UNIX 卻是一個要付費的軟體系統。 GNU 之所以與 UNIX
完全相容,是因為 UNIX 的使用者很多,為了讓 UNIX 的使用者
在使用 GNU 的時候不會有疏離的感覺,所以 GNU 儘量與UNIX 相容,
它的相容只是看起來與用起來像 UNIX 而已, GNU 其實改進了
所多 UNIX 的缺點,使它能盡善盡美。
Stallman 倡導 FSF 的宗旨,是要建立一個軟體 free 的王國。
他所謂的 free 並不是意謂著便宜或免費,因為在 FSF 下的
有些軟體還是必需付些工本費。他所謂的 free 是指使用上
的自由。
要瞭解 Stallman 所言 free 的真意,就必須知道一般
軟體的使用情形。大部份的商業軟體在使用上都或多或少有些限制。
例如,必須付費才可使用軟體程式,若運氣不好,同一程式在
不同的電腦上使用,可能還要另行付費。有些軟體程式的使用
也有一定的期限,期限一到就需另繳費用,否則使用權就會被撤銷;
甚至有些軟體是以使用時間來計算費用的。當然,這些商業軟體
是絕對不予許使用者將這些軟體任意給他人使用。除非給予軟體公司
相當的代價,使用者是絕對不可能拿到軟體的原始程式的。
上述的種種都還是付錢就可以解決的,有些問題是錢也
乏術的。因為,當商業程式銷售失敗或遠景不被看好時,使用者
所購置的軟體就可能被開發者遺棄。此時,若想維持此軟體的
正常運作,就必須自求多褔了。
Stallman 所領導的 GNU 計劃就是要脫離商業軟體的種種
枷鎖,這也是 GNU 計劃所謂 ``free'' 的真諦。GNU 計劃下
的任何軟體,只要使用者能找到軟體的來源,任何人都可以自由的
使用它。獲得 GNU 軟體的來源很多,
如 public archives、anonymous FTP、UUNET 等,
甚至任何一個裝有 GNU 軟體的地方都可以取得。GNU 計劃下的軟體,
不只提供軟體的使用權,也提供軟體的原始程式,任何人都可以根據
需要來修改程式,也可以盡己之力來找出程式的錯誤,使隸屬於 GNU
的軟體在大家的努力下能盡善盡美。 GNU 計劃下的軟體,是可不需
付費而享有使用權。GNU 對使用者唯一的要求就是,當使用者對於
GNU 計劃下的軟體做了進一步的修改時,仍必須維持 GNU 的精神,
就是對於修改過的軟體仍然必須將其無條件的奉獻出來
,任何人都不可將修改過的 GNU 軟體當成商品來買賣。 所以
Stallman 一直強調 GNU 計劃下的軟體是 free 的,而且
永遠會是 free 的。
GNU 計劃的最終目標是要完成一個全新的作業系統。
目前完成的有
EMACS text editor、debugger、yacc-compatible parser generator 以及 linker
等等;也完成了將盡三、 四十個公用程式(utilities);而 shell
也已經接近完成的階段。目前只要等 kernel 和 compiler 完成,
就可以在 GNU 的系統上發展程式。
未來完成的 GNU 系統將可以執行 UNIX 上的所有程式,
但它卻與 UNIX 系統不完全一致。 GNU 系統將改進 UNIX 系統的
缺失,使它使用起來更方便。例如,未來的系統將會有較長的檔名,
檔名會有版次等等;新的系統會使用 C 與 LISP 做為系統程式語言。
GNU EMACS 是 GNU 計劃下的第一個產品, EMACS 為
Editor MACros 的縮寫。 Richard Stallman 於 1975 年在 MIT 首次
撰寫 EMACS editor。目前 GNU EMACS 已發展到 19.28 版,
本文所討論的 GNU EMACS 也以 19.28 版為主。 GNU EMACS
秉持著 GNU 的精神,它依然是 free 的。任何人都可以
``anonymous ftp'' 的方式至 prep.ai.mit.edu 這個 site ,取得
GNU EMACS 的原始碼。 GNU EMACS 不是 public domain 的產物,
它有版權也有使用上的限制,那就是任何得到它的人都不可以將其
視為私有的財產。修改過的 GNU EMACS 也不可以作為商品來牟利,
金錢交易的行為是絕對被禁止。
EMACS 有多種版本可適合不同的工作平台(platfrom)。
適合 UNIX 環境的有 GNU EMACS、Unipress EMACS 以及 CCA EMACS ,
其中以 GNU EMACS 最常被使用,本文也只介紹 GNU EMACS。
適合個人電腦的 EMACS 有 FreEMACS、MicroEMACS 以及
Epsilon。當然,也有使用在 VMS 環境的版本。
GNU EMACS 是由 C 與 LISP 語言寫成,任何人都可依據
需要將個人所發展的函式(function)加入 GNU EMACS 上。
當然,新發展的軟體是不可以從事商業買賣,只能將它無條件的
奉獻出來。新發展的函式可以直接在 EMACS 中使用,不需重新
編譯(complie) 整個 EMACS ,而且新增的函式也不會破壞
EMACS 原有的結構。就因為有此特性,EMACS 的函式 可以
與日俱增。願與他人共享成果的使用者,可以透過電子郵件或
電子公佈欄,將函式的原始碼公諸於世。公佈的函式,最後會經由
FSF 的審查,以決定是否要加入新版的 EMACS 中。FSF 也鼓勵
使用者將所發現的錯誤,透過相同的管道,提供給 FSF 作為改進
之用。GNU EMACS 就是在如此的運作下,靠大家共同的努力來
提昇品質,以達產品的穩定性。
GNU EMACS 與其說它是一個編輯器(editor),倒不如說它是一個
以編輯器為主幹的
環境軟體。一般的軟體都是將編輯器視為一個附屬功能,只有
EMACS 以編輯器為基石,在其上發展其它的功能。以收發電子信件
的軟體為例,電子信件軟體是以收發信件為環境的基石。任何電子信件
的軟體都只有在使用編輯器時,才呼叫相關的編輯器。
EMACS 的出發點就與眾不同, EMACS 一切以編輯器為主,任何
的功能都是建基在編輯器之上。
所以,進入 EMACS ,就等於是進入了一個編輯環境,這個
編輯環境提使用者許多功能,讓使用者如置身在一個全功能的
作業系統中。 EMACS 自行發展了一個 ``bourne-shell-like'' 的 shell,
除了 EMACS 自己的 shell 外, EMACS 還可以讓使用者自行選擇
所使用的shell;EMACS 可以讀送 e-mail。 EMACS 可以透過 ftp
來編輯遠方 host 上的檔案,而不需要簽入(login) 檔案所在的 host;
EMACS 也可做 telnet 與 relogin 的動作。EMACS 也可以讀 news;
EMACS 也提供了年曆(calendar),可以讓使用者查閱日期,也
可以將重要的事情在年曆上標示出來;EMACS 又提供了 ``Diary''
的功能,當特定的日期與時間到來時,會在螢幕上將 ``Diary'' 上
的事情顯示;EMACS 也有撰寫文章大綱的功能。 EMACS 更提供
多種程式的編譯功能,讓使用者可以在 EMACS 中一邊編輯程式
一邊編譯程式; EMACS 更有自己的 debugger,使程式的除錯、
編輯與編譯在 EMACS 中同時完成。
所以 EMACS 所提供的不只是一個編輯器而己,它所提供
的是一個整合的工作環境,而這個環境是建立在編輯的基石上。
它希望使用者進入了 EMACS 以後,可以在 EMACS 的環境中完成
所有的工作,不需要離開 EMACS,要離開 EMACS 就是要離開電腦的
時候(logout)。
EMACS 除了是一個整合的工作環境外,它還具有以下的特性:
- display editor
- real-time editor
- advanced editor
- Self-documenting
- Customizable
- Extensible
- support X window enviornment
EMACS 是一個 display 編輯器,因為每一個被編輯的文字都會
被顯示在螢幕上。
EMACS 是一個 real-time 的編輯器,因為當新的文字被鍵入時,
螢幕會在非常短的時間內被更新。
EMACS 的編輯功能不只具備一般編輯器所有的功能,它還提供
如下的功能:
- 文字的填充(filling of text)。
- 程式自動內縮功能。
- 可以同時閱讀一個以上的檔案。
- 對於字元(characters)、字(words)、列(lines)、句子
(sentences)、段落(paragraphs)、頁(pages)以及各種
程式中的 expression 和註解(comments)都有其自有的處理方法。
EMACS 是一個 Self-documenting的軟體,因為在任何時候都
可以 `` Ctrl-h'' 指令來得立即的幫助。因為,透過 `` Ctrl-h''
可以得知每一個 EMACS 的指令。
EMACS 是可以 Customizable 的。使用者可視個人的需求,
來改變 EMACS 指令的定義。GNU EMACS 的 Customization 的設定
非常簡單,使用者可以很方便的使用它。
EMACS 是 Extensible 的。GNU EMACS 是由 LISP 語言
所寫成的函式共同組成的, 函式與函式間的互動關係(dependency)
不強。就因為 EMACS 是由函式所組合而成的,所以可以隨時
將函式作增減而不會破壞 EMACS 既有的結構。
EMACS 也針對 X 的視窗環境,提供自己的選單(menus)
和滑鼠按紐(mouse bottons)功能。 EMACS 對於 text-only 的終端機
也提供許多與 X 環境相當的服務品質,例如在文字模式的終端機,
可以同時開啟數個的檔案,檔案可以互相切換,當使用 shell 模式
來執行 shell 指令的同時也可以編輯檔案。但本文的只討論 text-only
的 EMACS 使用法。
以上的種種就是有關 EMACS 的特色。至於如何使用這些功能就
下列章節所要討論的重點。
回主畫面