Introduction

本文的主旨以讨论 EMACS 的入门为主,其内容包括 EMACS 发展的概述, EMACS 整合环境的简介以及 EMACS 的基石 - editor 的详谈。本文在结构上分成八章, 第一章讨论有关 EMACS 的源起、发展历史以及 EMACS 的特性简介。 第二章讨论 EMACS on-line help。第三章则简单介绍 EMACS 的整合环境。接下来就是本文的重点,探讨 EMACS 的本质。 所以,第三章之後的各章节则详细探讨 EMACS editor 的这一个主题。

现在就来讨论与 EMACS 发展有关的机构组织以及 EMACS 所扮演 的角色特质。

GNU 是什麽

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 archivesanonymous FTPUUNET 等, 甚至任何一个装有 GNU 软体的地方都可以取得。GNU 计划下的软体, 不只提供软体的使用权,也提供软体的原始程式,任何人都可以根据 需要来修改程式,也可以尽己之力来找出程式的错误,使隶属於 GNU 的软体在大家的努力下能尽善尽美。 GNU 计划下的软体,是可不需 付费而享有使用权。GNU 对使用者唯一的要求就是,当使用者对於 GNU 计划下的软体做了进一步的修改时,仍必须维持 GNU 的精神, 就是对於修改过的软体仍然必须将其无条件的奉献出来 ,任何人都不可将修改过的 GNU 软体当成商品来买卖。 所以 Stallman 一直强调 GNU 计划下的软体是 free 的,而且 永远会是 free 的。 GNU 计划的最终目标是要完成一个全新的作业系统。 目前完成的有 EMACS text editordebuggeryacc-compatible parser generator 以及 linker 等等;也完成了将尽三、 四十个公用程式(utilities);而 shell 也已经接近完成的阶段。目前只要等 kernel compiler 完成, 就可以在 GNU 的系统上发展程式。

未来完成的 GNU 系统将可以执行 UNIX 上的所有程式, 但它却与 UNIX 系统不完全一致。 GNU 系统将改进 UNIX 系统的 缺失,使它使用起来更方便。例如,未来的系统将会有较长的档名, 档名会有版次等等;新的系统会使用 C LISP 做为系统程式语言。


GNU Emacs 是什麽

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 EMACSUnipress EMACS 以及 CCA EMACS , 其中以 GNU EMACS 最常被使用,本文也只介绍 GNU EMACS。 适合个人电脑的 EMACS FreEMACSMicroEMACS 以及 Epsilon。当然,也有使用在 VMS 环境的版本。

GNU EMACS 是由 C LISP 语言写成,任何人都可依据 需要将个人所发展的函式(function)加入 GNU EMACS 上。 当然,新发展的软体是不可以从事商业买卖,只能将它无条件的 奉献出来。新发展的函式可以直接在 EMACS 中使用,不需重新 编译(complie) 整个 EMACS ,而且新增的函式也不会破坏 EMACS 原有的结构。就因为有此特性,EMACS 的函式 可以 与日俱增。愿与他人共享成果的使用者,可以透过电子邮件或 电子公布栏,将函式的原始码公诸於世。公布的函式,最後会经由 FSF 的审查,以决定是否要加入新版的 EMACS 中。FSF 也鼓励 使用者将所发现的错误,透过相同的管道,提供给 FSF 作为改进 之用。GNU EMACS 就是在如此的运作下,靠大家共同的努力来 提升品质,以达产品的稳定性。


GNU EMACS 的特质

GNU EMACS 与其说它是一个编辑器(editor),倒不如说它是一个 以编辑器为主干的 环境软体。一般的软体都是将编辑器视为一个附属功能,只有 EMACS 以编辑器为基石,在其上发展其它的功能。以收发电子信件 的软体为例,电子信件软体是以收发信件为环境的基石。任何电子信件 的软体都只有在使用编辑器时,才呼叫相关的编辑器。 EMACS 的出发点就与众不同, EMACS 一切以编辑器为主,任何 的功能都是建基在编辑器之上。

所以,进入 EMACS ,就等於是进入了一个编辑环境,这个 编辑环境提使用者许多功能,让使用者如置身在一个全功能的 作业系统中。 EMACS 自行发展了一个 ``bourne-shell-like'' shell, 除了 EMACS 自己的 shell 外, EMACS 还可以让使用者自行选择 所使用的shellEMACS 可以读送 e-mailEMACS 可以透过 ftp 来编辑远方 host 上的档案,而不需要签入(login) 档案所在的 hostEMACS 也可做 telnet relogin 的动作。EMACS 也可以读 newsEMACS 也提供了年历(calendar),可以让使用者查阅日期,也 可以将重要的事情在年历上标示出来;EMACS 又提供了 ``Diary'' 的功能,当特定的日期与时间到来时,会在萤幕上将 ``Diary'' 上 的事情显示;EMACS 也有撰写文章大纲的功能。 EMACS 更提供 多种程式的编译功能,让使用者可以在 EMACS 中一边编辑程式 一边编译程式; EMACS 更有自己的 debugger,使程式的除错、 编辑与编译在 EMACS 中同时完成。

所以 EMACS 所提供的不只是一个编辑器而己,它所提供 的是一个整合的工作环境,而这个环境是建立在编辑的基石上。 它希望使用者进入了 EMACS 以後,可以在 EMACS 的环境中完成 所有的工作,不需要离开 EMACS,要离开 EMACS 就是要离开电脑的 时候(logout)。 EMACS 除了是一个整合的工作环境外,它还具有以下的特性:

EMACS 是一个 display 编辑器,因为每一个被编辑的文字都会
被显示在萤幕上。

EMACS 是一个 real-time 的编辑器,因为当新的文字被键入时,
萤幕会在非常短的时间内被更新。

EMACS 的编辑功能不只具备一般编辑器所有的功能,它还提供
如下的功能: 

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 的特色。至於如何使用这些功能就 下列章节所要讨论的重点。 回主画面