Emacs

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Emacs
Emacs Dired buffers.png
GNU Emacsにおける複数のDired英語版バッファの編集
開発元 リチャード・ストールマンガイ・スティール・ジュニア
初版 1976年(39–40年前)[1]
プログラミング言語 LISP, C
対応OS TECOクロスプラットフォームUnix系
種別 テキストエディタ
テンプレートを表示

Emacs (イーマックス、[ˈmæks])およびその派生物は、その拡張性を特徴としたテキストエディタのファミリーである。Emacsの中で最も広く使われている派生物はGNU Emacsであるが、そのマニュアルにはEmacsを「the extensible, customizable, self-documenting, real-time display editor」(拡張およびカスタマイズが可能で、自己文書化を行い、リアルタイム表示を行うエディタ)であると説明されている[2]。最初のEmacs開発は1970年代中盤に開始され、2016年現在現在も続いている。

Emacsは2000を超える組み込みコマンドを持ち、ユーザーは作業自動化のためにこれらのコマンドをマクロと組み合わせることができる。EmacsはLISPプログラミング言語の方言であるEmacs Lisp (ELisp) でユーザーや開発者が新しいコマンドを書けるようにしているため、深い拡張性を提供する。Emacsの拡張機能は電子メールファイルアウトライン、およびRSSフィードを管理するために書かれている[3] 。ユーザーの中にはEmacs内部からテキスト編集だけでなくほとんど全ての作業を行うことができることに気づいた者もいる[4]

原典であるEMACSは1976年リチャード・ストールマンガイ・L・スティール・ジュニアによりTEXOエディタ用のEditor MACroSのセットとして書かれたものであり[5][6][1][7]、TECOマクロエディタの概念にインスパイアされている[8]

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

Emacsはviと並びUNIX文化における伝統的なエディタ戦争の主要な当事者の2つである。Emacsとviは共に未だに現役である古来のアプリケーションの中では最古の部類である。

歴史[編集]

GNU Emacs由来のC++コードを編集してコンパイルした

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

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

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

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

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

「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コンピュータ科学研究所で使われる主要エディタとなった[15]

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

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

GNU Emacs[編集]

