トップQs
タイムライン
チャット
視点

Emacs

拡張性を特徴としたテキストエディタのファミリー ウィキペディアから

Emacs
Remove ads

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が製作され、その開発が2025年現在も続いている。

概要 開発元, 初版 ...

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]

Remove ads

歴史

要約
視点
Thumb
GNU EmacsにおけるCソースコードの編集
Thumb
GNU EmacsからC++コードを編集してコンパイル
Thumb
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への貢献者には、このほかケント・ピットマン、Earl Killian、Eugene Ciccarelliらがいる。1979年までに、EmacsはMIT人工知能研究所やMITコンピュータ科学研究所で使われる主要エディタとなった[23]

その他の初期実装

その後、他のコンピュータシステム用に多くのEmacs風エディタが書かれた。これらにはMichael McMahonとダニエル・ウェインレブ英語版らが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年にはハネウェルケンブリッジ情報システム研究所でバーナード・グリーンバーグ英語版によりMultics Emacsがほぼ全てをMultics MACLISPを用いて書かれ、その後リチャード・ソリー英語版と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

Thumb
テキスト端末で動く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エディタのデファクトスタンダードとなった。マルクス・ヘスは彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した[29]

Emacsは、チューリング完全な言語を小さい中央コアの頂点で起動する階層型アーキテクチャを使用する。ストックされたEmacs頒布の約3/4(24.4現在では1611kLOCのうち1266)がEmacs Lisp拡張言語で書かれており、一度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

Thumb
GNU/Linux上のXEmacs 21.5

1991年初頭、GNU Emacs 19の初期α版をベースとしてジェイミー・ザウィンスキー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エディタ

Thumb
Rubyのソースコードを編集中の、OpenBSD 5.3のタイニーEmacs風エディタmg英語版
Thumb
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) - マーク・オブ・ザ・ユニコーン製の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バージョン。ブライアン・フォックスにより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エミュレーションを使うエディタ

  • Yiフランス語版 - Haskellで書かれHaskellで拡張可能なエディタで、Emacsのエミュレーションモードがある。
  • Joe's Own Editor英語版 - jmacsと呼ばれるEmacsキーバインディングをエミュレートする。
  • JED英語版 - Emacsのエミュレーションモードがある。
  • Eclipse - Emacsキーバインディングのセットを提供する。
  • IntelliJ IDEA - Emacsキーバインディングのセットを提供する。
  • Epsilon英語版 - Emacsエミュレーションをデフォルトとし、viモードをサポートする。
  • Cocoa text system英語版 - Emacsと同じ用語を使用し、Emacs操作バインディングを多数理解する。これはネイティブユーザインタフェースがコントロールキーの代わりに(Superキーと等価な)コマンドキーを使うためである[45]
  • Sublime Text - SublemacsProプラグインによりEmacsの振る舞いをいくつかエミュレートできる[46]
  • Visual Studio Emacs Keys - Visual StudioユーザーにEmacsキーキーバインディングのセットを提供する。
  • GNU Readline - 標準的なEmacs操作のキーバインディングを理解するラインエディタで、viエミュレーションモードも存在する。
  • GNOME Builder英語版 - Emacs用エミュレーションモードを搭載している。
Remove ads

機能

要約
視点

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を経由して組版されたペーパドキュメントとしても利用することができる。
Remove ads

文化

要約
視点

Emacs教会

Thumb
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_ergonomic_keyboards英語版がある[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起動時に自動的に一度起動するだけなので、速度は問題にならない。

Remove ads

関連項目

注釈

  • 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日閲覧。
Remove ads

脚注

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads