Emacs
Emacs(イーマックス)とは高機能でカスタマイズ性の高いテキストエディタである。スクリーン・エディタとしての人気が高く、特にUNIXのプログラマを中心としたコンピュータ技術者に愛用者が多い。
目次
[非表示]概要
ガイ・スティール、デイブ・ムーン、リチャード・グリーンブラット、チャールズ・フランクストンらの書いたひと組の TECO マクロ・エディタである TECMAC と TMACS のアイデアに触発され、1975年にリチャード・ストールマンがガイ・スティールとともに書いた TECO エディタのエディタ・マクロ (editing macros) 一式が最初の EMACS である。 その後、何年もの間に多くの Emacs 実装が現れたが、今日よく使われているのはリチャード・ストールマンが1984年に開発を始め今日に至るまで管理している GNU Emacs と、1991年に GNU Emacs からフォークした XEmacs である。 強力な拡張言語である Emacs Lisp を使うことにより、コンピュータ・プログラムの編集、コンパイルから、ウェブの閲覧に至るまで様々な仕事をこなすことができる。
取り扱い説明書[1]では、Emacs 自身を「the extensible, customizable, self-documenting, real-time display editor」(拡張可能でカスタマイズ可能で、自己説明的で、リアルタイム表示を行うエディタ)だと説明している。
大文字で始まる「Emacs」と、小文字の「emacs」を区別する人もいる。
大文字で始まる「Emacs」は、リチャード・ストールマンの作ったエディタから派生したエディタ(特に GNU Emacs、XEmacs)を指し、小文字の「emacs」は、たくさんある個別の emacs 実装を指す。
雄牛を意味する英語「ox」の複数形「oxen」からの類推で、「emacs」という英語の複数形は「emacsen」とつづられる。たとえば、Debianの互換 Emacs パッケージは、emacsen-common
となっている。
コリンズ英語辞典[2]には、emacsen という複数形だけが掲出されている。Windows用アプリケーションであるNTEmacs、Meadowなども emacsen に含まれる
。
Unix文化において、Emacs と vi はともに伝統的なエディタ戦争における双璧をなしている。
Emacs はエディタの範疇を超え、テキスト処理のための包括的作業台、あるいはアプリケーションソフトウェア実行環境であるといえる。Emacs は長い歴史を持っており、初めからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流の GNU Emacs の開発はもともとはUNIX環境とVAX/VMSを主なターゲットとしていたが、各種のOSへの移植もなされてきており、OS X、Windowsなど多くの環境で利用することができる。
歴史
Emacsは、1970年代のMIT人工知能研究所(MIT AI研)で産声をあげた。 AI研のPDP-6やPDP-10のオペレーティングシステムだったIncompatible Timesharing System (ITS) への導入前の既定エディタは、TECOというラインエディタだった。 現在の一般的なテキストエディタとは違い、TECOには入力・編集・表示用の別々のモードがあり、文字を入力しても即座に表示されるわけではなかった。 編集されたテキストが画面に表示されていないとき、意図した文字が挿入されるようTECOのコマンド言語で一連の命令を書かなければならなかった。 この振舞は、現在も使われているedプログラムと同じである。
リチャード・ストールマンは、1974年か1972年にスタンフォード人工知能研究所を訪れ、ラボの「E」エディタを見た。 このエディタの振舞は、今のエディタのほとんどで使われている直感的なWYSIWYGであり、彼はその機能に触発されてMITに戻った。 AI研ハッカーの一人、Carl Mikkelsenは、利用者がキー操作するたびに画面表示を更新する「Control-R」というリアルタイム表示・編集モードをTECOに追加していた。 ストールマンは、この更新が効率的に動くよう書き直し、任意のキー操作でTECOプログラムが動くように利用者が再定義できるマクロ機能をTECOの表示・編集モードに追加した。
新版のTECOはまたたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」で終わる名前のカスタム・マクロの巨大なコレクションが溜まった。 2年後、どんどんばらばらになっていくキーボード・コマンド・セットを1つに統合するプロジェクトをガイ・スティールが引き受けた。 スティールとハックしたある夜の後、ストールマンは新しいマクロ・セットの文書化や拡張の機能を含んだ実装を完成させた。 できあがったシステムは"Editing MACroS"を意味するEMACSと呼ばれることになる。 ストールマンによると、Emacsとしたのは「当時ITSで<e>が略称に使われていなかったから」である。
また、ボストンの人気アイスクリーム屋「テンプレート:仮リンク」の店がMITから徒歩圏内にあったからとも言われている。 その店によく通っていたDave Moonはその後、ITSで使われたテキスト整形プログラムをBOLIOと名づけた。 このことは、テンプレート:仮リンク のEmacs and Bolioの素となっている。
過度のカスタム化や事実上の分裂の危険に気づいたストールマンは、とある使用上の条件をつけた。 彼は後に次のような文章を残している。
「EMACSは、共同参加を基として頒布される。つまり、改良点はすべて、組み入れて頒布するために、私のところへ戻ってこなければならない」
オリジナルのEmacsはTECO同様、PDPだけで動いた。 その動きはTECOと大きく異なっていた。 そして、急激にITS上の標準編集プログラムとなった。 当初、Michael McMahonによりITSから、Unixにではなく、TenexやTOPS-20オペレーティングシステムに移植された。 初期のEmacsへの貢献者には、このほかKent Pitman、Earl Killian、Eugene Ciccarelliらがいる。
他のemacsたち
その後、他のコンピュータ・システム用に、多くのEmacs風エディタが書かれた。 1976年前後からMichael McMahonとDaniel Weinrebらが、 EINE ("Eine Is Not Emacs") 、 ZWEI ("Zwei Was Eine Initally"、Lispマシン用) を書き(なお、ZWEIはドイツ語で「2」の意味でもある。EINEが「1つの」(女性形)にあたるためのもじり。ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)、 Owen Theodore Andersonにより、SINE ("Sine Is Not Emacs") が書かれた。 Daniel WeinrebのEINEは、Lispマシン上の実装で、Lispで書かれた最初のEmacsであり、ユーザー自身がLispを用いて拡張できる。
1978年、Bernard Greenbergは、ハネウェルのケンブリッジ情報システム研で、Multics Emacsを書いた。
Unixで動いた最初のEmacs風エディタは、後にNeWSやJavaの開発で知られることになるジェームス・ゴスリングが1981年に書いたGosling Emacsだった。 これはCで書いてあり、MocklispなるLisp風構文の拡張言語を使っていた。 Mocklispにはシンボルさえなく[3]、構文がLisp風なだけで、本当のLispではない。現在広く使われているフリーソフトウェアであるGNU EmacsやMeadowと異なり、Gosling Emacsはプロプライエタリ・ソフトウェアであった。プロプライエタリ・ソフトウェアとは、ソースコードが公開されていないソフトウェアで、プログラムを自由に配布や改変、逆コンパイルをすることができないものを指す用語である。
GNU Emacs
1984年、Gosling Emacsのフリーソフトウェア版をつくるべく、ストールマンはGNU Emacsに取り組み始めた。 当初は、Gosling Emacsを基にしていたのだが、ストールマンはMocklispインタプリタを本物のLispインタプリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。 これは、揺籃期のGNUプロジェクトがリリースした初のプログラムとなった。 GNU EmacsはCで書いてあり、(Cで実装した)Emacs Lispを拡張言語としている。 最初にひろく頒布されたGNU Emacsの版は、1985年に登場した15.34だった (2版から12版まではない。初期のGNU Emacsは、「1.x.x」のように採番されていたが、1.12版の出た後、メジャー番号が変わりそうにないため、先頭の1をなくすことにした。 最初の公開リリース13版は、1985年3月にできた)。
Gosling Emacs同様、GNU EmacsもUnixで動く。 だが、GNU Emacsには、拡張言語としてフル装備のLispなどの機能があった。 そのため、すぐGosling Emacsと入れ替わり、Unixで動く事実上のEmacsエディタとなった。
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 の静的スコープ。 |
伽藍とバザールで「伽藍」式開発の例にあげられていたように、GNU Emacsの開発は、1999年まで比較的閉鎖的だった。 それ以降、公開の開発メーリングリストで議論がなされるようになった。 バージョン管理システムは1993年より匿名CVSアクセスを採用していたが、2009年末よりBazaarに切り替えられた。 管理者は長らくリチャード・ストールマンが務めていたが、2008年からStephan MonnierとChong Yidongに引き継がれている。
XEmacs
初期の GNU Emacs は GUI への対応が貧弱であった。Epoch は GNU Emacs バージョン18を基にしてX Window Systemのマウスや複数ウィンドウ(フレーム)機能に拡張を施したものである。
1991年初頭、GNU Emacs 19の初期α版を基に、テンプレート:仮リンクとテンプレート:仮リンクの人たちによりLucid Emacsが開発された。 コードベースはすぐに分割し、開発チームは、単一プログラムとして併合しようとするのをあきらめた[4]。 これは、フォーク した フリーソフトウェア・プログラムのうち初期の最も有名な例である。 Lucid EmacsはXEmacsと名前を変えた。 XEmacs の「X」は、グラフィカルユーザインタフェースとしてのX Window Systemに当てた初期の中心点からか、XEmacs開発者たちの妥協の産物として「大賛成というほどではない」 (less than favorable) 名前からきている [1]。 GNU EmacsとXEmacsの両方とも、テキスト端末と、グラフィカルユーザインタフェースの両方をサポートしている。
XEmacs はかつて GNU Emacs と並んで人気があったが、バージョンが 21 のまま2009年以来開発が止まっている。
その他の実装
GNU Emacsは当初、当時のハイエンドであった、32ビットのフラットアドレス空間、1 MiBのRAMをもつコンピュータを想定していた。 このため、小さな再実装への道がひらかれた。 そのうちきわだつものは、以下のとおり。
- テンプレート:仮リンク
- Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。リーナス・トーバルズの使うエディタ[5]
- テンプレート:仮リンク
- 当初MicroGNUEmacsといわれていて、キーバインドが若干GNU Emacsに似ているMicroEMACSのフォーク。OpenBSDでは既定でインストールされる
- JOVE (Jonathan's Own Version of Emacs)
- Jonathan PayneによるUNIX風システム用の非プログラマブルなEmacs実装
- テンプレート:仮リンク
- テキスト・マクロ拡張を基本にした拡張言語をもちつつ、オリジナルのセグメント内に収めるための64 KiBメモリ制限を満たしたDOS版
Emacsライク(Emacs風)なエディタとなるとさらに多いが、マクロ言語としてCommon Lisp系のxyzzy Lispを実装したxyzzy、テンプレート:仮リンクベースのテンプレート:仮リンク、かつて MS-DOS 時代にプログラマ用エディタとして人気のあった テンプレート:仮リンクなどがある。
ライセンス
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や、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった[6] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。
この強制は、GNU Emacsのフリーソフトウェア・ライセンス、つまりGNU General Public Licenseと、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえている。
機能
以下は、今日広く使われているEmacs実装である最近のEmacs、すなわちGNU EmacsとXEmacsについて記述する。 GNU Emacsからのフォークとして始まったXEmacsとその後継版は、GNU Emacsとおおむね互換性がある。
vi が編集のための基本的な機能のみを搭載していたのに対し、Emacs はインクリメンタルサーチ・無制限のアンドゥ・ヤンク(ペースト)用のスタック・複数のバッファ・バッファ上でシェルを実行・補完・言語ごとのモードなど、エディタとして考えられる限りの機能を詰め込んでいる。vimではEmacsと同等のことができるようになっているが、バッファの使い方はEmacsより控えめである。
プラットフォーム
Emacsは数多くのプラットフォームに移植されている。Unix風システム(Linux、各種BSD、Solaris、AIX、IRIX、OS Xなど)、MS-DOS、Microsoft Windows、OpenVMSを含む、幅広いオペレーティングシステムで動く。フリーであるか独占的であるかに関わらず、Unixシステムの多くにEmacsが同梱されている。
Emacsは文字端末のみならずGUI環境でも動作する。Unix風システムでは、Motif、LessTif、GTK+といったウィジェット・ツールキット、および直接X Window Systemを利用してGUIを提供している。また、 OS XのCarbon・Cocoaインターフェース、Microsoft WindowsのGDIを使う実装もある。これらのGUI環境では、メニューバー、ツールバー、スクロールバー、コンテキストメニュー などが利用可能である。
基本的な操作
カーソル移動などは矢印キーをつかって行うこともできるが、主要な大部分の操作は、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に結果を表示することで、機能している。
バッファとフレーム
Emacsでは、複数のファイルを切り換えながら編集したり、同じファイルの別の箇所を同時に表示したりする事が可能である。 このような作業の為にEmacsは、バッファ、ウィンドウ、フレームという仕組みを用意している。
バッファは、直観的には「Emacsに読み込まれたファイル」だと思えばほぼ正しいが、それ以外にも様々なメッセージを表示する為のバッファやスクラッチ用のバッファもある。バッファはかならずしも画面上に表示されているとは限らず、どのバッファを画面に表示するかを切り替えることができる。
画面を複数のウィンドウに分割して、それぞれに同じまたは異なるバッファの内容を表示することができる。
フレームは、通常のコンピュータ用語でいうウィンドウに相当する。やはり同じまたは異なるバッファの内容を表示することができる。
ウィンドウやフレームの機能により、例えばあるフレームでプログラムのソースコードを表示しつつ別のフレームでそのプログラムのコンパイル結果を表示する事ができる。
ミニバッファ
ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。ミニバッファは通常1行しかないが、ここでも通常のバッファと同じ移動・編集コマンドを使うことができる。
編集モード
「主モード(メジャーモード、major-mode)」という編集モードにEmacsが入ることで、編集するテキストの種類に応じて振舞いを適応させる。 普通のテキスト・ファイル、多くのプログラミング言語のソースコード、HTML文書、TeXやLaTeXの文書や、多くの他種のテキスト用に主モードが定義されている。 各主モードはEmacs Lisp変数を調節するなどして固有の型のテキストに都合よく振る舞うように作られている。 特に、キーワードやコメントなどの表示にさまざまな書体や色を用いた構文の強調をしばしば実装する。 主モードは、専用の編集コマンドも提供する。たとえばプログラミング言語用の主モードはしばしば、関数の先頭や末尾へ飛ぶコマンドを定義する。
ファイルを16進で表示してバイナリ編集できる hexl-mode などの特殊なモードもある。
「副モード(マイナーモード、minor-mode)」でEmacsの振舞をもっとカスタム化することもできる。 たとえば、Cプログラミング言語の主モードは、人気の字下げスタイルそれぞれにさまざまな副モードを定義している。 主モードは2つ以上同時に使用できないが、副モードは同時に複数を有効にできる。
説明文字列
Emacsには最初から、各個別のコマンド、変数、内部関数の説明文字列を表示する強力なhelpライブラリーがついてきた。 この機能のため、Emacsは「自己説明的」といわれる 各関数には、説明文字列が含まれていて、具体的には必要に応じ利用者に表示される。 その後、関数に説明文字列をつける習慣は、LispやJavaといったさまざまなプログラミング言語に広まった。
Emacsのhelp体系は、ソースコードへのリンクがついているため、組込みのライブラリーであってもインストールされた第三者のライブラリーのEmacs Lispソースコードであっても、helpを使って閲覧することができる。
組込みの説明文字列のほかにも、リチャード・ストールマンの執筆したGNU Emacs Manualの電子コピーがGNU Emacsについており、組込みのInfoブラウザで閲覧することができる。 XEmacsの場合、ソフトウェア本体と同時にGNU Emacs Manualからフォークした同様のマニュアルがある他、Bill Lewis、リチャード・ストールマン、Dan Laliberte共著のEmacs Lisp Reference Manual、Robert Chassel著のProgramming in Emacs Lispも含まれている。 電子版のほかに、3種のマニュアルがフリーソフトウェア財団から書籍のかたちで刊行されている。
Emacsには組込みのチュートリアルもある。 編集するファイル抜きでEmacsを立上げると、簡単な編集コマンドとチュートリアルの呼出し方の説明が、表示される。
- 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でコンパイルすることが可能である[7]。バイナリ形式でも配布されているので、zipを展開するだけでWindows上でEmacsが使用可能である[8]。
日本では、かつて宮下尚によりWin32アプリケーションとしてMule 2.3をベースにしたMule for Win32、そしてEmacs 20をベースにしたMeadowが、Windows上に移植・開発され、広く使われていた。2004年7月7日にはGNU Emacs 21をベースにしたMeadow2がリリースされたが、Emacs 22 以降には対応していない。一方、上記のバイナリは日本語IMEからの入力に問題があるため、パッチをあててCygwinでビルドしたgnupack[9]が使われるようになってきている。
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 をソースからビルドすることもできる。
OS X では、コントロールキーのほかにコマンドキーとオプションキーが用意されており、そのどちらかをMetaキー・もう片方をSuperキーとして使うことができる。Superキーの割り当ての一部は OS X の標準のキー割り当てとよく似ている(s-x でカット・s-c でコピー・s-n で新しいフレームが開くなど)。ただし、その副作用として本来のオプションキーとしての機能は使えなくなってしまう。たとえば日本語キーボードではバックスラッシュをオプション+円記号で入力する必要があるので、特別な対応が必要となる。
アプリケーション実行環境としてのEmacs
Emacsの利用者は、自分のニーズに合わせるためにエディタをカスタム化することができる。 Emacsをカスタム化する方法は大きく3つある。
第一はcustomize拡張で、GUIを使って通常のカスタム化変数を利用者が設定できる。
第二は一連のキー操作を記録して入り組んだ繰返しの仕事を自動化するよう再生することである。これをマクロと呼ぶ。 マクロは保存して必要時に呼び出すこともできるが、その場限りの使い捨てであることが多い。
第三はEmacs Lispを使ったEmacsのカスタム化である。
利用者用のEmacs Lispコードは、Emacsの立上げ時に読み込まれる.emacs.el
というファイル(以前は .emacs
という名前だった)に保存する。.emacs.el
ファイルは、変数や既定とは違うキーの結び付きを設定したり、利用者が便利と思ったコマンドを新しく定義したりするのに用いる。Emacsの既定の振舞からかけ離れた風変わりなカスタム化をする場合、数百行に及ぶこともある。
Emacs Lispはカスタマイズ言語にとどまらず、フル機能のプログラミング言語である。Emacsの機能の多くはEmacs Lispで書かれている。つまり、Emacsの構造はEmacs Lispの実行機能(と基本的な編集機能)を持ったEmacs Lispインタプリタを中心に、Lispで書かれた多くのコードによって実現されている。たとえば、Emacsは多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべてEmacs Lispで書かれている。
Emacsは、プログラマが単一インターフェースでコードを編集、コンパイル、デバッグするような統合開発環境 (IDE) としても使うことができる。
このような編集機能にとどまらず、Emacs LispはTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。
その他様々な機能を持つライブラリーが存在する。
- Dired: ファイルマネージャ
- Ediff: 差分ファイルを渡り歩く
- Emerge: ファイルの比較と結合
- VC: バージョン管理システム
- Calc: 数値計算機
- Info: オンラインヘルプ
- Calendar-mode: 予定表と日記
- JDE: Java統合開発環境
- wikipedia-mode: Wikipediaの記事を編集する
- SKK: かな漢字変換
- Emacs W3: ウェブブラウザ
- ERC: IRCクライアント
- Twittering-mode: ツイッターのクライアント
- Mew、mh-e、Wanderlust: 電子メールクライアント
- Gnus: フル装備のニュースリーダー兼電子メールクライアント
- Emacs-wiki: Emacsを使ったLispベースのwikiソフトウェア
- Planner: Emacsを使った個人情報管理
- Doctor: ELIZA 風の自動会話プログラム
- Tetris: テトリス
- Pong: ポン
- Dunnet: テキスト・アドベンチャー
ライブラリーは、インターネットで見付けることができる。 新しいライブラリーを投稿するためのUsenetニュースグループgnu.emacs.sourcesまである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。
Emacs 24 では、パッケージマネージャが内蔵された。公式のパッケージアーカイブである GNU ELPA(Emacs Lisp Package Archive)[10]のほか、いくつかのアーカイブを扱うことができる。
問題点
- vi などにくらべて起動が遅い。ただし、Emacsは立ちあげっぱなしにしておく使い方をすることが可能であり、長い起動時間は問題にならないいう反論もある。
- Emacsではファイラもオプションの設定画面も通常のエディタ画面と同じ操作が可能であるという特徴があるが、ダイアログボックスなどを使ったGUIに慣れたユーザーにとって、このようなUIはなじみにくい。
- カスタマイズ可能な機能の数が極端に多く、何を設定したらいいのかわかりづらい。
- Emacs Lisp により拡張機能が作りやすいため、類似した機能を実現した多数の実装が乱立しやすい。
Emacs小指
Emacsは、修飾キー、特に小指で押されるControlキーに依存しているため、重度のEmacs利用者は小指に痛みをおぼえることがある (cf repetitive strain injury, fat-finger)。 これは俗に「Emacs小指」と称され、viの主唱者がviに切り替えた理由としてしばしば引合いに出される。 これを緩和するため、多くのEmacs利用者は左のControlキーとCapsLockキーを交換したり、両方をControlキーに定義したりする。修飾キーを親指で簡単に押せる位置に移動して痛みをやわらげるKinesis Contoured Keyboardや、手の平で押せるようキーボードの両側に大きな修飾キーを移動したMicrosoft Naturalキーボードがある。
起動の遅さ
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起動時に自動的に一度起動するだけなので、速度は問題にならない。
脚注
- 元の位置に戻る ↑ The GNU Emacs Manual
- 元の位置に戻る ↑ Collins English Dictionary
- 元の位置に戻る ↑ RMS Lecture at KTH: Japanese
- 元の位置に戻る ↑ テンプレート:Cite web
- 元の位置に戻る ↑ http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/
- 元の位置に戻る ↑ http://mail.gnu.org/archive/html/bug-gnu-emacs/2000-09/msg00065.html
- 元の位置に戻る ↑ GNU Emacs FAQ for MS Windows
- 元の位置に戻る ↑ http://ftp.gnu.org/gnu/emacs/windows/
- 元の位置に戻る ↑ http://en.sourceforge.jp/projects/gnupack/
- 元の位置に戻る ↑ https://elpa.gnu.org/packages/
外部リンク
- GNU Emacs 公式サイト
- emacs GNU Savannah(サバンナ)
- 井田昌之によるBIT誌上の連載「Emacs解剖学」(Internet Archiveのキャッシュ)
- EmacsWiki – Emacsの文書化や議論専用のコミュニティー・サイト
- Emacsの実装一覧(Emacs Inplemantation)
- 初心者向け HowTo
- プログラマ向け HowTo