Emacs

出典: フリー百科事典『ウィキペディア(Wikipedia)』
Emacs
GNU Emacsにおける複数のDiredバッファの編集
開発元 デイビット・A・ムーン英語版ガイ・スティール・ジュニア
初版 1976年 (48年前) (1976)[1][2]
プログラミング
言語
LISP, C
対応OS TECOクロスプラットフォームUnix系
種別 テキストエディタ
公式サイト www.gnu.org/software/emacs/ ウィキデータを編集
テンプレートを表示

Emacs(イーマックス、[ˈmæks])は、その拡張性を特徴としたテキストエディタのファミリーである[3]。Emacsの中で最も広く使われている派生物であるGNU Emacs[4]の作者、リチャード・ストールマンは、自身の声明[5][6]において「たくさん模倣されたオリジナルのEMACSエディタの発明者 (inventor of the original much-imitated EMACS editor)」を自称し、GNU EmacsのマニュアルではEmacsを「the extensible, customizable, self-documenting, real-time display editor」(拡張およびカスタマイズが可能で、自己文書化を行い、リアルタイム表示を行うエディタ)であると説明している[7]。最初のEmacs開発が1970年代中盤に開始されてから、その直系の子孫であるGNU Emacsが製作され、その開発が2023年現在も続いている。

Emacsはユーザインタフェースと10,000を超える組み込みコマンドを持ち、ユーザーは作業自動化のためにこれらのコマンドをマクロと組み合わせることができる。さらに深い拡張性を提供するLISPプログラミング言語の方言であるEmacs Lisp (ELispまたElispとも) はEmacs実装の主な特徴であり、Emacs Lispでユーザーや開発者はEmacs用の新しいコマンドやアプリケーションを書くことができる。Emacsの拡張機能として電子メールファイルアウトライン、およびRSSフィードが書かれており[8]、それ以外にもELIZAポンライフゲームヘビゲーム、およびテトリスのクローンもある[9]。ユーザーの中にはEmacs内部からテキスト編集だけでなくほとんど全ての作業を行うことができることに気づいた者もいる[10]

原典であるEMACSは1972年にCarl Mikkelson、デイビット・A・ムーン英語版、およびガイ・L・スティール・ジュニアらによりTECOエディタ用のEditor MACroSのセットとして書かれたものであり[2][11][12][13][注 1]、TECOマクロエディタの概念に触発されている[14]

最も有名かつ最も移植されたEmacsは、ストールマンによってGNUプロジェクトのために作成されたGNU Emacsである[15]XEmacsは1991年にGNU Emacsからフォークされた派生物である。GNU EmacsとXEmacsは類似のLISP方言を使い、互いに互換性のある部分が大半である。

Emacsはvi (Vim) と並びUNIX文化における伝統的なエディタ戦争の主要な当事者である。Emacsは開発中であるオープンソースプロジェクトの中で最古のものである[16]

歴史[編集]

GNU EmacsにおけるCソースコードの編集
GNU EmacsからC++コードを編集してコンパイル
Emacsのインタフェースはシンボリックススペースカデットキーボードの設計の影響を受けた[17]

Emacsは1970年代のMIT人工知能研究所(MIT AI研)で産声をあげた。 AI研で使われていたPDP-6PDP-10オペレーティングシステムIncompatible Timesharing System (ITS) であり、そのデフォルトエディタはTECOというラインエディタであった。TECOは現在の一般的なテキストエディタとは違い、追加・編集・表示用にそれぞれ別々のモードが存在していた。そのため文字を入力しても即座に反映されるわけではなく、代わりにTECOコマンド言語の i 文字を入力して入力モードに切り替えてから必要な文字を入力し、最後に ESC 文字を入力してエディタをコマンドモードに再度切り替える必要があり(上書きが可能なため、同様のテクニックが使われた)、しかも入力モードで編集中の文字は画面に表示されなかった。なお、この振る舞いは現在も使われているedviと同じである。

リチャード・ストールマンは、1972年と1974年にスタンフォード人工知能研究所を訪れ、Fred Wrightにより書かれたその研究所の「E」エディタを目にした[18]。Eの振る舞いは今のエディタの大半で使われている直感的なWYSIWYGであり、ストールマンはその機能に触発されてMITに戻った。 AI研ハッカーの一人であるCarl Mikkelsenは、利用者がキー操作するたびに画面表示を更新するControl-Rという表示・編集を組み合わせたモードをTECOに追加していた。ストールマンは、この更新が効率的に動くよう書き直し、任意のキー操作でTECOプログラムが動くように利用者が再定義できるマクロ機能をTECOの表示・編集モードに追加した[13]

EにはTECOに不足していたランダムアクセス編集機能が搭載されていた。TECOはPDP-1紙テープを編集するために設計されたページシーケンシャルエディタであるため、一度に1つの紙テープしか編集することしかできず、さらに紙テープのファイルに存在するページの順に編集しなければならなかった。Eはディスク上のページランダムアクセスを可能にするため、ファイルを構造化するというアプローチを採用していたが、ストールマンはTECOを修正してさらに巨大なバッファを効率的に処理できるようにするというアプローチを採用し、ファイル全体を単一バッファとして読み込み、編集し、書き込めるようにファイル管理方法を変更した。現在ではほとんどのエディタがこのアプローチを用いている。

新しいバージョンのTECOはまたたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」が語尾に付いた名前のカスタム・マクロの巨大なコレクションが溜まった。さらにその2年後、どんどんばらばらになっていくキーボード・コマンド・セットを1つに統合するプロジェクトをガイ・スティールが引き受けた[19]。ストールマンはスティールとハックしたある夜の後、新しいマクロ・セットの文書化や拡張の機能を含む実装を完成させた[13]。こうしてできあがったシステムはEditing MACroSE with MACroSを意味するEMACSと呼ばれることになる。ストールマンによると、Emacsとしたのは「当時ITSで<E>が略称に使われていなかったから」である[20]。作り話であるHacker koanではケンブリッジの人気アイスクリーム店「Emack & Bolio's英語版」にちなんで名付けられたとしている[21]。操作可能な最初のEMACSシステムは1976年後半に姿を現した[22]

ストールマンはEMACSの過度のカスタム化や事実上の分裂の危険に気づいたため、ある使用上の条件をつけた[要出典]。彼は後に次のような文章を残している[22]:

「EMACSは、共同参加を基として頒布される。つまり改良点は全て、組み入れて頒布するために、私のところへ戻ってこなければならない」

原典であるEmacsはTECO同様にPDP-10上だけで動作した。Emacsの振る舞いはTECOのそれとは大きく異なっていてTECOとは独立した別のエディタとみなせるようになり、さらにEmacsは急激にITS上の標準編集プログラムとなった。Mike McMahon英語版はEmacsをITSからTENEXTOPS-20オペレーティングシステムに移植した。 初期のEmacsへの貢献者には、このほかKent Pitman英語版、Earl Killian、Eugene Ciccarelliらがいる。1979年までに、EmacsはMIT人工知能研究所やMITコンピュータ科学研究所で使われる主要エディタとなった[23]

その他の初期実装[編集]

その後、他のコンピュータシステム用に多くのEmacs風エディタが書かれた。これらにはMichael McMahonとDaniel Weinreb英語版らがLISPマシン用に書いた EINE英語版 (Eine Is Not Emacs) とZWEI (Zwei Was Eine Initally[24](なお、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によりメンテナンスされた。GNU Emacsを含むEmacsのバージョンの多くは後に拡張言語としてLISPを採用することになる。UNIXで動作する最初のEmacs風エディタは、後にNeWSJavaの開発で知られることになるジェームス・ゴスリングが1981年に書いたGosling Emacsであった。 これはCで書かれ、Mocklisp英語版というLISP風構文の拡張言語を使っていた。Mocklispにはシンボルもリストもなく[25]、構文がLISP風なだけで本当のLISPではない。Gosling Emacsは、現在広く使われているフリーソフトウェアGNU EmacsMeadowとは異なりプロプライエタリソフトウェアであった[26]

GNU Emacs[編集]

テキスト端末で動く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コアのバージョンを表すよう採番されていたが、バージョン1.12が出た後にメジャー番号が変わりそうにないため先頭の1をなくすことにしたので、バージョン番号は1から13にスキップした[27]。最初の公開リリースであるバージョン13は1985年3月に完成した。2014年9月にGNU emacs-develメーリングリストで、GNU Emacsにラピッドリリース戦略を採用し、将来的にバージョン番号をより迅速に増やしていくことが発表された[28]

GNU Emacsは後にUNIXへ移植され、Gosling Emacsよりも多くの機能を提供した。それらの機能の中で代表的な物は、拡張言語であるフル機能を持ったLISPである。それから瞬く間にGNU EmacsはGosling Emacsに取って代わりUNIXのEmacsエディタのデファクトスタンダードとなった。Markus Hess英語版は彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した[29]

Emacsは、チューリング完全な言語を小さい中央コアの頂点で起動する階層型アーキテクチャを使用する。ストックされたEmacs頒布の約3/4(24.4現在では1611kLOCのうち1266)がEmacs Lisp拡張言語で書かれており[1]、一度Cによる中核部分(Emacs Lispインタプリタを実装し、24.4現在では247kLOCを占める)を移植すればEmacs Lispコードに実装された機能のセットは存在することになるので、Emacsを新しいプラットフォームに移植することはネイティブコードのみから成る同等のプロジェクトを移植するよりはるかに簡単である。Emacsの移植は理論上中核部のみを新しいプラットフォームへ移植すればよい。このため一度中核部が移植されれば、Cよりも高級な言語で実装された部分は最小限度の作業で済む。

GNU Emacsの開発は伽藍とバザール伽藍式開発の例にあげられていたように、1999年まで比較的閉鎖的だったが、それ以降は公開された開発メーリングリストと匿名CVSアクセスを採用するようになった。GNU Emacsの開発は2008年までは単一のCVSトランクで行われていたが2009年末より分散型バージョン管理システムであるBazaarに切り替えられ、さらに2014年11月11日にGitへと移行した[30]

ストールマンは長らくGNU Emacsの主要な管理者を務めていたが、時代と共にその役目から退いていった。2008年から2015年まで管理はStephan MonnierとChong Yidongに引き継がれている[31]。2015年にMITにおけるストールマンとの会合の後、John Wiegleyがメンテナとして指名された[32]。2014年の時点で、GNU Emacsはその歴史を通じて579人によりコミットされてきた[33]

GNU Emacs のバージョンは 1985年のうちに 17 まであがったが、それ以降は更新は落ち着いた速度で行われている。

XEmacs[編集]

GNU/Linux上のXEmacs 21.5

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

その他のGNU Emacsのフォーク[編集]

XEmacsほど有名ではないGNU Emacsのフォークには以下のものがある:

  • Meadow - Microsoft Windows用の日本語バージョン[36]
  • SXEmacs英語版 - Steve YoungsによるXEmacsのフォーク[37]
  • Aquamacs - GNU Emacsをベースとし、Macintoshユーザインタフェースと統合することに焦点を当てている(Aquamacs 3.2はGNU Emacsバージョン24をベースとし、Aquamacs 3.3はGNU Emacsバージョン25をベースとしている)。

様々なEmacsエディタ[編集]

Rubyのソースコードを編集中の、OpenBSD 5.3のタイニーEmacs風エディタmg英語版
LISPマシン用のEmacsであるZmacs英語版

過去においては、各Emacsプロジェクトの目的は肥大化したEmacsの小規模なバージョン作成であった。GNU Emacsは当初、当時のハイエンドであった32ビットフラットアドレス空間と少なくとも1MiBのRAMを搭載するコンピュータを想定していたが、1980年代ではそのようなコンピュータはハイエンドなワークステーションミニコンピュータであったので、一般的なパーソナルコンピュータのハードウェアで動作するようより小規模に再実装する必要があった。近年では小規模なEmacsクローンはソフトウェアインストールディスクに収まるよう設計されている[要出典]

小規模バージョン作成以外のプロジェクトの目的は、Emacs Lisp以外のLISP方言やLISPとは全く異なるプログラミング言語によるEmacsの実装である。Emacsクローンを以下に示す。ただし現在その全てが管理されているわけではない:

  • MicroEMACS - Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。リーナス・トーバルズの使うエディタでもある[38]
  • mg英語版 - 当初はMicroGNUEmacsといわれていたが後にmg2aといわれるようになった。MicroEMACSのパブリックドメインなフォークでありより密接にGNU Emacsを似ていることを意図された。OpenBSDでは既定でインストールされる。また、macOSにプリインストールされていたEmacsは、2018年にリリースされたmacOS Mojave (v10.14)の時点でさえ11年も前にリリースされたemacs22であったが、macOS Catalina (v10.15)よりmgに変更されている。
  • NotGNU[39] - Julie Melbinにより書かれた小さくて高速なプロプライエタリなフリーウェアMS-DOS、Win16、Win32、Linux版がある。
  • JOVE英語版 (Jonathan's Own Version of Emacs) - Jonathan PayneによるUnix系システム用の非プログラマブルなEmacs実装である。
  • MINCE英語版 (MINCE Is Not Complete Emacs) - Mark of the Unicorn英語版製のCP/M用のバージョンで後にDOSにも移植された。MINCEはFinal Wordへと進化し、さらにFinal WordはボーランドSprint (ソフトウェア)英語版となった。
  • Perfect Writer英語版 - CP/M実装であり、Kaypro IIおよびKaypro IVの最初期のリリースに付属のデフォルトワードプロセッサであるcirca 1982を含んだMINCEが由来。後にWordStarの代替品としてKaypro 10に提供された。
  • Freemacs英語版 - テキストマクロ拡張ベースの拡張言語を使うDOSバージョンであり、DOSの64KiBフラットメモリ限界に収まる。
  • GNU Zile - ZileはZile Is Lossy Emacs再帰的頭字語であった[40]が、Luaで再度書き直されてZile Implements Lua Editorsとして拡張機能を提供する。新しいZileには未だにZemacsと呼ばれるLuaによるEmacs実装が含まれている。Ziと呼ばれるvi実装も含まれる。
  • Zmacs英語版 - MIT LISPマシンとその子孫用で、ZetaLispで実装されている。
  • Climacs英語版 - Zmacsに影響された派生で、Common Lispで実装されている。
  • QEmacs - Fabrice Bellard英語版による、何千MiBものサイズになる巨大なファイルを迅速に編集可能でUTF-8が使用可能な小規模エディタ[41]
  • Epsilon英語版 - Lugaru SoftwareによるEmacsクローン。リリースにはDOS、Windows、Linux、FreeBSDmacOS、およびOS/2用のバージョンがバンドルされる。EpsilonはCの構文を持つLISPではない拡張言語を使用し、シングルタスクであるMS-DOSにおいて非常に高速な同時コマンドシェルバッファ実装を使っていた。
  • PceEmacs - SWI-Prolog英語版用のEmacsベースエディタ。
  • EmACT - 1986年のChristian JullienによるMicroEmacsのフォーク。EmACTのソースコードはSourceForgeから利用できる[42]
  • Amacs - EmacsのApple II ProDOSバージョン。Brian Fox英語版により6502アセンブラで実装された[43][44]
  • Hemlock - 元々Spice Lispで書かれていたが、後にCommon Lispとなった。CMU Common Lispの一部。Zmacsに影響された。後に(Helixとして)Lucid Common Lisp、LispWorksおよびClozure CL英語版プロジェクトによりフォークされた。Hemlockを提供することを狙いとした、Portable Hemlockプロジェクトも存在する。HemlockはいくつかのCommon Lisp実装で動作する。

Emacsエミュレーションを使うエディタ[編集]

機能[編集]

Emacsは主にテキストエディタでありテキスト要素を操作するよう設計されているが、LaTeXGhostscriptウェブブラウザといった外部のプログラムと通信することで、ワードプロセッサのように文書を整形したり印刷することができる。Emacsは、そして段落といった異なるセマンティック要素や、関数のようなソースコードの構成要素を処理したり様々な色を付けるためのコマンドを提供する。さらにEmacsは編集コマンドのユーザー定義バッチ用にキーボードマクロも提供する。

GNU Emacsはリアルタイム表示エディタであるので、編集する度にその編集がオンスクリーンで表示される。これは現在のテキストエディタの標準的振る舞いであるが、EMACSは初期の段階でこの機能を実装していたため、viのように既存のテキストに新しい編集を挿入するために個別のコマンドを実行する必要がなかった。

viが編集のための基本的な機能のみを搭載していたのに対し、Emacsはインクリメンタルサーチ・無制限のアンドゥ・ヤンク(ペースト)用のスタック・複数のバッファ・バッファ上でシェルを実行・補完・言語ごとのモードなど、エディタとして考えられる限りの機能を詰め込んでいる。VimではEmacsと同等のことができるようになっているが、バッファの使い方はEmacsより控えめである。

一般的アーキテクチャ[編集]

文書への文字列挿入などの基本的な編集操作を含むEmacsの機能はほとんど全て、LISPの方言で書かれた関数で行える。GNU Emacsで使われるLISP方言はEmacs Lispとして知られている。Emacs Lisp層はCで書かれた基本的なサービスとプラットフォームを抽象化した概念の、安定したコアの頂点に位置している。LISP環境の変数関数は、Emacsのリコンパイルや再起動をせずとも一時的に修正できる。

Emacsは追加属性を持つテキストを含んだバッファと呼ばれるデータ構造上で動作する。全てのバッファはその固有のポイント(カーソル位置)とマーク(ポイントと併せて、選択されたリージョンを区切るためのもう1つの位置)、(適用可能な場合)バッファが訪問しているファイル名、そして変数で編集や振る舞いを制御する現在のモードのセット(正確には1つの「主モード」[要説明]と複数の「副モード」[要説明]からなる)を保存している。対話的に実行可能なEmacs Lispコードをコマンドという。コマンドはキープレスなどのイベントにバインドでき、さらに名前でアクセスすることもできる。コマンドの中にはバッファから任意のEmacs Lispコードを評価するもの(例としてはeval-regioneval-bufferなど)もある。

バッファはウィンドウ内に表示される。ウィンドウは端末画面やGUIウィンドウのタイリングされた部分である(その部分はEmacs用語でフレームと呼ばれ、複数のフレームが可能)。特に設定されていない場合、ウィンドウにはスクロールバー、行番号、一番上にあるヘッダ行(通常この行にはバッファタイトルやファイル名が表示される)、そして一番下にあるモード行(通常この行には現在のモードとバッファにおけるポイントの位置のリストが表示される)が含まれる。

同じバッファ上で複数ウィンドウを開くことができるため、例えば1つの長いテキストから異なるパートを見ることができる。さらに複数バッファで同じテキストを共有できるので、例えば言語が混在したファイルで異なる主モードを利用することができる。M-x <mode name>により必要に応じてモードを手動で変更することもできる。

ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。ミニバッファは通常1行しかないが、ここでも通常のバッファと同じ移動・編集コマンドを使うことができる。

カスタマイズ[編集]

  • キーストロークをマクロに記録し、複雑な反復タスクを自動で再現できる。これは使用後に廃棄される各マクロによりアドホックベースに行われることが多い。ただしマクロを保存したり、後で呼び出すこともできる。
  • 起動時にEmacsは~/.emacsと名付けられたEmacs Lispスクリプト(近年のバージョンでは~/.emacs.el~/.emacs.d/init.elでもよい[47]。Emacsは最初に見つけたスクリプトを実行し、それ以外のスクリプトは無視する)を実行する。個人的なカスタマイズファイルは任意の長さや組み合わせでよいが、通常は以下のものが含まれる:
    • Emacsの振る舞いをカスタマイズするための、グローバル変数や関数呼び出しの設定。例としては(set-default-coding-systems 'utf-8)など。
    • 標準的なキーバインディングを上書きしたり、ユーザーにとって便利なのにデフォルトでバインドされていないキーを持つコマンド用ショートカットを追加するためのキーバインディング。例 : (global-set-key (kbd "C-x C-b") 'ibuffer)
    • Emacsの拡張の読み込み、有効化、および初期化(Emacsには多くの拡張が付属しているが、デフォルトでは極少数しか読み込まれない)。
    • 指定された時間に任意のコードを実行するイベントフックの設定。例としてはバッファの保存後に自動でソースコードをリコンパイルするafter-save-hookなど。
    • 任意の複数ファイル実行。通常は長すぎる設定ファイルを管理できるように均等な部分に分割するためのもの(これらの個人的スクリプト用の伝統的な場所は~/.emacs.d/~/elisp/である)。
  • 「カスタマイズ」拡張により、ユーザーは~/.emacsに変数を設定するよりもユーザーフレンドリーな方法で、Emacs内部からインタラクティブなカラースキームのような設定プロパティを設定できる。これは検索、説明やヘルプ文、複数選択の入力、デフォルトへのリバート、再起動を必要としない起動中のEmacsインスタンス修正や、他のプログラムにおける好みの機能と類似した他の機能を提供する。カスタマイズされた値は~/.emacs(または他の指定ファイル)に自動で保存される。
  • テーマはフォントや色の選択に影響を与え、Emacs Lispファイルで定義されカスタマイズ拡張で選択される。

Emacsは、プログラマが単一インターフェースでコードを編集、コンパイルデバッグするような統合開発環境 (IDE) としても使うことができる。

このような編集機能にとどまらず、Emacs LispはTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。外部プロセスとして、UNIXのプロセスを起動する場合、Emacs はプロセスのフロントエンドプロセッサとして動作する。例えば、LISP を Emacs から起動すると、閉じカッコ")"がキーボードから入力された時それに対応する開きカッコ"("をハイライトするようなマクロを組んでおくことで、カッコの確認をしながら入力が可能である[48]

ライブラリーは、インターネットで見付けることができる。 新しいライブラリーを投稿するためのUsenetニュースグループgnu.emacs.sourcesまである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。

GNU Emacs 24では、パッケージマネージャが内蔵された。公式のパッケージアーカイブであるGNU ELPA(Emacs Lisp Package Archive)[49]のほか、いくつかのアーカイブを扱うことができる。

自己文書化[編集]

Emacsには最初から各個別のコマンド、変数、内部関数の説明文字列を表示する、強力なhelpライブラリが付属していた。このため通常の機能や現在の状態の情報をユーザーに提供するので、Emacsは自己説明的だと評される。各関数には説明文字列が含まれていて、要求に応じてユーザーに表示される。その後関数に説明文字列をつける習慣は、LISP、JavaPerl、およびPythonといったさまざまなプログラミング言語に広まった。このヘルプシステムにより、ユーザーは組込みのライブラリや追加されたサードパーティーのライブラリのどちらからも各関数用の実際のヘルプコードを取得できる。

Emacsには組み込みのチュートリアルもある。編集ファイルを指定せずEmacsを起動すると、簡単な編集コマンドの実行方法とチュートリアルを呼出す方法についての説明が表示される。このチュートリアルはStuart Cracraftとストールマンによって作られたものである。

GNU Emacsには組込みの説明文字列のほかにも、ストールマンの執筆したGNU Emacs Manualの電子コピーがついており、組込みのInfoブラウザで閲覧することができる。電子版のほかに、3種のマニュアルがフリーソフトウェア財団から書籍のかたちで刊行されている。

XEmacsの場合、ソフトウェア本体と同時にGNU Emacs Manualからフォークした同様のマニュアルがある他、Bill Lewis、ストールマン、Dan Laliberte共著のEmacs Lisp Reference Manual、Robert Chassel著のProgramming in Emacs Lispも含まれている。

  • texinfoはGNU Emacsの標準ドキュメントシステムであり、Emacsのマニュアルはtexinfoでドキュメント化されている。texinfoはTeXをベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメントinfoとして使用することも、TeXを経由して組版されたペーパドキュメントとしても利用することができる。

文化[編集]

Emacs教会[編集]

Emacs教会の聖人、St IGNUciusとしてのリチャード・ストールマン

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

ストールマンは冗談で自身をEmacs教会の聖人 (英語: saint) であるSt IGNUciusとしている[53]

Emacs小指[編集]

Emacsの修飾キーへの強い依存が反復性過労障害英語版となるというフォークロアはEmacs小指 (英語: Emacs pinky) と呼ばれる[54]

ユーザーは様々なアプローチでEmacs小指に対処してきた。ソフトウェア側の手段には以下のようなものがある[55]:

  • CapsLockキーをコントロールキーの代わりにするようにキーレイアウトをカスタマイズする[56]。類似のテクニックにはCapsLockキーを追加のコントロールキーに定義したり、コントロールキーとメタキーを代わりにする。このテクニックもEmacs小指に対して特に推奨されている。
  • EmacsにXwritsや組み込みのtype-break-modeといった、ユーザーに定期的に休息を取らせるようなソフトウェアを入れる。
  • 最初に文字を尋ねてから、カーソルの動きに対応したアクセスキーでその文字が出現するようにする、ace-jump-mode[57]のようなパッケージや、類似の階層ナビゲーションを提供するelisp拡張を使う。
  • 先進的なVimエミュレーション層のevil-mode
  • Vimのように修飾キーなしでEmacsコマンドを入力するためのモードによるアプローチを提供するgod-mode
  • Spacemacsが提供するカスタマイズされたキーレイアウトの使用。spacemacsは制御シーケンス用の主要なキーとしてスペースキーを使うプロジェクトであり、evil-modegod-modeも二つとも重点的に組み込んでいる[58]
  • キーの組み合わせのキーシーケンスを変えるスティッキーキー英語版の使用[59]
  • 基本的なテキスト編集や、さらに進んだ機能のためのEmacsスキーム用にviキーレイアウトを使えるようにする、Emacsの組み込みviper-modeの使用[60]
  • スペースキーのようなより快適にアクセスできるキーへのもう1つの役割の付与。もう1つの役割を割り当てられたキーは、他のキーと組み合わせて押すことでコントロールキーとして機能する。エルゴノミクスキーボードや、日本語キーボードのようにスペースキーに隣接するより多くのキーを持つキーボードを使う。日本語キーボードはメタキーシフトキー以外の修飾キーの親指操作が可能である[61]
  • 制限されたキーバインディングの人間工学サブセットを使ったり、M-x <command-name>をタイプして他の機能にアクセスする。M-x自体もリバウンドできる。
  • 音声入力によるEmacs操作。
  • Emacsと相互作用せずに毎日のタスクを行うために十分なElispを書く。

ハードウェアによる解決法としては、修飾キーを親指で簡単に操作できるKinesis Contoured Keyboardや、手の平で押せるようキーボードの両側に対称的に手の平で押すことができる巨大な修飾キーを配置したMicrosoft Natural keyboard英語版がある[54]。フットペダルも利用できる。

Emacsが開発されたスペースカデットキーボードは、スペースキーに隣接したコントロールキーが巨大で親指が届き易かった[62]

用語[編集]

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

問題点[編集]

  • viなどにくらべて起動が遅い。ただし、Emacsは立ちあげっぱなしにしておく使い方をすることが可能であり、長い起動時間は問題にならないという反論もある。
  • Emacsではファイラもオプションの設定画面も通常のエディタ画面と同じ操作が可能であるという特徴があるが、ダイアログボックスなどを使ったGUIに慣れたユーザーにとって、このようなUIはなじみにくい。
  • カスタマイズ可能な機能の数が極端に多く、何を設定したらいいのかわかりづらい。
  • Emacs Lisp により拡張機能が作りやすいため、類似した機能を実現した多数の実装が乱立しやすい。

起動の遅さ[編集]

EmacsのLispベースの設計の欠点は、Lispコードの読込み、解釈 に伴う性能への負荷である。 Emacsが最初に実装されたシステムでは大抵、競合するテキストエディタよりかなり遅かった。このことをジョークにした、頭文字による略語がEMACSになる文がいくつか存在する(このようなジョークは他にも存在し、例えばユーザー・インターフェースをネタにした (Escape Meta Alt Control Shift) などがある)。

  • Eight Megabytes And Constantly Swapping[64][65](8MBでちょくちょくスワップ - 8MBのメモリーが広かった時代の話)
  • Emacs Makes A Computer Slow(Emacsはコンピュータを遅くする)
  • Eventually Mallocs All Computer Storage(結局コンピュータの全記憶装置をmallocする)
  • Eventually Makes All Computers Sick(結局全コンピュータをビョーキにする)

ただし、最近のコンピュータは十分速くなり、以前言われていたほどEmacsを遅いと感じることはめったになくなった。実際、Emacsは最近のワードプロセッサよりも素速く立ち上がる。

さらに、GNU Emacs 23以降はEmacsをサーバープログラムとして立ち上げておくデーモンモードが追加された。この場合、Emacs本体はOS起動時に自動的に一度起動するだけなので、速度は問題にならない。

関連項目[編集]

注釈[編集]

  • Ciccarelli, Eugene (1978). An Introduction to the Emacs Editor. Cambridge, Massachusetts: MIT Artificial Intelligence Laboratory. AIM-447  PDF
  • Stallman, Richard M. (1981) [1979]. EMACS: The Extensible, Customizable, Self-Documenting Display Editor. Cambridge Massachusetts: MIT Artificial Intelligence Laboratory. AIM-519A  PDF HTML
  • Stallman, Richard M. (2002). GNU Emacs Manual (15th ed.). GNU Press. ISBN 1-882114-85-X. https://www.gnu.org/software/emacs/manual/ 
  • Stallman, Richard M. (2002年). “My Lisp Experiences and the Development of GNU Emacs”. 2007年2月1日閲覧。
  • Chassel, Robert J. (2004). An Introduction to Programming in Emacs Lisp. GNU Press. ISBN 1-882114-56-6. https://www.gnu.org/software/emacs/emacs-lisp-intro/ 
  • Glickstein, Bob (April 1997). Writing GNU Emacs Extensions. O'Reilly & Associates. ISBN 1-56592-261-1 
  • Cameron, Debra; Elliott, James; Loy, Marc; Raymond, Eric; Rosenblatt, Bill (December 2004). Learning GNU Emacs, 3rd Edition. O'Reilly & Associates. ISBN 0-596-00648-9. http://www.oreilly.com/catalog/gnu3/ 
  • Finseth, Craig A. (1991). The Craft of Text Editing -or- Emacs for the Modern World. Springer-Verlag & Co. ISBN 978-1-4116-8297-9. http://www.finseth.com/craft/ 
  • Thompson, Adrienne G. (2009年). “MACSimizing TECO”. 2012年2月26日閲覧。

脚注[編集]

注釈[編集]

  1. ^ 他の共同制作者としてリチャード・ストールマンがクレジットされることが多いが、ダニエル・ウェインレブ英語版は「(TECOベースである)オリジナルのEmacsはガイ・L・スティール・ジュニアとデイビット・ムーンが開発・設計した。彼らがEmacsを動くようにした後で、MIT AI研における標準テキストエディタとして確立されていき、ストールマンがそのメンテナンスを引き継いだ」と記している。ムーン自身は「私が覚えている限り、それは全て真実だ。しかし公正を期して言えば、ストールマンがガイと私からEmacsを『解放した』後、ストールマンがEmacsを大幅に改善したと言わなければならない」と応えた。以下を参照 : ウェインレブ, ダニエル (November 11, 2007), “Rebuttal to Stallman’s Story About The Formation of Symbolics and LMI”, Dan Weinreb's blog: software and innovation, オリジナルのJanuary 1, 2009時点におけるアーカイブ。, https://web.archive.org/web/20090101103828/http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi 

出典[編集]

  1. ^ /EmacsReleaseDates”. 2017年11月1日閲覧。
  2. ^ a b Zawinski, Jamie (2005年6月21日). “Emacs Timeline”. 2015年8月11日閲覧。
  3. ^ A Tutorial Introduction to GNU Emacs”. 2017年5月15日閲覧。 “For an editor to be called "emacs" the main requirement is that it be fully extensible with a real programming language, not just a macro language.”
  4. ^ GNU Emacs Pocket Reference”. 2017年11月1日閲覧。 “GNU Emacs is the most popular and widespread of the Emacs family of editors.”
  5. ^ 最初の声明”. FSF. 2023年9月27日閲覧。
  6. ^ Initial Announcement”. FSF. 2023年9月27日閲覧。
  7. ^ GNU Emacs Manual”. GNU Emacs Manual. FSF. 2012年11月24日閲覧。
  8. ^ Introducing Elfeed, an Emacs Web Feed Reader”. 2016年6月12日閲覧。
  9. ^ Amusements”. 2017年11月1日閲覧。 “Finally, if you find yourself frustrated, try describing your problems to the famous psychotherapist Eliza. Just do M-x doctor.”
  10. ^ A Guided Tour of Emacs”. 2016年6月12日閲覧。 “Some users find that they can do almost all of their work from within Emacs.”
  11. ^ Greenberg, Bernard S. (1979). Multics Emacs: The History, Design and Implementation. http://www.multicians.org/mepap.html 2016年6月12日閲覧。 
  12. ^ GNU Emacs FAQ”. 2016年6月12日閲覧。
  13. ^ a b c Adrienne G. Thompson. “MACSimizing TECO”. 2016年6月12日閲覧。
  14. ^ A history of Emacs”. XEmacs Internals Manual (2006年12月11日). 2007年8月22日閲覧。
  15. ^ Allombert, Bill. “Debian Popularity Contest”. Editors report. Debian. 2011年11月22日閲覧。
  16. ^ The 10 oldest, significant open-source programs”. 2017年11月1日閲覧。
  17. ^ Raymond, Eric S.; Cameron, Debra; Rosenblatt, Bill (1996). Learning GNU Emacs, 2nd Edition. Sebastopol, CA: O'Reilly. pp. 408–409. ISBN 1-56592-152-6. https://books.google.com/books?id=a_lea3-w-1kC&pg=PA408&dq=bucky+keyboard#PPA408,M1 
  18. ^ Arthur Samuel (1980年3月). “Essential E”. 2011年8月1日閲覧。[リンク切れ]
  19. ^ EMACS vs. vi: The endless geek 'holy war'”. 2016年6月12日閲覧。 “"EMACS as such actually started out as a standards project," emails Guy Steele”
  20. ^ Stallman, Richard M. (1987年). “The EMACS Full-Screen Editor”. GARB (Lysator, Linköping University) (Maj 1987): pp. 8–11. http://www.lysator.liu.se/history/garb/txt/87-1-emacs.txt 2007年9月14日閲覧。. 
  21. ^ The Emac Bolio Name Koan”. David G. Wiseman: Stories of Computer Folklore (1992年2月10日). 2016年6月12日閲覧。 “A cocky novice once said to Stallman: 'I can guess why the editor is called Emacs, but why is the justifier called Bolio?'. Stallman replied forcefully, Names are but names, Emack & Bolio's is the name of a popular ice cream shop in Boston town. Neither of these men had anything to do with the software.' His question answered, yet unanswered, the novice turned to go, but Stallman called to him, 'Neither Emacs nor Bolio had anything to do with the ice cream shop, either.'”[リンク切れ]
  22. ^ a b Stallman, Richard (26 March 1981). EMACS: The Extensible, Customizable, Self-Documenting, Display Editor (Technical report). MIT AI Lab. AI Memo 519a. 2022年6月7日閲覧
  23. ^ Leigh Klotz (2007年8月29日). “email quoted in "Be Careful What You Joke About"”. The New York Times. http://pogue.blogs.nytimes.com/2007/08/29/be-careful-what-you-joke-about/ 2010年5月1日閲覧。 
  24. ^ Comment by ZWEI's author Dan Weinreb”. 2016年6月12日閲覧。 “I wrote the second Emacs ever: the Lisp machine implementation, whose spec was "do what Stallman's PDP-10 (original) Emacs does", and then progressed from there. There's just a whole LOT of it. It took me and Mike McMahon endless hours to implement so many commands to make ZWEI/Zmacs.”
  25. ^ RMS Lecture at KTH: Japanese
  26. ^ プロプライエタリソフトウェアとは、ソースコードが公開されていないソフトウェアで、プログラムを自由に配布や改変、逆コンパイルをすることができないものを指す用語である。
  27. ^ A History of Emacs”. 2016年6月12日閲覧。
  28. ^ emacs-devel msg 00872 (2014-09-29)”. 2016年6月12日閲覧。 “In retrospect 24.3 should have been named 25.1 and 24.4 should have been named 26.1. The .N thingy should really be kept only for bug-fix releases and neither of 24.3, 24.4, nor the previously planned 24.5 are bug-fix releases.”
  29. ^ Stoll, Clifford (1988). “Stalking the wily hacker”. Communications of the ACM 31 (5): 484?497. doi:10.1145/42411.42412 
  30. ^ New Git repository is up.”. 2016年6月12日閲覧。
  31. ^ Re: Looking for a new Emacs maintainer or team”. gnu.org Mailing List. 2008年2月23日閲覧。; see also "Stallman on handing over GNU Emacs, its future and the importance of nomenclature"
  32. ^ Emacs gets new maintainer as Richard Stallman signs off”. 2017年11月1日閲覧。
  33. ^ Ugliest…repository…conversion…ever”. 2016年6月12日閲覧。 “twenty-nine years of continuous development by no fewer than 579 people”
  34. ^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs”. 2012年10月2日閲覧。
  35. ^ XEmacs is Dead. Long Live XEmacs!”. 2016年6月12日閲覧。
  36. ^ FrontPage - Meadow WikiArchived 2012-02-16 at the Wayback Machine.
  37. ^ SXEmacs Website”. Sxemacs.org (2009年10月11日). 2009年11月8日閲覧。
  38. ^ http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/
  39. ^ NotGNU Emacs Editor (Author's Official Download Site)”. Notgnu.org (2004年1月15日). 2009年11月8日閲覧。
  40. ^ Zile home page”. 2016年6月20日閲覧。
  41. ^ QEmacs Homepage”. Fabrice.bellard.free.fr. 2009年11月8日閲覧。
  42. ^ Christian Jullien. (1986年). “EmACT on sourceforge”. Christian Jullien. 2011年12月31日閲覧。
  43. ^ AMACS source”. 2016年6月12日閲覧。
  44. ^ apple2.org”. 2016年6月12日閲覧。
  45. ^ Cocoa text system”. 2016年6月12日閲覧。
  46. ^ SublemacsPro plugin for Sublime Text”. 2016年6月12日閲覧。
  47. ^ Init file”. 2016年6月20日閲覧。
  48. ^ 村井純、井上尚司、砂原秀樹『プロフェッショナルUNIX』株式会社アスキー、1986年1月15日、243頁。ISBN 4-87148-184-0 
  49. ^ https://elpa.gnu.org/packages/
  50. ^ Saint IGNUcius - Richard Stallman”. 2015年1月29日閲覧。
  51. ^ The unabridged selective transcript of Richard M Stallman's talk at the ANU”. 2015年1月29日閲覧。
  52. ^ alt.religion.emacs newsgroup
  53. ^ Saint IGNUcius - Richard Stallman
  54. ^ a b How To Avoid The Emacs Pinky Problem”. Xahlee.org. 2009年11月8日閲覧。
  55. ^ EmacsWiki: Repeated Strain Injury”. 2015年1月29日閲覧。
  56. ^ Moving The Ctrl Key”. EmacsWiki. 2009年11月8日閲覧。
  57. ^ EmacsWiki: Ace Jump”. 2015年1月29日閲覧。
  58. ^ Spacemacs”. 2015年4月20日閲覧。
  59. ^ BayleShanks (2009年10月7日). “Sticky Modifiers”. EmacsWiki. 2009年11月8日閲覧。
  60. ^ Viper Mode”. EmacsWiki. 2009年11月8日閲覧。
  61. ^ At Home Modifier by Evdev”. 2015年4月14日閲覧。
  62. ^ Why Emacs's Keyboard Shortcuts are Painful”. 2016年6月12日閲覧。
  63. ^ VAXen”. Catb.org. 2009年11月8日閲覧。
  64. ^ GLYN MOODY 小山祐司監訳『ソースコードの反逆』株式会社アスキー、2002年6月11日、288頁。 
  65. ^ Some funny acronym expansions of Emacs”. 2021年11月7日閲覧。

外部リンク[編集]