GNU Emacs
EmacsIcon.svg
GNU Emacs 23.1.1.png
GNU Emacs 23.1.1
開発元 GNUプロジェクト
最新版 24.5 / 2015年4月10日(17か月前) (2015-04-10
対応OS マルチプラットフォーム
種別 テキストエディタ
ライセンス GPL
公式サイト GNU Project
テンプレートを表示
テキスト端末で動く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にスキップした[18]。最初の公開リリースであるバージョン13は1985年3月に完成した。2014年9月にGNU emacs-develメーリングリストで、GNU Emacsにラピッドリリース戦略を採用し、将来的にバージョン番号をより迅速に増やしていくことが発表された[19]

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

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

リチャード・ストールマンは長らくGNU Emacsの主要な管理者を務めていたが、時代と共にその役目から退いていった。2008年から管理はStephan MonnierとChong Yidongに引き継がれている[22]。2014年の時点で、GNU Emacsはその歴史を通じて579人によりコミットされてきた[23]

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

バージョン リリース年 主要な更新
18.41 1987
19.28 1994 フレームのサポート、色・フォントが変更可能に
20 1997 Mule の取り込み、カスタマイズ機能
21 2001 GUIの大幅な変更、ツールバー
22 2007 Cygwin、OS X (Carbon) 対応。多くのモードを標準で装備。
23 2009 TrueType などのフォントに対応。内部UTF-8化。OS X (Cocoa) 対応。
24 2012 パッケージ管理、テーマ、BIDIサポート、Lisp の静的スコープ。

XEmacs[編集]

GNU/Linux上のXEmacs 21.5

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

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

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

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

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

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

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

  • MicroEMACS英語版 - Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。リーナス・トーバルズの使うエディタでもある[28]
  • mg英語版 - 当初はMicroGNUEmacsといわれていたが後にmg2aといわれるようになった。MicroEMACSのパブリックドメインなフォークでありより密接にGNU Emacsを似ていることを意図された。OpenBSDでは既定でインストールされる。
  • NotGNU[29] - 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再帰的頭字語であった[30]が、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が使用可能な小規模エディタ[31]
  • Epsilon英語版 - Lugaru SoftwareによるEmacsクローン。リリースにはDOS、Windows、Linux、FreeBSDOS X、およびOS/2用のバージョンがバンドルされる。EpsilonはCの構文を持つLISPではない拡張言語を使用し、シングルタスクであるMS-DOSにおいて非常に高速な同時コマンドシェルバッファ実装を使っていた。
  • PceEmacs - SWI-Prolog英語版用のEmacsベースエディタ。
  • EmACT - 1986年のChristian JullienによるMicroEmacsのフォーク。EmACTのソースコードはSourceForgeから利用できる[32]
  • Amacs - EmacsのApple II ProDOSバージョン。Brian Fox英語版により6502アセンブラで実装された[33][34]
  • Hemlock英語版 - 元々Spice Lisp英語版で書かれていたが、後にCommon Lispとなった。CMU Common Lispの一部。Zmacsに影響された。後に(Helixとして)Lucid Common Lisp、LispWorks英語版およびClozure CL英語版プロジェクトによりフォークされた。Hemlockを提供することを狙いとした、Portable Hemlockプロジェクトも存在する。HemlockはいくつかのCommon Lisp実装で動作する。

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

ライセンス[編集]

CとEmacs Lisp両方を含むソースコードは、GNU General Public License (GPL) 規約の下で調査、修正、再頒布のため自由に入手できる。 古い版のGNU Emacsの文献は、修正版の複製にあるテキストの挿入を要件とする個別のライセンスの下でリリースされた。 たとえば、GNU Emacs user's manualは、GNU Emacsの入手方法と、リチャード・ストールマンの政治的エッセー「GNU宣言」を含んでいた。 フォーク時に古いGNU Emacsのマニュアルを継承したXEmacsのマニュアルも同じライセンスである。 一方、新しい版のGNU Emacsの文献は、GNU Free Documentation Licenseを用い「不変部分」を利用して、同じ文書の包含を要求しつつ、マニュアルがGNU Manualsであることも宣言している。

GNU Emacs(や他のGNUパッケージ一般)では、コピーレフトの強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、著しい量のコード寄贈は著作権者が自身の著作権を適切に放棄または委譲したときだけ受理する方針になっている。 この方針の唯一の例外はMule(MULtilingual Extension、Unicodeや、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった[37] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。

この強制は、GNU Emacsのフリーソフトウェア・ライセンス、つまりGNU General Public Licenseと、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえている。

機能[編集]

Emacsは主にテキストエディタでありテキスト要素を操作するよう設計されているが、LaTeXGhostscriptウェブブラウザといった外部のプログラムと通信することで、ワードプロセッサのように文書を整形したり印刷することができる。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-regioneval-bufferなど)もある。

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

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

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

基本的な操作[編集]

基本的な操作は、今日広く使われているEmacs実装である最近のEmacs、すなわちGNU EmacsとXEmacsについて記述する。GNU Emacsからのフォークとして始まったXEmacsとその後継版は、GNU Emacsとおおむね互換性がある。

カーソル移動などは矢印キーをつかって行うこともできるが、主要な大部分の操作は、ControlキーMetaキー(Windows では通常Altキーを使用する)・Superキーなどを押し下げたまま別のキーを打鍵することで行うことができる。viと比較した場合、viが編集モード、カーソル移動モードの2つのモードを持つのに対し、Emacsはそのようなモードを持たない。ただしEmacs上でviの操作をエミュレートするエミュレータもいくつかある (vip-mode, viper-mode) 。

なお、EmacsではControlキーを押しながら「a」を押す事を「C-a」と表記し、Metaキーを押しながら「a」を押す事を「M-a」と表記する。本稿でも以下この表記を用いる。

キーの多くは英語の頭文字にしたがって割り振られているので、どのキーがどの操作に対応しているのかを比較的簡単に覚えることができる。たとえばカーソルを右、左、上、下に動かす操作はそれぞれC-f、C-b、C-p、C-nであるが、これはそれぞれforward、backward、previous、nextの略である。

Emacsでは、2ストローク以上のキー操作も多数用意している。たとえば「C-xC-s」(=Controlを押し下げたままx、sと打鍵する)でファイルを保存する。キーの割り当てられていないコマンドも多くあり、それらは M-x を押してからコマンドを入力することで実行する。

なお、C-h t(英語)あるいはC-h T(翻訳)でチュートリアルを表示させることができ、そのまま操作方法を学習することができる。

グラフィカル・インターフェースでEmacsを使っているとき、キーボードの代わりにメニューバーやツールバーからもコマンドを呼び出せる。しかし、経験豊富なEmacsの利用者には、必要なキー操作をいったん記憶してしまえばより速く操作でき便利なキーボードからのコマンド呼び出しのほうが好まれている。

全ての編集コマンドは、実際はEmacs Lisp環境の関数を呼び出す。文字aを挿入するコマンドのaをたたいただけでも、関数を(この場合self-insert-commandを)呼び出す。一部のEmacsコマンドは、外部プログラム(つづりのチェックにispellや、プログラムのコンパイルにgcc)を呼び出し、プログラムの出力を解析し、Emacsに結果を表示することで、機能している。

編集モード[編集]

「主モード(メジャーモード、major-mode)」という編集モードにEmacsが入ることで、編集するテキストの種類に応じて振舞いを適応させる。 普通のテキスト・ファイル、多くのプログラミング言語ソースコードHTML文書、TeXLaTeXの文書や、多くの他種のテキスト用に主モードが定義されている。 各主モードはEmacs Lisp変数を調節するなどして固有の型のテキストに都合よく振る舞うように作られている。 特に、キーワードコメントなどの表示にさまざまな書体や色を用いた構文の強調をしばしば実装する。 主モードは、専用の編集コマンドも提供する。たとえばプログラミング言語用の主モードはしばしば、関数の先頭や末尾へ飛ぶコマンドを定義する。

ファイルを16進で表示してバイナリ編集できる hexl-mode などの特殊なモードもある。

「副モード(マイナーモード、minor-mode)」でEmacsの振舞をもっとカスタム化することもできる。 たとえば、Cプログラミング言語の主モードは、人気の字下げスタイルそれぞれにさまざまな副モードを定義している。 主モードは2つ以上同時に使用できないが、副モードは同時に複数を有効にできる。

カスタマイズ[編集]

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

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

このような編集機能にとどまらず、Emacs LispはTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。

その他様々な機能を持つライブラリーが存在する。

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

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

移植性[編集]

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

自己文書化[編集]

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の日本語版としてNemacs (Nihongo Emacs) が、多国語対応版としてMule (MULtilingual Enhancement to GNU Emacs) が開発された。NemacsおよびMuleは電子技術総合研究所(電総研:現在の産業技術総合研究所)の半田剣一らによるものである。

Mule[編集]

Muleはアラビア文字などの右から左へ記述する文字をふくめた複数の文字集合の1ファイル中での混在と編集が可能であり、中国や、タイ等多くの国や地域で規格化された文字集合をサポートするなど、先進的かつ実用的な多用字系処理系であった(しばしば多言語処理系ともいわれる)。

日本語 GNU Emacs[編集]

日本語 GNU Emacs (Nemacs:Nihongo Emacs) は東京大学平野聡大阪大学東田学によって、フリーなDOSエクステンダのgo32/djgppを用いてMS-DOS上に移植され(後に emx にも対応)、demacsと呼ばれた。

国際化の現状[編集]

GNU Emacs 21 より Mule のコードが取り込まれており、多数の自然言語で書かれているテキストの編集をサポートしている。多種のアルファベット、用字系 (script) 、書写体系 (writing system) 、文化慣習のサポートがある。 ispellといった外部プログラムを呼び出すことで、多数の言語のつづりをチェックできる。 UTF-8を含む多数の符号化体系をサポートしている。 XEmacs 21.4版と21.5版には、部分的なUnicodeのサポートが含まれている。 内部的にはEmacs固有の符号化を用いていたが、上記の半田剣一らの努力により、Emacs 23 では内部で UTF-8 を使うようになり、さらに基本多言語面以外の文字も使えるようになった。また、Emacs 24 では左から右へ書く文字と右から左へ書く文字を混在して書くことができるようになった。

Emacsのユーザー・インターフェースは英語で、初心者用チュートリアルを除き、他の言語に翻訳されたことはない。

視力障害や全盲の利用者のため、音声フィードバックだけでエディタを使えるようになるEmacspeakという下位システムがある。

GUIへの対応[編集]

Emacsはもとは文字端末での利用を前提に設計されていたものであるが、少なくともGNU Emacsバージョン18ではX Window Systemアプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の端末エミュレータを立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。このため XEmacs などのプロジェクトが生まれたが、GNU Emacs 自身も徐々にGUIに対応していった。

Emacsバージョン21およびXEmacsではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。また、画像を表示させることもでき、ImageMagickと連携してさまざまな画像ファイルを開くことができるようになった。

2009年の Emacs 23 ではフォントの扱いが大きく変わり、TrueTypeフォントが自由に使えるようになった。

Windowsへの移植[編集]

Win32 で動く Emacs を NTEmacsとよぶこともある。

現在はGNU Emacs自体をVisual C++またはCygwinでコンパイルすることが可能である[40]。バイナリ形式でも配布されているので、zipを展開するだけでWindows上でEmacsが使用可能である[41]

日本では、かつて宮下尚によりWin32アプリケーションとしてMule 2.3をベースにしたMule for Win32、そしてEmacs 20をベースにしたMeadowが、Windows上に移植・開発され、広く使われていた。2004年7月7日にはGNU Emacs 21をベースにしたMeadow2がリリースされたが、Emacs 22 以降には対応していない。一方、上記のバイナリは日本語IMEからの入力に問題があるため、パッチをあててCygwinでビルドしたgnupack[42]が使われるようになってきている。

SKKのようなEmacs上の入力システムを使い、Windows上の日本語IMEを使用しない場合は、公式のバイナリをそのまま使えばよい。

OS Xへの移植[編集]

OS X は最初から Emacs がインストール済みだが、標準ではGUIが使えない。銭谷誠司が Emacs 22 を OS X の Carbon API を使って GUI 対応した Carbon Emacs が使われてきたが、Emacs 23 からは GNU Emacs そのものが Cocoa API を使った GUI で動くようになり、configure に --with-ns (ns は NEXTSTEP)オプションをつけるだけで GUI で動く Emacs をソースからビルドすることもできる。そのほか、GUIをAquaとしたAquamacsなど、多数のバリエーションが存在する。

OS X では、コントロールキーのほかにコマンドキーオプションキーが用意されており、そのどちらかをMetaキー・もう片方をSuperキーとして使うことができる。Superキーの割り当ての一部は OS X の標準のキー割り当てとよく似ている(s-x でカット・s-c でコピー・s-n で新しいフレームが開くなど)。ただし、その副作用として本来のオプションキーとしての機能は使えなくなってしまう。たとえば日本語キーボードではバックスラッシュをオプション+円記号で入力する必要があるので、特別な対応が必要となる。

文化[編集]

Emacs教会[編集]

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

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

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

Emacs小指[編集]

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

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

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

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

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

用語[編集]

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

問題点[編集]

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

起動の遅さ[編集]

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

  • Eight Megabyte And Constantly Swapping(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起動時に自動的に一度起動するだけなので、速度は問題にならない。

関連項目[編集]

注釈[編集]

脚注[編集]

  1. ^ a b Zawinski, Jamie (2005年6月21日). “Emacs Timeline”. 2015年8月11日閲覧。
  2. ^ GNU Emacs Manual”. GNU Emacs Manual. FSF. 2012年11月24日閲覧。
  3. ^ Introducing Elfeed, an Emacs Web Feed Reader”. 2016年6月12日閲覧。
  4. ^ A Guided Tour of Emacs”. 2016年6月12日閲覧。 “Some users find that they can do almost all of their work from within Emacs.”
  5. ^ Greenberg, Bernard S. (1979). Multics Emacs: The History, Design and Implementation. http://www.multicians.org/mepap.html 2016年6月12日閲覧。. 
  6. ^ GNU Emacs FAQ”. 2016年6月12日閲覧。
  7. ^ a b c Adrienne G. Thompson. “MACSimizing TECO”. 2016年6月12日閲覧。
  8. ^ A history of Emacs”. XEmacs Internals Manual (2006年12月11日). 2007年8月22日閲覧。
  9. ^ Allombert, Bill. “Debian Popularity Contest”. Editors report. Debian. 2011年11月22日閲覧。
  10. ^ Arthur Samuel (1980年3月). “Essential E”. 2011年8月1日閲覧。
  11. ^ EMACS vs. vi: The endless geek 'holy war'”. 2016年6月12日閲覧。 “"EMACS as such actually started out as a standards project," emails Guy Steele”
  12. ^ 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日閲覧。. 
  13. ^ The Emac Bolio Name Koan” (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.'”
  14. ^ a b Stallman, Richard (1981年3月26日). EMACS: The Extensible, Customizable, Self-Documenting, Display Editor (技術レポート). MIT AI Lab. AI Memo 519a. http://dspace.mit.edu/bitstream/handle/1721.1/5736/AIM-519A.pdf 2011年1月7日閲覧。. 
  15. ^ 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日閲覧。 
  16. ^ 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.”
  17. ^ RMS Lecture at KTH: Japanese
  18. ^ A History of Emacs”. 2016年6月12日閲覧。
  19. ^ 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.”
  20. ^ Stoll, Clifford (1988). “Stalking the wily hacker”. Communications of the ACM 31 (5): 484?497. doi:10.1145/42411.42412 
  21. ^ New Git repository is up.”. 2016年6月12日閲覧。
  22. ^ 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"
  23. ^ Ugliest…repository…conversion…ever”. 2016年6月12日閲覧。 “twenty-nine years of continuous development by no fewer than 579 people”
  24. ^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs”. 2012年10月2日閲覧。
  25. ^ XEmacs is Dead. Long Live XEmacs!”. 2016年6月12日閲覧。
  26. ^ FrontPage - Meadow Wiki
  27. ^ SXEmacs Website”. Sxemacs.org (2009年10月11日). 2009年11月8日閲覧。
  28. ^ http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/
  29. ^ NotGNU Emacs Editor (Author's Official Download Site)”. Notgnu.org (2004年1月15日). 2009年11月8日閲覧。
  30. ^ Zile home page”. 2016年6月20日閲覧。
  31. ^ QEmacs Homepage”. Fabrice.bellard.free.fr. 2009年11月8日閲覧。
  32. ^ Christian Jullien. (1986年). “EmACT on sourceforge”. Christian Jullien. 2011年12月31日閲覧。
  33. ^ AMACS source”. 2016年6月12日閲覧。
  34. ^ apple2.org”. 2016年6月12日閲覧。
  35. ^ Cocoa text system”. 2016年6月12日閲覧。
  36. ^ SublemacsPro plugin for Sublime Text”. 2016年6月12日閲覧。
  37. ^ http://mail.gnu.org/archive/html/bug-gnu-emacs/2000-09/msg00065.html
  38. ^ Init file”. 2016年6月20日閲覧。
  39. ^ https://elpa.gnu.org/packages/
  40. ^ GNU Emacs FAQ for MS Windows
  41. ^ http://ftp.gnu.org/gnu/emacs/windows/
  42. ^ http://en.sourceforge.jp/projects/gnupack/
  43. ^ Saint IGNUcius - Richard Stallman”. 2015年1月29日閲覧。
  44. ^ The unabridged selective transcript of Richard M Stallman's talk at the ANU”. 2015年1月29日閲覧。
  45. ^ alt.religion.emacs newsgroup
  46. ^ Saint IGNUcius - Richard Stallman
  47. ^ a b How To Avoid The Emacs Pinky Problem”. Xahlee.org. 2009年11月8日閲覧。
  48. ^ EmacsWiki: Repeated Strain Injury”. 2015年1月29日閲覧。
  49. ^ Moving The Ctrl Key”. EmacsWiki. 2009年11月8日閲覧。
  50. ^ EmacsWiki: Ace Jump”. 2015年1月29日閲覧。
  51. ^ Spacemacs”. 2015年4月20日閲覧。
  52. ^ BayleShanks (2009年10月7日). “Sticky Modifiers”. EmacsWiki. 2009年11月8日閲覧。
  53. ^ Viper Mode”. EmacsWiki. 2009年11月8日閲覧。
  54. ^ At Home Modifier by Evdev”. 2015年4月14日閲覧。
  55. ^ Why Emacs's Keyboard Shortcuts are Painful”. 2016年6月12日閲覧。
  56. ^ VAXen”. Catb.org. 2009年11月8日閲覧。

外部リンク[編集]