Emacs

その他の初期実装

その後、他のコンピュータシステム用に多くのEmacs風エディタが書かれた。これらにはMichael McMahonとDaniel WeinrebらがLISPマシン用に書いた EINE (Eine Is Not Emacs) とZWEI (Zwei Was Eine Initally）（なお、ZWEIはドイツ語で「2」の意味でもある。EINEが「1つの」（女性形）にあたるためのもじり。ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い）、そしてOwen Theodore Andersonによって書かれたSINE (Sine Is Not Emacs) がある。WeinrebのEINEはLISPで書かれた最初のEmacsである。1978年にはハネウェルケンブリッジ情報システム研究所でBernard GreenbergによりMultics Emacsがほぼ全てをMultics MACLISPを用いて書かれ、その後Richard SoleyとBarry Margolinによりメンテナンスされた。なおRichard SoleyはNILプロジェクト用にNILEというEmacs風エディタを開発し続けていた。GNU Emacsを含むEmacsのバージョンの多くは後に拡張言語としてLISPを採用することになる。UNIXで動作する最初のEmacs風エディタは、後にNeWSやJavaの開発で知られることになるジェームス・ゴスリングが1981年に書いたGosling Emacsであった。 これはCで書かれ、MocklispというLISP風構文の拡張言語を使っていた。Mocklispにはシンボルさえなく、構文がLISP風なだけで本当のLISPではない。Gosling Emacsは、現在広く使われているフリーソフトウェアのGNU EmacsやMeadowとは異なりプロプライエタリ・ソフトウェアであった。プロプライエタリ・ソフトウェアとは、ソースコードが公開されていないソフトウェアで、プログラムを自由に配布や改変、逆コンパイルをすることができないものを指す用語である。

GNU Emacs

1984年、リチャード・ストールマンはプロプライエタリ・ソフトウェアであったGosling Emacsのフリーソフトウェアによる代替物を作るべく、GNU Emacsに取り組み始めた。当初GNU EmacsはGosling Emacsをベースとしていたが、ストールマンはMocklispインタプリタを本物のLISPインタプリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。GNU Emacsは揺籃期のGNUプロジェクトがリリースした最初のプログラムとなった。GNU EmacsはCで書かれており、Cで実装されたEmacs Lisp (ELisp) を拡張言語として提供する。最初に広く頒布されたGNU Emacsのバージョンは1985年に登場した15.34だった。初期のGNU Emacsのバージョン番号は1.x.xのように最初の桁にC coreのバージョンを表すよう採番されていたが、バージョン1.12が出た後にメジャー番号が変わりそうにないため先頭の1をなくすことにしたので、バージョン番号は1から13にスキップした。最初の公開リリースであるバージョン13は1985年3月に完成した。2014年9月にGNU emacs-develメーリングリストで、GNU Emacsにラピッドリリース戦略を採用し、将来的にバージョン番号をより迅速に増やしていくことが発表された。
GNU Emacsは後にUNIXへ移植され、Gosling Emacsよりも多くの機能を提供した。それらの機能の中で代表的な物は、拡張言語であるフル機能を持ったLISPである。それから瞬く間にGNU EmacsはGosling Emacsに取って代わりUNIXのEmacsエディタのデファクトスタンダードとなった。Markus Hessは彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した。
Emacsは、チューリング完全な言語を小さい中央コアの頂点で起動する階層型アーキテクチャを使用する。ストックされたEmacs頒布の約3/4（24.4現在では1611kLOCのうち1266）がElisp拡張言語で書かれており、一度Cによる中核部分（Elispインタプリタを実装し、24.4現在では247kLOCを占める）を移植すればElispコードに実装された機能のセットは存在することになるので、Emacsを新しいプラットフォームに移植することはネイティブコードのみから成る同等のプロジェクトを移植するよりはるかに簡単である。Emacsの移植は理論上中核部のみを新しいプラットフォームへ移植すればよい。このため一度中核部が移植されれば、Cよりも高級な言語で実装された部分は最小限度の作業で済む。
GNU Emacsの開発は伽藍とバザールで伽藍式開発の例にあげられていたように、1999年まで比較的閉鎖的だったが、それ以降は公開された開発メーリングリストと匿名CVSアクセスを採用するようになった。GNU Emacsの開発は2008年までは単一のCVSトランクで行われていたが2009年末より分散型バージョン管理システムであるBazaarに切り替えられ、さらに2014年11月11日にGitへと移行した。
リチャード・ストールマンは長らくGNU Emacsの主要な管理者を務めていたが、時代と共にその役目から退いていった。2008年から2015年まで管理はStephan MonnierとChong Yidongに引き継がれている。2015年にMITにおけるストールマンとの会合の後、John Wiegleyがメンテナとして指名された。2014年の時点で、GNU Emacsはその歴史を通じて579人によりコミットされてきた。
GNU Emacs のバージョンは 1985年のうちに 17 まであがったが、それ以降は更新は落ち着いた速度で行われている。

XEmacs

1991年初頭、GNU Emacs 19の初期α版をベースとしてJamie ZawinskiとLucid社の人たちによりLucid Emacsが開発された。コードベースはすぐに2つに分割され、開発チームは単一プログラムとして併合しようとすることをあきらめた 。これはフォークしたフリーソフトウェアのうち初期の最も有名な例の1つである。Lucid EmacsはXEmacsと名前を変え、Emacsの中でGNU Emacsに次いで2番目に有名な派生となった。XEmacsの開発は2009年1月に最新の安定版であるバージョン21.4.22がリリースされてから遅くなっていき、その一方でGNU Emacsは以前はXEmacsにしかなかった機能の多くを実装していった。このため一部のユーザーはXEmacsの死を宣言するようになった。

機能

Emacsは主にテキストエディタでありテキスト要素を操作するよう設計されているが、LaTeX、Ghostscript、ウェブブラウザといった外部のプログラムと通信することで、ワードプロセッサのように文書を整形したり印刷することができる。Emacsは語、文、そして段落といった異なるセマンティック要素や、関数のようなソースコードの構成要素を処理したり様々な色を付けるためのコマンドを提供する。さらにEmacsは編集コマンドのユーザー定義バッチ用にキーボードマクロも提供する。
GNU Emacsはリアルタイム表示エディタであるので、編集する度にその編集がオンスクリーンで表示される。これは現在のテキストエディタの標準的振る舞いであるが、EMACSは初期の段階でこの機能を実装していたため、viのように既存のテキストに新しい編集を挿入するために個別のコマンドを実行する必要がなかった。
viが編集のための基本的な機能のみを搭載していたのに対し、Emacsはインクリメンタルサーチ・無制限のアンドゥ・ヤンク（ペースト）用のスタック・複数のバッファ・バッファ上でシェルを実行・補完・言語ごとのモードなど、エディタとして考えられる限りの機能を詰め込んでいる。VimではEmacsと同等のことができるようになっているが、バッファの使い方はEmacsより控えめである。

一般的アーキテクチャ

文書への文字列挿入などの基本的な編集操作を含むEmacsの機能はほとんど全て、LISPの方言で書かれた関数で行える。GNU Emacsで使われるLISP方言はEmacs Lisp (ELisp) として知られている。ELisp層はCで書かれた基本的なサービスとプラットフォームを抽象化した概念の、安定したコアの頂点に位置している。LISP環境の変数と関数は、Emacsのリコンパイルや再起動をせずとも一時的に修正できる。
Emacsは追加属性を持つテキストを含んだバッファと呼ばれるデータ構造上で動作する。全てのバッファはその固有のポイント（カーソル位置）とマーク（ポイントと併せて、選択されたリージョンを区切るためのもう1つの位置）、（適用可能な場合）バッファが訪問しているファイル名、そして変数で編集や振る舞いを制御する現在のモードのセット（正確には1つの「主モード」と複数の「副モード」からなる）を保存している。Elispコードはコマンドと名付けられ、インタラクティブに実行できる。コマンドはキープレスにバインドでき、さらに名前でアクセスすることもできる。コマンドの中にはバッファから任意のElispコードを評価するもの（例としてはeval-regionやeval-bufferなど）もある。
バッファはウィンドウ内に表示される。ウィンドウは端末画面やGUIウィンドウのタイリングされた部分である（その部分はEmacs用語でフレームと呼ばれ、複数のフレームが可能）。特に設定されていない場合、ウィンドウにはスクロールバー、行番号、一番上にあるヘッダ行（通常この行にはバッファタイトルやファイル名が表示される）、そして一番下にあるモード行（通常この行には現在のモードとバッファにおけるポイントの位置のリストが表示される）が含まれる。
同じバッファ上で複数ウィンドウを開くことができるため、例えば1つの長いテキストから異なるパートを見ることができる。さらに複数バッファで同じテキストを共有できるので、例えば言語が混在したファイルで異なる主モードを利用することができる。M-x <mode name>により必要に応じてモードを手動で変更することもできる。
ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。ミニバッファは通常1行しかないが、ここでも通常のバッファと同じ移動・編集コマンドを使うことができる。

Emacs教会

Emacs教会 (英語: Church of Emacs) とはEmacsユーザーによって作られたパロディ宗教である。Emacs教会はviを「獣の数字」である（ローマ数字ではvi-vi-viは666を表すため）としているが、viのユーザーに反対しているわけではない。むしろプロプライエタリ・ソフトウェアをアナテマと呼んでいる（「viのフリーソフトウェア版を使うことは罪というより苦行である」）。このパロディ宗教をサポートするためのEmacs教会のニュースグループとしてalt.religion.emacs,が存在する。Emacsユーザーの中には「よりよいものを真似る」ことを試みたとして、viの支持者は対抗としてviカルト (英語: Cult of vi) を作成した。
ストールマンは冗談で自身をEmacs教会の聖人 (英語: saint) であるSt IGNUciusとしている。

用語

英語においてboxenやVAXenのように、emacsという単語の複数形をemacsenと綴ることもある。